2015-04-08 3 views
0

У меня есть таблица excel, которая вычисляет, сколько материалов нужно заказывать за каждую работу, которую мы делаем.Excel, цикл через столбцы и строки

Что я хочу сделать, так это создать кнопку, которая скопирует существующую таблицу на страницу 2 моей книги excel. Стол имеет ширину в два столбца. Поэтому я бы хотел нажать кнопку, она скопирует таблицу на A и B на странице 1 на стр. 2 A и B. После этого я хочу, чтобы Excel запоминал A и B, и в следующий раз я нажимаю кнопку , он идет в столбцах C и D, затем E и F и т. д. (всегда на стр. 2).

, чтобы объяснить, почему я хотел бы это, мне нужно заказать 1000 кв. Футов материалов, но в разделах. всего 250 кв. футов материалов за один раз. Итак, я хочу, чтобы заполнить, сколько им заказа, нажмите кнопку, и это сохраняет информацию о том, что было заказано на странице 2. Таким образом, его легко вернуться и посмотреть, что было сделано, какая дата, сколько заказано, что оставляется на заказ и т. д.

Я знаю, что с числами это было бы просто, просто увеличивая i на два при каждом нажатии кнопки, но я не знаю, как это сделать для столбцов excel (букв).

Есть ли какая-то легкая команда, которую я просто не могу найти в Интернете, чтобы заниматься этим?

Благодарим за помощь!

+0

Вы должны быть в состоянии найти места в Интернете, которые отвечают на похожие вопросы. Вы что-то пробовали? Записанный макрос на самом деле заставит вас поближе по этому поводу. – Kyle

ответ

0

Что вы должны учиться в VBA и изменить в этом ниже код, как определить фактический диапазон таблицы на Лист1 - вместо жесткого кодирования его "A1:B10"

UPDATE Не знаю, почему предыдущая версия не сработала для вас, но я обновил код ниже, чтобы сохранить следующее расположение столбца в вспомогательной ячейке, чтобы узнать, работает ли это для вас.

Option Explicit 

Sub Button1_Click() 
    Dim srcTable As Range 
    Dim dstTable As Range 
    Dim nextLoc As Range 
    Set srcTable = Sheets("Sheet1").Range("A1:B10") 
    Set nextLoc = Sheets("Sheet2").Range("A20") 

    '--- if this is your first copy, then cell A1 should be empty 
    If IsEmpty(Sheets("Sheet2").Range("A1").Value) Then 
     Set dstTable = Sheets("Sheet2").Range("A1:B10") 
     nextLoc.Value = 3       'next location is column 3 
    Else 
     '--- we're adding the next table... 
     Set dstTable = Sheets("Sheet2").Cells(1, nextLoc.Value) 
     nextLoc.Value = nextLoc.Value + 2 
    End If 
    srcTable.Copy dstTable 
End Sub 
+0

Это скопирует таблицу так, как я хочу, но то, что я не уверен, заключается в том, как сделать ее двумя столбцами в конце ее. Я пробовал код, и он просто переписывает его в том же месте, иначе A1: B10 листа 2 ... –

+0

Я в настоящее время обманываю, комментируя сборку IF/Else, 10 раз, поэтому каждый раз, когда он проверяет, есть ли это что-то, и если есть, то это происходит в моем другом. Это некрасиво, но я думаю, что это трюк! –

+0

Магия находится в 'End (xlToLeft) .Offset (0, 1)' part. Это определение диапазона назначения должно выбрать первый пустой столбец, начиная с самого дальнего правого столбца ('IV1'), а затем искать влево (' xlToLeft'), чтобы найти первую непустую ячейку, а затем смещение что непустая ячейка находится в одном столбце справа ('Offset (0,1)'. Каждый раз, когда я запускал код выше, таблица из Sheet1 была скопирована в следующий пустой столбец на Листе 2. Вы изменили эту строку? – PeterT

Смежные вопросы