2012-05-04 3 views
0

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

Мой существующий макрос успешно выполняет поиск и вставляет этот столбец данных в пустой столбец ниже, например B31. Когда у меня будет 10 новых данных, в следующий раз, когда я запустим макрос, я хочу, чтобы он вставлял его в C31, в столбце C (будучи следующей пустой строкой). В следующий раз D31 ....... и т. Д. Мой макрос многократно захватывает данные в H2: H11 и вставляет его в B31, но перезаписывает этот столбец каждый раз, когда я запускаю макрос снова. Это не «видя» столбец B, уже имеющий данные, помещенные туда, запустив макрос до ... Что не так с кодом?

Range("H2:H11").Select Selection.Copy 
Range("A31").Select 
Range("A31:M31").End(xlToLeft).Offset(0, 1).Select 
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ 
    :=False, Transpose:=False 
ActiveCell.Rows("1:10").EntireRow.Select 
Application.CutCopyMode = False 
+0

ли есть ли какие-либо данные в B31 после первого прохода? – Sam

+0

У меня есть альтернативное решение, которое я могу отправить, если вы хотите. – Sam

+0

Да, B31 продолжает получать новые данные, перезаписывая предыдущие данные. FYI, A31 содержит информацию о «заголовке», поэтому он начинается с a31, видит, что он не пуст, перемещается по одной ячейке и вставляет, даже когда он не пуст. – CJG

ответ

1
Range("A31:M31").End(xlToLeft).Offset(0, 1).Select  

должен быть

Range("M31").End(xlToLeft).Offset(0, 1).Select 

Альтернативное решение ниже (я не проверял, так как я не нахожусь на моем MS PC, извините)

dim lRow as Long 'Output Row 
lRow = 31   'Start at row 31 

    For i = 2 to 13 'Column B to Column M 

     'Count if there is any values in the columns 
     '(if there is a header then change the 0 to 1) 

     If Application.WorksheetFunction.CountA(ActiveSheet.Columns(i)) = 0 Then 

      For Each c in Range("H2:H11") 'Cycle through output values 

      ActiveSheet.Cells(lRow, i).value = c.Value 'Assign values 

      lRow = lRow + 1 'Increment row number 

      next c 

     exit for 'exit column loop 

     end if 

    next i 
+0

Мой метод, вероятно, не лучший способ делать что-то, но я стараюсь избегать копирования и вставки в макросы, когда только могу. – Sam

+0

Короткое, однострочное решение исправило это ... Большое спасибо. – CJG

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