Скопируйте строки и вставьте их как столбцы в Excel с VBA автоматически - PullRequest
0 голосов
/ 23 октября 2019

Я учусь копировать и вставлять с VBA автоматически без перезаписи данных. Мне удалось получить код для копирования из строк и вставить их в виде строк.

Теперь я хочу скопировать строки (таким же образом), но каждый раз вставлять их в виде столбца. Первая строка должна начинаться с отметки даты (каждый месяц) и под ней суммы. Суммы копируются из сводной таблицы, которая будет обновляться каждый месяц.

Вот мой письменный код:

Private Sub CommandButton1_Click()

Dim lastrow As Long, ecol As Long

'Stamp from when the data set is (in months)


        If Worksheets("Database").Range("A3").Offset(1, 1) <> "" Then
            Worksheets("Database").Range("A3").End(xlDown).Select
             ActiveCell.Offset(1, 0).FormulaR1C1 = Now
        End If


'To check the last filled line on sheet 'Database_Input'
lastrow = Sheet12.Cells(Rows.Count, 2).End(xlUp).Row

'Copy Paste section
For i = 2 To lastrow
    Sheet12.Cells(i, 2).Copy
        ecol = Sheet14.Cells(3, Columns.Count).End(xlToRight).Offset(0, 1).Column
    ecol = Sheet14.Cells(3, Columns.Count).End
            Sheet12.Paste Destination:=Sheet14.Cells(3, ecol)
Next i

End Sub

Он продолжает давать мне ошибку в следующем разделе:

For i = 2 To lastrow
    Sheet12.Cells(i, 2).Copy
        ecol = Sheet14.Cells(3, Columns.Count).End(xlToRight).Offset(0, 1).Column
    ecol = Sheet14.Cells(3, Columns.Count).End
            Sheet12.Paste Destination:=Sheet14.Cells(3, ecol)
Next i

Любой, у кого есть идея, как иметь дело сэто? Я скопировал мой ряд -> код строки и отредактировал его. Может быть, это должно быть совсем по-другому.

Большое спасибо!

Ответы [ 2 ]

0 голосов
/ 23 октября 2019

Я даже не заглядывал в ваш код, если вам нужно просто транспонировать версию данных, поместить ваши данные в массив (range.value даст массив), просто используйте цикл для транспонирования, а затем назначьте егоновый ассортимент. Если вы хотите, чтобы они содержали формулу, используйте range.formula вместо value. просто обязательно позаботьтесь об относительных / абсолютных ссылках.

0 голосов
/ 23 октября 2019

Требуется свойство Column Range, а не Columns.

. Кроме того, вы можете передавать значение напрямую, что несколько более эффективно, чем копирование и вставка.

Я сделал полуобразованное предположение относительно желаемого диапазона назначения.

For i = 2 To lastrow
    ecol = Sheet14.Cells(3, Columns.Count).End(xlToleft).Offset(0, 1).Column 'not columns at the end
    Sheet14.Cells(3, ecol).Value = Sheet12.Cells(i, 2).Value
Next i
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...