2016-05-25 4 views
1

У меня есть код из моего рабочего кода, который копирует и вставляет данные из других Рабочих листов в один мастерский рабочий раздел. Код ниже позволяет мне копировать и вставлять данные из столбца BX в первую пустую строку столбца A и делать то же самое для столбца CC в первую пустую строку столбца B. Тем не менее, я хотел бы вставить столбец CC в колонку B (10). Как я могу это сделать?Копирование и вставка данных в выбранный ряд

lRow = copySheet.Cells(copySheet.Rows.Count, 1).End(xlUp).Row 

With copySheet.Range("BX2:BX" & lRow) 
    pasteSheet.Cells(Rows.Count, "A").End(xlUp).Offset(1, 0) 
    .Resize(.Rows.Count, .Columns.Count) = .Value 
End With 

'Determine last row of Column B in copySheet 
lRow = copySheet.Cells(copySheet.Rows.Count, 1).End(xlUp).Row 

With copySheet.Range("CC2:CC" & lRow) 
    pasteSheet.Cells(Rows.Count, "B").End(xlUp).Offset(1, 0) 
    .Resize(.Rows.Count, .Columns.Count) = .Value 
End With 

Не могли бы вы показать мне, как я могу определить, сколько строк будет снято для копирования?

Edit: Теперь я хотел бы добавить if условие для другого столбца, который должен сказать:

если

столбец U в «данных» Рабочий лист имеет значение ячейки «8636», а затем эти значения должны быть вставлены в колонку H на листе «КомКо» (пасты); к следующей строке, поскольку я использовал код выше в части «с».

остальное (Если значение в колонке H не 8636), то он должен вставить значение

внутри этой колонки к колонке G в рабочий лист «KomKo» (pastesheet) с теми же предпочтениями, как описано выше снова

.

Как я могу это сделать?

+0

Правильно ли я вас понимаю? ячейка = ячейки в листах («данные»). столбцы («U»), если ячейка = 8636, затем вставьте значение в первую пустую ячейку в листах («KomKo»). столбцы («H») else, если ячейка <> 8636 затем вставьте значение в первую пустую ячейку в листах («KomKo»). Столбцы («G») –

+0

да, это верно –

+0

Пожалуйста, проверьте отредактированный ответ. Надеюсь, это то, что вам нужно. –

ответ

2

Изменение pasteSheet.Cells(Rows.Count, "B").End(xlUp).Offset(1, 0).Resize(.Rows.Count, .Columns.Count) = .Value к этому pasteSheet.Range("B10").Resize(.Rows.Count, .Columns.Count) = .Value

************* ОТВЕТ НА ВОПРОС РЕД ****************
** ***** Добавлена ​​MaxR - самая высокая последняя строка из колонки H и G *******
вы могли бы сделать что-то вроде этого, чтобы получить то, что вам нужно:

Sub check8636values() 

    Dim copySheet, pasteSheet As Worksheet 
    Dim lRowU, lRowH, lRowG, maxR, i As Long 

    'Dont forget to change to the correct sheet names!!!! 
    Set copySheet = ThisWorkbook.Sheets("data") 
    Set pasteSheet = ThisWorkbook.Sheets("KomKo") 

    lRowU = copySheet.Cells(copySheet.Rows.Count, "U").End(xlUp).Row 

    For i = 1 To lRowU 

     lRowG = pasteSheet.Cells(pasteSheet.Rows.Count, "G").End(xlUp).Row + 1 
     lRowH = pasteSheet.Cells(pasteSheet.Rows.Count, "H").End(xlUp).Row + 1 
     maxR = Application.Max(lRowG,lRowH) 

     If copySheet.Cells(i, "U").Value = "8636" Then 

      pasteSheet.Cells(maxR, "H").Value = copySheet.Cells(i, "U").Value 
      pasteSheet.Cells(maxR, "Y").Value = copySheet.Cells(i, "T").Value 

     Else 

      pasteSheet.Cells(maxR, "G").Value = copySheet.Cells(i, "U").Value 
      pasteSheet.Cells(maxR, "X").Value = copySheet.Cells(i, "T").Value 

     End If 

    Next i 

End Sub 
+0

спасибо за ваш ответ, работает просто отлично! Можете ли вы проверить мое редактирование? –

+0

спасибо, что я проверил сейчас, и у меня есть следующая проблема. этот код разделяет значения «8636» на столбец H и остается на G, как я хотел. но мне нужно не иметь значения в H и G в той же строке.Если столбец имеет 8636, а следующий столбец имеет другое значение, то это другое значение должно быть в столбце G следующей строки, а не в текущих строках. Что я могу сделать для этого? –

+0

Просто измените 'lRowH' и' lRowG' на 'i' –

2

, так как вы имеете дело с диапазоны с одним столбцом только нет необходимости в блоках With-End With, чтобы аббревиатура параметров метода Resize: просто использовать lRow для первого только

кроме того, так как вы не показывать, если copySheet и pasteSheet от той же самой книги безопаснее ссылаться на них, прежде чем .Rows.Count и предотвратить проблемы, вытекающие из их исходной книги Excel версии

'Determine last row of Column B in copySheet 
    lRow = copySheet.Cells(copySheet.Rows.Count, 1).End(xlUp).Row 

    pasteSheet.Cells(pasteSheet.Rows.Count, "A").End(xlUp).Offset(1, 0).Resize(lRow) = copySheet.Range("BX2:BX" & lRow).Value   
    pasteSheet.Range("B10").Resize(lRow).Value = copySheet.Range("CC2:CC" & lRow).Value 
+0

спасибо за ваш ответ, работает просто отлично! Можете ли вы проверить мое редактирование? –

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