Excel-VBA-这对于使用IF / IfElse条件的循环LOOPS太多次

时间:2015-08-10 17:31:48

标签: excel vba excel-vba

这是我现在的代码:

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 c In v

             For Each d In w
                                d = d.Text
                                bbv1 = " QR "
                                bbv2 = " HCPI "
                If InStr(1, d, "mini") Then

                    c = Mid(c, 1, 5) & " <INDEX>" & bbv2 '& c.Offset(0, 3)
                        'Debug.Print (c)
                ElseIf InStr(1, d, "ix") Then
                        'Debug.Print (c)
                    c = Mid(c, 1, 4) & " <INDEX>" & bbv2
                        'Debug.Print (c)
                Else
                    c = Mid(c, 1, 4) & " <CMDTY>" & bbv2
                        'Debug.Print (c)
                End If
                Debug.Print (c)

                Next d
            Next c

End Sub

产生此输出:

Edz5 <CMDTY> HCPI 
Edz5 <CMDTY> HCPI 
Edz5  <INDEX> HCPI 
Edz5 <INDEX> HCPI 
Edz5  <INDEX> HCPI 
Edz5 <INDEX> HCPI 
Edz5 <CMDTY> HCPI 
Edz5 <CMDTY> HCPI 
Edz5 <CMDTY> HCPI 
Edz5 <CMDTY> HCPI 
Edz5 <CMDTY> HCPI 
Edz5 <CMDTY> HCPI 
Edz5 <CMDTY> HCPI 
Hcn5 <CMDTY> HCPI 
Hcn5 <CMDTY> HCPI 
Hcn5  <INDEX> HCPI 
Hcn5 <INDEX> HCPI 
Hcn5  <INDEX> HCPI 
Hcn5 <INDEX> HCPI 
Hcn5 <CMDTY> HCPI 
Hcn5 <CMDTY> HCPI 
Hcn5 <CMDTY> HCPI 
Hcn5 <CMDTY> HCPI 
Hcn5 <CMDTY> HCPI 
Hcn5 <CMDTY> HCPI 
Hcn5 <CMDTY> HCPI 
Mesu <CMDTY> HCPI 
Mesu <CMDTY> HCPI 
Mesu  <INDEX> HCPI 
Mesu <INDEX> HCPI 
Mesu  <INDEX> HCPI 
Mesu <INDEX> HCPI 
Mesu <CMDTY> HCPI 
Mesu <CMDTY> HCPI 
Mesu <CMDTY> HCPI 
Mesu <CMDTY> HCPI 
Mesu <CMDTY> HCPI 
Mesu <CMDTY> HCPI 
Mesu <CMDTY> HCPI 
Ptu5 <CMDTY> HCPI 
Ptu5 <CMDTY> HCPI 
Ptu5  <INDEX> HCPI 
Ptu5 <INDEX> HCPI 
Ptu5  <INDEX> HCPI 
Ptu5 <INDEX> HCPI 
Ptu5 <CMDTY> HCPI 
Ptu5 <CMDTY> HCPI 
Ptu5 <CMDTY> HCPI 
Ptu5 <CMDTY> HCPI 
Ptu5 <CMDTY> HCPI 
Ptu5 <CMDTY> HCPI 
Ptu5 <CMDTY> HCPI 
Rtau <CMDTY> HCPI 
Rtau <CMDTY> HCPI 
Rtau  <INDEX> HCPI 
Rtau <INDEX> HCPI 
Rtau  <INDEX> HCPI 
Rtau <INDEX> HCPI 
Rtau <CMDTY> HCPI 
Rtau <CMDTY> HCPI 
Rtau <CMDTY> HCPI 
Rtau <CMDTY> HCPI 
Rtau <CMDTY> HCPI 
Rtau <CMDTY> HCPI 
Rtau <CMDTY> HCPI 
Smu5 <CMDTY> HCPI 
Smu5 <CMDTY> HCPI 
Smu5  <INDEX> HCPI 
Smu5 <INDEX> HCPI 
Smu5  <INDEX> HCPI 
Smu5 <INDEX> HCPI 
Smu5 <CMDTY> HCPI 
Smu5 <CMDTY> HCPI 
Smu5 <CMDTY> HCPI 
Smu5 <CMDTY> HCPI 
Smu5 <CMDTY> HCPI 
Smu5 <CMDTY> HCPI 
Smu5 <CMDTY> HCPI 
Tyu5 <CMDTY> HCPI 
Tyu5 <CMDTY> HCPI 
Tyu5  <INDEX> HCPI 
Tyu5 <INDEX> HCPI 
Tyu5  <INDEX> HCPI 
Tyu5 <INDEX> HCPI 
Tyu5 <CMDTY> HCPI 
Tyu5 <CMDTY> HCPI 
Tyu5 <CMDTY> HCPI 
Tyu5 <CMDTY> HCPI 
Tyu5 <CMDTY> HCPI 
Tyu5 <CMDTY> HCPI 
Tyu5 <CMDTY> HCPI 
Ubu5 <CMDTY> HCPI 
Ubu5 <CMDTY> HCPI 
Ubu5  <INDEX> HCPI 
Ubu5 <INDEX> HCPI 
Ubu5  <INDEX> HCPI 
Ubu5 <INDEX> HCPI 
Ubu5 <CMDTY> HCPI 
Ubu5 <CMDTY> HCPI 
Ubu5 <CMDTY> HCPI 
Ubu5 <CMDTY> HCPI 
Ubu5 <CMDTY> HCPI 
Ubu5 <CMDTY> HCPI 
Ubu5 <CMDTY> HCPI 
Vgu5 <CMDTY> HCPI 
Vgu5 <CMDTY> HCPI 
Vgu5  <INDEX> HCPI 
Vgu5 <INDEX> HCPI 
Vgu5  <INDEX> HCPI 
Vgu5 <INDEX> HCPI 
Vgu5 <CMDTY> HCPI 
Vgu5 <CMDTY> HCPI 
Vgu5 <CMDTY> HCPI 
Vgu5 <CMDTY> HCPI 
Vgu5 <CMDTY> HCPI 
Vgu5 <CMDTY> HCPI 
Vgu5 <CMDTY> HCPI 
Wnu5 <CMDTY> HCPI 
Wnu5 <CMDTY> HCPI 
Wnu5  <INDEX> HCPI 
Wnu5 <INDEX> HCPI 
Wnu5  <INDEX> HCPI 
Wnu5 <INDEX> HCPI 
Wnu5 <CMDTY> HCPI 
Wnu5 <CMDTY> HCPI 
Wnu5 <CMDTY> HCPI 
Wnu5 <CMDTY> HCPI 
Wnu5 <CMDTY> HCPI 
Wnu5 <CMDTY> HCPI 
Wnu5 <CMDTY> HCPI 
Xbu5 <CMDTY> HCPI 
Xbu5 <CMDTY> HCPI 
Xbu5  <INDEX> HCPI 
Xbu5 <INDEX> HCPI 
Xbu5  <INDEX> HCPI 
Xbu5 <INDEX> HCPI 
Xbu5 <CMDTY> HCPI 
Xbu5 <CMDTY> HCPI 
Xbu5 <CMDTY> HCPI 
Xbu5 <CMDTY> HCPI 
Xbu5 <CMDTY> HCPI 
Xbu5 <CMDTY> HCPI 
Xbu5 <CMDTY> HCPI 
Xmu5 <CMDTY> HCPI 
Xmu5 <CMDTY> HCPI 
Xmu5  <INDEX> HCPI 
Xmu5 <INDEX> HCPI 
Xmu5  <INDEX> HCPI 
Xmu5 <INDEX> HCPI 
Xmu5 <CMDTY> HCPI 
Xmu5 <CMDTY> HCPI 
Xmu5 <CMDTY> HCPI 
Xmu5 <CMDTY> HCPI 
Xmu5 <CMDTY> HCPI 
Xmu5 <CMDTY> HCPI 
Xmu5 <CMDTY> HCPI 
Z u5 <CMDTY> HCPI 
Z u5 <CMDTY> HCPI 
Z u5  <INDEX> HCPI 
Z u5 <INDEX> HCPI 
Z u5  <INDEX> HCPI 
Z u5 <INDEX> HCPI 
Z u5 <CMDTY> HCPI 
Z u5 <CMDTY> HCPI 
Z u5 <CMDTY> HCPI 
Z u5 <CMDTY> HCPI 
Z u5 <CMDTY> HCPI 
Z u5 <CMDTY> HCPI 
Z u5 <CMDTY> HCPI 

这是我在细胞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

但这就是我想要的输出:

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

我尝试在每个if语句之后添加Next c,但这不起作用。

1 个答案:

答案 0 :(得分:1)

我认为你需要做的就是在每个If语句中使用“exit For”,这样如果找到匹配或“true”,它将退出for而不再对比内部D循环。您可能还必须在下一个循环开始之前或之前将打印命令更改为此出口之前。

For Each c In v

         For Each d In w
                            d = d.Text
                            bbv1 = " QR "
                            bbv2 = " HCPI "
            If InStr(1, d, "mini") Then

                c = Mid(c, 1, 5) & " <INDEX>" & bbv2 '& c.Offset(0, 3)
                    Debug.Print (c)
                    Exit For
            ElseIf InStr(1, d, "ix") Then
                    'Debug.Print (c)
                c = Mid(c, 1, 4) & " <INDEX>" & bbv2
                    Debug.Print (c)
                    Exit For
            Else
                c = Mid(c, 1, 4) & " <CMDTY>" & bbv2  
                 Debug.Print (c)
                 Exit For
            End If
            'Debug.Print (c)

            Next d
        Next c