Excel VBA选择并集中的多个列

Excel VBA选择并集中的多个列,excel,vba,Excel,Vba,我有下面的电子表格,在VBA中,我想根据这些标题选择股票报价栏和参考价格栏 这是我到目前为止尝试过的,但是当我在范围内循环时,我只得到股票代码的值 Dim rngRefData As Range Set rngRefData = Union(rdWS.Range("1:1").Find("Ticker"), rdWS.Range("1:1").Find("Reference Price")) Set rngR

我有下面的电子表格,在VBA中,我想根据这些标题选择股票报价栏和参考价格栏

这是我到目前为止尝试过的,但是当我在范围内循环时,我只得到股票代码的值

 Dim rngRefData As Range
 Set rngRefData = Union(rdWS.Range("1:1").Find("Ticker"), rdWS.Range("1:1").Find("Reference Price"))
 Set rngRefData = Range(rngRefData, rngRefData.End(xlDown))

 For Each Item In rngRefData
      Debug.Print Item
 Next Item

如何将整个“股票代码”列选择为最后一个值,将整个“参考价格”列选择为最后一个值。

如果要在相邻范围内将这两列组合在一起,可以使用高级过滤器


如果要将相邻范围内的两列合并在一起,可以使用高级过滤器


可以根据数据行数调整范围大小

顺便说一句,像这样链接不是好的做法-如果你没有找到值,你的代码将出错,所以首先检查是否找到了术语

Sub x()

Dim rngRefData As Range
Dim r As Long
Dim r1 As Range, r2 As Range
 
r = rdWS.Range("A" & Rows.Count).End(xlUp).Row
Set r1 = rdWS.Range("1:1").Find("Ticker")  'and good practice to specify parameters
Set r2 = rdWS.Range("1:1").Find("Reference Price")

If Not r1 Is Nothing And Not r2 Is Nothing Then
    Set rngRefData = Union(r1.Resize(r), r2.Resize(r))
End If

For r = 1 To rngRefData.Rows.Count
    MsgBox rngRefData.Areas(1)(r) & " " & rngRefData.Areas(2)(r)
Next r

End Sub

可以根据数据行数调整范围大小

顺便说一句,像这样链接不是好的做法-如果你没有找到值,你的代码将出错,所以首先检查是否找到了术语

Sub x()

Dim rngRefData As Range
Dim r As Long
Dim r1 As Range, r2 As Range
 
r = rdWS.Range("A" & Rows.Count).End(xlUp).Row
Set r1 = rdWS.Range("1:1").Find("Ticker")  'and good practice to specify parameters
Set r2 = rdWS.Range("1:1").Find("Reference Price")

If Not r1 Is Nothing And Not r2 Is Nothing Then
    Set rngRefData = Union(r1.Resize(r), r2.Resize(r))
End If

For r = 1 To rngRefData.Rows.Count
    MsgBox rngRefData.Areas(1)(r) & " " & rngRefData.Areas(2)(r)
Next r

End Sub

请以这种方式尝试:

Set rngRefData = Union(rdWS.Range("1:1").Find("Ticker").EntireColumn, rdWS.Range("1:1").Find("Reference Price").EntireColumn)
Set rngRefData = Intersect(rdWS.UsedRange, rngRefData)
Debug.Print rngRefData.Address

rngRefData.Copy rdWS.Range("K1")
和评论:

'Set rngRefData = Range(rngRefData, rngRefData.End(xlDown))

请以这种方式尝试:

Set rngRefData = Union(rdWS.Range("1:1").Find("Ticker").EntireColumn, rdWS.Range("1:1").Find("Reference Price").EntireColumn)
Set rngRefData = Intersect(rdWS.UsedRange, rngRefData)
Debug.Print rngRefData.Address

rngRefData.Copy rdWS.Range("K1")
和评论:

'Set rngRefData = Range(rngRefData, rngRefData.End(xlDown))

这是可行的,但有没有办法让它打印出来作为股票代码,然后价格。例如:美国股票99.73 AACAY US Equity 6等…你不需要组合范围就可以做到这一点,只需在每一行中循环。我已将末尾的循环更改为遍历每一行并将结果放入消息框中,因此你毫无疑问可以根据情况进行调整。这是可行的,但有办法让它以股票代码的形式打印出来,然后按价格计算。例如:美国股票99.73 AACAY US Equity 6等…你不需要组合范围就可以做到这一点,只需在每一行中循环。我已将末尾的循环更改为遍历每一行,并将结果放在消息框中,因此毫无疑问,你可以根据需要进行调整。