我不完全确定你究竟在做什么,因为你的代码范围(“P”)。值没有多大意义,因为你只定义了一半的单元格范围。但我最好的猜测是你试图复制基于表头的整个列(正如你提到它在A1,B1和C1中分配的那样)?
如果是这种情况,那么这个快速宏循环遍历HeaderRange中定义的每个头,并且如果它与您的查询匹配,则将其复制到sheet3中的单元格A1。
Sub CopyCol()
Dim HeaderRange As Range
Dim Query As String
Set HeaderRange = Worksheets("Sheet1").Range("A1:C1")
Query = "Name"
For Each hcell In HeaderRange ' Loop through each header cell
If hcell.Value = Query Then ' If it matches your query then copy entire column
Range(hcell.Address).EntireColumn.Copy _
Destination:=Sheets("Sheet3").Range("A1")
End If
Next hcell
End Sub
希望这是一个很好的开球点。
[Excel VBA:我们可以通过名称引用一个列吗?](https://stackoverflow.com/questions/30633763/excel-vba-can-we-refer-a-column-by-its -name) – MatSnow
Excel不允许这种行为。您可以得到的最接近的是按照@MatSnow评论中推荐的练习。 – Stewbob