2016-04-19 13 views
2

私はこれ以上新しいものであり、次のループで並べ替えるのに問題があります。2つの範囲でVBAを検索

2つのテキスト変数を2つの列にトラッキングすると、両方の変数が1つの行に見つかったときにテキストが別の列のその行に追加されます。

これは私がこれまで持っているものです。

Sub AB() 
Dim Rng1 As Range 
Dim Rng2 As Range 
Set Rng1 = Range("B1:B100") 
Set Rng2 = Range("A1:A100") 
For Each cel In Rng1 
    If InStr(1, cel.Value, "A") > 0 Then 
    For Each cel In Rng2 
     If InStr(1, cel.Value, "B") > 0 Then 
      cel.Offset(0, 5).Value = "AB" 
     End If 
    Next 
    End If 
Next cel 

End Sub 
+0

ようなステートメント' InStr関数IF(1、cel.Value、 "A")> 0とInStr関数(1、cel.Value、「B場合")> 0 then' Edit:' cel2'を宣言する必要があります。 – findwindow

答えて

2

あなたも、ちょうどこの操作を行うことができるかもしれませんか?

Sub AB() 

With ActiveSheet 

For I = 1 To 100 

    If InStr(1, .Cells(I, 2), "A") > 0 And InStr(1, .Cells(I, 1), "B") > 0 Then 
     .Cells(I, 6).Value = "AB" 'i think offset 5 is column F? 
    End If 

Next 

End With 

End Sub 
+0

ありがとう!それはうまくいった。 – pvxl1989

+0

ようこそ。 – findwindow

0

`cel 'を使用して各ループをステップ実行しています。内側のループは混乱します。

@findwindowの回答に(私がこれを入力していたように)現れました。ループが1回だけ実行され、一致が見つかった場合は、その隣のセルをチェックします。

Sub AB() 

    Dim Rng1 As Range 
    Dim Rng2 As Range 
    Dim cel1 As Range 

    'Be specific about which sheet your ranges are on. 
    With ThisWorkbook.Worksheets("Sheet1") 
     Set Rng1 = .Range("B1:B100") 
     Set Rng2 = .Range("A1:A100") 
    End With 

    For Each cel1 In Rng1 
     'Check each value in column B. 
     If InStr(1, cel1.Value, "A") > 0 Then 
      'If a match is found, check the value next to it. 
      If InStr(1, cel1.Offset(, -1), "B") > 0 Then 
       cel1.Offset(, 4).Value = "AB" 
      End If 
     End If 
    Next cel1 

End Sub 
+0

ありがとうございます。どちらも実際に働いた。 – pvxl1989

1

あなたには今すぐ回答がありますが、ここではFindを使用して別の方法があります。何かをするためのいくつかの方法を知ることは、常に良いことです。

Sub AB() 

Dim rng As Range 
Dim itemaddress As String 

With Columns(1) 

Set rng = .Find("A", searchorder:=xlByRows, lookat:=xlWhole) 

    If Not rng Is Nothing Then 

     itemaddress = rng.Address 

     Do 
      If rng.Offset(0, 1) = "B" Then 
       rng.Offset(0, 2).Value = "AB" 
      End If 

     Set rng = .FindNext(rng) 
     Loop While Not rng Is Nothing And itemaddress <> rng.Address 

    End If 

End With 

End Sub 
は最初 `if`外側内側ループを移動した場合組み合わせる
関連する問題