VBA 将数据复制到列中

VBA to copy data into Columns

我目前有这个代码

Sheets("Pivot_Table_Non_Closed_Area").Range("E7:L7").Copy
'Pastes the data from the sheet above in the next avaliable row.
Sheets("Tracking_Table_Non_Closed_Area").Cells(Rows.Count, "C").End(xlUp).Offset(1). _
PasteSpecial Paste:=xlPasteValues, _
Operation:=xlNone, SkipBlanks:=False, Transpose:=False
Sheets("Tracking_Table_Non_Closed_Area").Select
n = Cells(Rows.Count, "C").End(xlUp).Row
Range("A" & n) = Date
Range("B" & n) = Time

这是我当前代码的呈现方式: https://www.dropbox.com/s/p99kh0y3x2vsbo2/Currently_Presents.JPG?dl=0

但我似乎无法弄清楚如何将其从复制数据行和粘贴行更改为从数据列复制并粘贴到列中

这就是我希望新代码呈现数据的方式: https://www.dropbox.com/s/krkdjlculdqpckn/Wish_for_it_to_Be_Presented.JPG?dl=0

希望这是有道理的

编辑: 这就是我当前的代码现在处理所有帮助的方式,但仍在努力处理日期和时间

Sheets("Pivot_Table_002").Range("B10:B19").Copy
Sheets("Sheet1").Cells(7, Columns.Count).End(xlToLeft).Offset(0, 1). _
        PasteSpecial Paste:=xlPasteValues, _
        Operation:=xlNone, SkipBlanks:=False, Transpose:=False
n = Cells(7, Columns.Count).End(xlToLeft).Column
Range("A" & n) = Date
Range("B" & n) = Time

谢谢

编辑 - DateTime 继续

您正在使用 Range 设置 DateTime 的目标,但现在 n 表示最后占用的列,您需要更改它逻辑。让我们使用 Cells 结构,我认为在这种情况下读起来更好:

Sheets("Tracking_Table_Non_Closed_Area").Cells(7, n) = Date Sheets("Tracking_Table_Non_Closed_Area").Cells(8, n) = Time

以下是 .Cells 的工作方式:

.Cells(row_identifier, column_identifier)

至此,您应该已经准备就绪!

编辑 - DateTime

让我们对 DateTime 应用我们对列式数据所做的相同策略。原始设计执行以下操作:

n = Cells(Rows.Count, "C").End(xlUp).Row

那里到底发生了什么? n 是一个数字。具体来说,n是第"C"列中最后一个被占用的单元格的行号。我们有兴趣在一行中获取最后占用的 - 假设,为了坚持下面的示例,我们在第 7 行中最后占用的列:

n = Cells(7, Columns.Count).End(xlToLeft).Column

轰!现在 n 保留了最后占用的列号,您可以应用与最后两行中相同的策略来根据您提供的屏幕截图写入 DateTime

初始答案:

我认为剖析您现有的代码会对您有所帮助,所以让我们开始吧!

copy/paste 动作发生在这两行上:

'This line does the copying
Sheets("Pivot_Table_Non_Closed_Area").Range("E7:L7").Copy

'This line does the pasting
Sheets("Tracking_Table_Non_Closed_Area").Cells(Rows.Count, "C").End(xlUp).Offset(1). _
        PasteSpecial Paste:=xlPasteValues, _
        Operation:=xlNone, SkipBlanks:=False, Transpose:=False

(我为粘贴行的清晰度添加的缩进,因为 _ 是一个多行指示器。)

我们来谈谈文案:

Sheets("Pivot_Table_Non_Closed_Area") '<~ this specifies the worksheet
Range("E7:L7")                        '<~ this specifies the range, which is a row-ish
                                      '   group of cells from E7 to L7
Copy                                  '<~ this is the copy method

因此,如果您想改为使用列式单元格组,则需要调整 Range。举个例子,假设您对从 E7 到 E11 的 5 个单元格的列组感兴趣。如果你想复制那个组,你会写:

Sheets("Pivot_Table_Non_Closed_Area").Range("E7:E11").Copy

不错!现在让我们深入研究粘贴:

Sheets("Tracking_Table_Non_Closed_Area")         '<~ this specifies the worksheet
Cells(Rows.Count, "C").End(xlUp).Offset(1)       '<~ this starts in the last cell in
                                                 '   column C (Rows.Count = the count
                                                 '   of all the rows, i.e. 1 million-
                                                 '   ish in Excel 2007+ or 56K-ish in
                                                 '   Excel 2003). Then, .End(xlUp)
                                                 '   simulates hitting Ctrl + Up on
                                                 '   the keyboard, bringing you to the
                                                 '   last occupied cell in column C.
                                                 '   Finally, .Offset(1) increments
                                                 '   that location by 1 row, bringing
                                                 '   you to the cell immediately below
                                                 '   the last occupied cell in
                                                 '   column C.
PasteSpecial Paste:=xlPasteValues (then options) '<~ this does the pasting, with
                                                 '   values-only (along with some
                                                 '   other options, which aren't that
                                                 '   important here.

很酷吧?找到最后一个占用的行并在其正下方写入信息是 VBA 的基石,因此我建议阅读 this killer writeup on that subject。那么,如果您想将我们复制的列状区域粘贴到第 7 行最后一个占用列右侧的一列上方怎么办?我们可以这样写:

Sheets("Tracking_Table_Non_Closed_Area").Cells(7, Columns.Count).End(xlToLeft).Offset(0, 1). _
            PasteSpecial Paste:=xlPasteValues, _
            Operation:=xlNone, SkipBlanks:=False, Transpose:=False

希望对您有所帮助!