2016-05-18 10 views
-1

Excelで条件付きループマクロを作成しようとしています。列Bには姓が含まれ、列Cには名が含まれ、列Dには姓と名が含まれます。私は検出するために、マクロを取得しようとしていたときに列D =列C + B列条件付きループのVBAコード

の場合D = C + B、Dの後、明確な内容

ので、単一の行に対して次の作品:

Sub ClearContentsD() 

If Range("D1").Value = Range("C1").Value + Space(1) + Range("B1") Then Range("D1").ClearContents 

End Sub 

それは追加スペース(1)なしでは動作しません、と私は全体のワークシートをループにそれを取得することはできません。

Sub ClearContentsLoop() 

Application.ScreenUpdating = False 

    Dim i As Long 
    For i = 1 To Rows.Count 

    Next i 

Do While Cells(i, 4).Value = Cells(i, 3).Value + Space(1) + Cells(i, 2).Value 
Cells(i, 4).ClearContents 

Loop 

Application.ScreenUpdating = True 

End Sub 

VBAは私のんが好きではありません。どんな助けでも大歓迎です。

CJ

+0

コードの使用例を教えてください。 – Histerical

+0

* VBAは私のDoを好きではありません*あなたが私たちに* VBA *が**好きではない**を具体的に教えない限り、問題の記述ではありません。 **具体的に何を意味するのですか? –

+0

また、 "John Smith"と "John" + "Smith"を同じにする場合は、セル値に "John"の後にスペースが含まれていない限り、スペースが必要です。 – Histerical

答えて

1

いくつかの問題:

  • あなたは&で文字列を連結しなければなりません。プラス(+)は追加用です。
  • あなたのForループは何もしていません。その本体は空です。
  • Do Whileループは最大で1回実行されます.iが増分されないためです。
  • 2つのループ(ForDo While)が必要な理由は、謎です。
  • シートには小数点のみを使用する行が多数あるため、すべてをループしないでください(For)。UsedRangeを使用してください。

可能な補正:

Sub ClearContentsLoop() 
    Dim i As Long 

    Application.ScreenUpdating = False 
    For i = 1 To ActiveSheet.UsedRange.Rows.Count 
     If Cells(i, 4).Value = Cells(i, 3).Value & " " & Cells(i, 2).Value Then 
      Cells(i, 4).ClearContents 
     End If 
    Next i 
    Application.ScreenUpdating = True 
End Sub 
+0

それは動作します、ありがとうございます。私は、成功しなかったIf/Then関数を最初に使ってみましたが、私の空のループと(+)関数ではうまくいきませんでした。 – user6353333

0

あなたは評価している値にスペースを無視する方法があります。 InStr関数機能を使用することにより

、あなたがして、別の内部に1つのテキスト文字列の存在をテストしていると、少なくとも1つの一致が見つかった場合:説明

Application.ScreenUpdating = False 

    Dim i As Long 
    For i = 1 To Rows.Count 
     If InStr(1, Cells(i, 4).Value, Cells(i, 2).Value, vbTextCompare) > 0 And InStr(1, Cells(i, 4).Value, Cells(i, 3).Value, vbTextCompare) > 0 Then Cells(i, 4).ClearContents 
    Next i 

Application.ScreenUpdating = True 

:これを試してみてください関数はゼロ以外の値(一致した位置)を返します。上記の例では、姓と名が同時に存在するかどうかをテストしています。両方が見つかった場合、コードはセルの内容をクリアします。

また、コメントセクションで指摘したように、ワークシートの長さに沿ったすべてのセルが指定されたとおりに評価および更新されるように、ループ内でこれを実行する必要があります。

元のデータのCOPYでこれをテストして、変更を元に戻したい場合に元の値を失わないようにしてください! ;)

関連する問題