Vba 我有这段代码,但它只粘贴标题,而不是完整的数据列。
如果标题匹配,我希望代码粘贴整个列。到目前为止,它仅粘贴第(1)行中的值。谢谢。如果还有其他问题,我会尽快回复。我去掉了所有的暗影什么的Vba 我有这段代码,但它只粘贴标题,而不是完整的数据列。,vba,excel,Vba,Excel,如果标题匹配,我希望代码粘贴整个列。到目前为止,它仅粘贴第(1)行中的值。谢谢。如果还有其他问题,我会尽快回复。我去掉了所有的暗影什么的 Sub sample() Set sh1 = Sheets("Dec Demand") Set sh2 = Sheets("List") Set sh3 = Sheets("Results") With sh2 Set rngLookupValues = .Range("J2", .Range("J" & .Rows.Count).End(x
Sub sample()
Set sh1 = Sheets("Dec Demand")
Set sh2 = Sheets("List")
Set sh3 = Sheets("Results")
With sh2
Set rngLookupValues = .Range("J2", .Range("J" & .Rows.Count).End(xlUp))
End With
Debug.Print rngLookupValues.Address
With sh1
Set rngHeaders = .Range("A1", .Range("A1").End(xlToRight))
End With
Debug.Print rngHeaders.Address
For Each cValue In rngLookupValues
lngColumnToCopy = WorksheetFunction.Match(cValue, rngHeaders, 0)
Debug.Print lngColumnToCopy
With sh1
Set rngCellsToCopy = .Range(.Cells(1, lngColumnToCopy), .Cells(Rows.Count, lngColumnToCopy).End(xlUp)) ' HERE i want to have a copy entire column
End With
Debug.Print rngCellsToCopy.Address
With sh3
lngCurFirstEmptyColumn = .Cells(1, Columns.Count).End(xlToLeft).Column + 1
End With
Debug.Print lngCurFirstEmptyColumn
sh3.Cells(1, lngCurFirstEmptyColumn).Resize(rngCellsToCopy.Rows.Count) = rngCellsToCopy
Next cValue
With sh3.Range("A1")
If Len(.Value) < 1 Then
.EntireColumn.Delete
End If
End With
End Sub
子样本()
Set sh1=图纸(“十二月需求”)
设置sh2=图纸(“列表”)
设置sh3=工作表(“结果”)
含sh2
设置rngLookupValues=.Range(“J2”和.Range(“J”和.Rows.Count).End(xlUp))
以
调试。打印rngLookupValues。地址
与sh1
设置RNG引线=.Range(“A1”),.Range(“A1”).End(xlToRight))
以
调试.打印rngHeaders.地址
对于rngLookupValues中的每个cValue
lngColumnToCopy=工作表函数.Match(cValue,rngHeaders,0)
调试。打印lngColumnToCopy
与sh1
设置rngCellsToCopy=.Range(.Cells(1,lngColumnToCopy),.Cells(Rows.Count,lngColumnToCopy).End(xlUp))'我想在这里复制整个列
以
调试.打印rngCellsToCopy.地址
用sh3
lngCurFirstEmptyColumn=.Cells(1,Columns.Count).End(xlToLeft).Column+1
以
调试。打印lngCurFirstEmptyColumn
sh3.Cells(1,LNGCURRFIRSTPYCOLUMN).Resize(rngCellsToCopy.Rows.Count)=rngCellsToCopy
下一个C值
带sh3.量程(“A1”)
如果Len(.Value)<1,则
.entireclumn.Delete
如果结束
以
端接头
您需要更改
sh3.Cells(1,lngCurFirstEmptyColumn).调整大小(rngCellsToCopy.Rows.Count)=rngCellsToCopy
到
sh3.Cells(1,lngCurFirstEmptyColumn)。调整大小(rngCellsToCopy.Rows.Count)。Value=rngCellsToCopy.Value
或
rngCellsToCopy.Copy sh3.Cells(1,lngCurFirstEmptyColumn)
(不知道为什么,但您的语句没有复制任何内容,但添加.Value
可以解决问题)
'这里我想复制整个专栏 如果您真的需要复制entireclumn(这会使您的代码非常慢),请执行以下步骤 1)更改
Set rngCellsToCopy = .Range(.Cells(1, lngColumnToCopy), .Cells(Rows.Count, lngColumnToCopy).End(xlUp))
到
2)然后更改
sh3.Cells(1, lngCurFirstEmptyColumn).Resize(rngCellsToCopy.Rows.Count) = rngCellsToCopy
到
或者您也可以使用rngCellsToCopy.Copy sh3.Cells(1,lngCurFirstEmptyColumn)
还有一点需要注意的是:使用忘记在
行之前添加句点
。行中的Count
设置rngCellsToCopy=.Range(.Cells(1,lngcolumntopy),.Cells(Rows.Count,lngcolumntopy)。End(xlUp))
可能我有偏见,因为这是我的代码,但背后的原因是复制10-100k左右的行似乎效率更高,(大量excel表格中的典型数据量)然后复制1.6M(整列)。如果在数百列上循环,情况更是如此。作为记录,我绝对不会建议使用复制粘贴,永远不会。我同意,但OP说他想复制整个专栏(请参见QI中Set rngCellsToCopy=…
行中的注释了解您的观点,但是原始代码应该复制该列中的所有数据,并且所有空白单元格仍然是空白的。这是真的,我不知道OP为什么要复制整个列
。对于我来说,这一切都是无效的。很抱歉,延迟了一段时间,已脱机。请参阅我的更新答案:您应该使用sh3.Cells(1,lngcellstocopy.Rows.Count)。调整大小(rngCellsToCopy.Rows.Count)。Value=rngCellsToCopy.Value
而不是sh3.Cells(1,lngCurFirstEmptyColumn)。调整大小(rngCellsToCopy.Rows.Count)=rngCellsToCopy
sh3.Cells(1, lngCurFirstEmptyColumn).Resize(rngCellsToCopy.Rows.Count) = rngCellsToCopy
sh3.Cells(1, lngCurFirstEmptyColumn).EntireColumn.Value = rngCellsToCopy.Value