或声明&条件指示执行两个或三个for循环中的一个

时间:2015-08-06 17:38:08

标签: vba excel-vba excel-2010 excel-2007 excel

这是我在细胞E1:G14

中的数据
Issue Name                      Ticker
F/c 90day euro$ futr  dec15  Edz5 xcme
F/c h-shares idx fut  jul15     Hcn5 xhkf
F/c mini msci emg mkt sep15     Mesu5ifus
F/c s&p/tsx 60 ix fut sep15     Ptu5 xmod
F/c russell 2000 mini sep15     Rtau5ifus
F/c swiss mkt ix futr sep15     Smu5 xeur
F/c us 10yr note(cbt) sep15     Tyu5 xcbt
F/c euro buxl 30y bnd sep15     Ubu5 xeur
F/c euro stoxx 50     sep15     Vgu5 xeur
F/c us ultra bond(cbt sep15     Wnu5 xcbt
F/c gasoline rbob fut sep15     Xbu5 xnym
F/c aust 10yr bond fut sep 15   Xmu5 xsfe
F/c ftse 100 idx fut  sep15     Z u5 ifll

我现在的代码:

Sub copy_paste()

Worksheets(1).Activate
Dim ch As Long
Dim c As Variant
Dim d As Variant
Dim v As Range
Dim w As Range
Dim brow As Long
Dim crow As Long
Dim cc As Variant

Set w = Sheets(1).Range("E:E")
brow = w(w.Cells.Count).End(xlUp).Row
Set w = Range(w(2), w(brow))

Set v = Sheets(1).Range("G:G")
brow = v(v.Cells.Count).End(xlUp).Row
Set v = Range(v(2), v(brow))

    For Each d In w
        d = d.Text
        If InStr(1, d, "mini") Then
                For Each c In v
                bbv1 = " QR "
                bbv2 = " HCPI "
                c = Mid(c, 1, 5) & " <INDEX>" & bbv2 '& c.Offset(0, 3)
                Debug.Print (c)
            Next c
        End If
Next d
End Sub

我从这半代码中得出的结论如下:

Edz5  <INDEX> HCPI 
Hcn5  <INDEX> HCPI 
Mesu5 <INDEX> HCPI 
Ptu5  <INDEX> HCPI 
Rtau5 <INDEX> HCPI 
Smu5  <INDEX> HCPI 
Tyu5  <INDEX> HCPI 
Ubu5  <INDEX> HCPI 
Vgu5  <INDEX> HCPI 
Wnu5  <INDEX> HCPI 
Xbu5  <INDEX> HCPI 
Xmu5  <INDEX> HCPI 
Z u5  <INDEX> HCPI 
Edz5  <INDEX> HCPI 
Hcn5  <INDEX> HCPI 
Mesu5 <INDEX> HCPI 
Ptu5  <INDEX> HCPI 
Rtau5 <INDEX> HCPI 
Smu5  <INDEX> HCPI 
Tyu5  <INDEX> HCPI 
Ubu5  <INDEX> HCPI 
Vgu5  <INDEX> HCPI 
Wnu5  <INDEX> HCPI 
Xbu5  <INDEX> HCPI 
Xmu5  <INDEX> HCPI 
Z u5  <INDEX> HCPI 

该过程循环显示每个问题名称,其中两个符合mini条件,因此以所需格式打印到即时控制台。现在我想执行另一个与上面相同的for循环,除了处理不同的标准:ix而不是mini,如果任何问题名称都不符合这些条件我想要{{1} }语句来处理剩余的问题名称。

Elseif

任何不代表和索引的商品未来应该打印为If InStr(1, d, "ix") Then For Each c In v bbv1 = " QR " bbv2 = " HCPI " c = Mid(c, 1, 4) & " <INDEX>" & bbv2 & c.Offset(0, 3) Debug.Print (c) Next c End If Elseif For Each c In v 'ch = DDEInitiate("winblp", "bbk") bbv1 = " QR " bbv2 = " HCPI " c = Mid(c, 1, 5) & " <INDEX>" & bbv2 '& c.Offset(0, 3) Debug.Print (c) Next c End If `The syntax may be wrong on the Elseif 我怎么还能弄清楚如何在这些条件下切换循环。如何在If Xbu5 <CMDTY> HCPI方法中包含OR条件并消除前两个for循环中的一个?

最终预期结果应为:(请注意InStr()指数的mini条件

c = Mid(c, 1, 5)

1 个答案:

答案 0 :(得分:0)

我不确定我是否完全遵循,但我认为您可以通过将Instr测试置于循环中并对c进行条件分配来解决此问题,而不是尝试“切换”循环或以其他方式构建三个不同的循环。

For Each d In w
    d = d.Text

    For Each c In v
        bbv1 = " QR "
        bbv2 = " HCPI "
        If InStr(1, d, "mini") Then
            c = Mid(c, 1, 5) & " <INDEX>" & bbv2 '& c.Offset(0, 3)
        ElseIf Instr(1, d, "ix") Then
            c = Mid(c, 1, 4) & " <INDEX>" & bbv2 & c.Offset(0, 3)
        Else
            c = Mid(c, 1, 5) & " <INDEX>" & bbv2
        End If
        Debug.Print (c)
    Next c

Next d