Excel-VBA-对于IF / IfElse条件,循环LOOPS的次数太多了

这是我现在的代码:

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 ,但这不起作用。

我认为你需要做的是解决这个问题,在每个If语句中都是一个“exit For”,所以如果它find一个匹配或者一个“真”,它将退出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