Vba 我有这段代码,但它只粘贴标题,而不是完整的数据列。

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

如果标题匹配,我希望代码粘贴整个列。到目前为止,它仅粘贴第(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(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