Как скопировать (из COL) и вставить (в строку) (замена данных в определенных местах)?

#excel #vba

#excel #vba

Вопрос:

У меня небольшая проблема. Собранный мной код берет данные из столбца A в sheet(1) и копирует их (перенося в строку) в sheet(2) . Хотя, прежде чем вставить это (вот момент, когда я начал записывать макрос), я нажимаю «control right», чтобы найти первую заполненную ячейку (в строке 2 (sheet(2) ), а затем выбираю вставить в данные, транспонируя их и заменяя данные, которые у меня там уже есть (в строку).

Проблема в том, что у меня есть 1000 столбцов, которые мне нужно перенести таким образом в строки (в каждом случае строка начинается в разных точках sheet(2) ) и заменить старые данные. Может кто-нибудь посоветовать, пожалуйста? Для этого потребуется какой-то цикл (я это знаю).

 Sub test()

Dim ws1, ws2 As Worksheet, lr As Long

Set ws1 = ThisWorkbook.Sheets(1): Set ws2 = ThisWorkbook.Sheets(2)

lr = ws1.Range("A" amp; ws1.Rows.Count).End(xlUp).Row

ws1.Range("A2:A" amp; lr).Copy

With ws2
'I have recorded this part
ws2.Activate
Range("A2").Select
    Selection.End(xlToRight).Select
    Selection.End(xlToRight).Select
    Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
        False, Transpose:=True
End With
End Sub
  

Несколько экранов для пояснения:

введите описание изображения здесь

Здесь ws2, где данные начинаются в разных точках каждой строки (мне нужно, чтобы данные из ws1 были скопированы в ws2 и заменяли данные именно там, где они начинаются в каждой строке):

введите описание изображения здесь

Комментарии:

1. Куда вы собираетесь вставить значения в `ws2′? В строке, равной номеру скопированного столбца? Тогда все ли столбцы на первом листе имеют одинаковое количество записей?

2. @FaneDuru таким образом, данные столбца A (ws1) отправляются в строку 2 (ws2), столбца B (ws1) — в строку 3 (ws2) и так далее. Столбцы в A содержат разное количество записей.

3. Затем, пожалуйста, попробуйте мой код ответа.

Ответ №1:

Попробуйте следующий код, пожалуйста:

 Sub testCopyTranspose()
 Dim ws1, ws2 As Worksheet, lr As Long, lastCol As Long, LastCol2 As Long, i As Long

 Set ws1 = ThisWorkbook.Sheets(1): Set ws2 = ThisWorkbook.Sheets(2)

 lastCol = ws1.cells(1 amp; Columns.count).End(xlToLeft).Column

 For i = 1 To lastCol
    lr = ws1.cells(Rows.count, i).End(xlUp).Row
    LastCol2 = ws2.cells(i   1, 1).End(xlToRight).Column
    ws1.Range(ws1.cells(2, i), ws1.cells(lr, i)).Copy
    ws2.cells(i   1, LastCol2).PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, _
                                               SkipBlanks:=False, Transpose:=True
 Next i
End Sub
  

Комментарии:

1. это замена строк, начинающихся в столбце A (в ws2), в то время как мне нужно определить первую точку данных в каждой строке (поскольку там есть данные) и вставить туда, где начинается каждая строка, например. строка 2 начинается в LB2, строка 3 в FX3, строка 4 в LI4, строка 5 в MF5 и так далее.

2. @West Ray: Что вы подразумеваете под «первой точкой данных»? Вы имеете в виду последний пустой столбец в этой конкретной строке, где выполняется вставка?

3. первая точка данных в строке 2 (ws2) начинается в LB2 (и именно туда мне нужно вставить данные из столбца A (ws1) — затем мне нужно вставить данные из столбца B (ws1) в FX3 на ws2). Проблема заключается в том, чтобы (автоматически) определить, где начинается временной ряд в ws2 для каждой строки (вот почему я записал часть своего макроса, чтобы найти первый экземпляр непустой ячейки в строке 2).

4. Итак, мое последнее предположение должно быть правильным. Это означает, что код найдет первый столбец, содержащий данные о вставляемой строке , и вставит туда. Правильно ли это понимание?

5. @West Ray: Я адаптировал код, исходя из вышеизложенного предположения. Но вы не можете подтвердить (или ослабить), что я предположил, что вы хотите? Я могу адаптировать код в любом направлении, но я хотел бы сделать это после того, как буду уверен, что понимаю, что вам нужно.