VBA将数据复制到列中

时间:2015-01-08 07:48:36

标签: excel-vba vba excel

我目前有这段代码

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

由于

1 个答案:

答案 0 :(得分:0)

修改 - DateTime

您正在使用Date设置TimeRange的目标位置,但现在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中进行写入。

初步答案:

我认为对已经存在的代码进行剖析会对您有所帮助,所以让我们开始吧!

复制/粘贴操作发生在以下两行:

'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

因此,如果您想使用column-ish单元格组,则需要调整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

希望有所帮助!