2017-09-08 6 views
2

セルを単語または一連の単語でチェックしようとしています。私が探しているバージョンは約20種類あり、そのうちの1つであれば何もしたくありません。もしそれらの1つでないなら、私はそれを空白にしたい。 1つの特定の項目について正しく機能するようになったのですが、20のIF文を使わずに20種類の項目を検索するにはどうしたらいいですか?私はIF文のために配列や何かを作ることができますか?私はそれをどうやって行うのか本当に分からないが、私はそれを見ることができた。IF文を使用して20個の異なる変数のセルをチェックしようとしています

ActiveSheet.AutoFilterMode = False 
lngRows = Range("A" & Rows.Count).End(xlUp).Row 


For lngRow = lngRows To 2 Step -1 
    If (LCase(ActiveWorkbook.Worksheets("Sheet1").Cells(lngRow, "A").Value) = "transfer" And _ 
     Not InStr(1, LCase(Range("B" & lngRow)), LCase("err")) <> 0) Then 
     ActiveWorkbook.Worksheets("Sheet1").Cells(lngRow, "B").Value = "" 

    End If 

は、私はそれを行う必要があるが、20の他の言葉に:ここで

は、私は私の一つの特定の文の持っているものです。これは、単語「エラー」のセルにエラーがあるかどうかを調べています。

+0

はい、(おそらくワークシート内の列からの)配列にアイテムをロードし、アレイ内の各セルの値を検索することができました。チップピアソンには、配列を扱うための多くの優れた情報とサンプルコードがあります。http://www.cpearson.com/Excel/ArrayFormulas.aspx – DataWriter

答えて

1

検索用語の配列を作成し、その配列をループします。私は容易にするためにバリアント配列を使用しました:

Sub Test() 
    Dim arr As Variant, v As Variant 

    arr = Array("err", "err2", "err3") 'all 20 in here or get from worksheet as per below 
    'arr = Application.Transpose(ThisWorkbook.Worksheets("Sheet1").Range("A1:A20")) 

    For Each v In arr 
     'IF statement in this loop, using the variable v rather than the string "err" 
     'MsgBox v 
    Next v 
End Sub 
+1

ありがとう。私は配列のようなものを使っても動作するかもしれないと考えましたが、私はあまり使い慣れておらず、使い方もあまりよくありません。しかし、私はこれを働かせるようにしようと思うので、もっと慣れ親しむことができます。再度、感謝します!これがうまくいくなら私は完全な印を付けます! – Robillard

+0

@Robillard、問題ありません - 喜んで助けてください:) – CallumDA

1

elseifあなたは1つのifステートメントに追加条件を追加することができます。配列をループするのはよりクリーンですが、これはあなたの情報のためにelseifで行う方法です。

ここにいくつかの一般的なコードがあります。最後にelseが含まれていない場合は、条件が満たされていない場合は何も実行されません。

Sub test_elseif() 

If x = 1 Then 
    y = 1 
ElseIf x = 2 Then 
    y = 2 
ElseIf x = 3 Then 
    y = 3 
End If 



End Sub 
+0

恐ろしいええ、私はそれが動作すると信じています。しかし、私は配列を使って他の答えを得ようとするかもしれないと思う。私は配列に慣れていないので、おそらくそれらを学ぶべきです。 – Robillard

+0

@Robillard私は100%同意します!私はあなたにこの基本的なやり方を伝えたいと思っています。 5つ以下の条件がある場合、これはおそらくより良い方法でしょう。 – Jarom

+0

ええ、私は実際には(AとC)または(BとC)かどうかをチェックしなければならなかったので、実際に配列を使用して終了し、IF、ElseIfステートメントも使用しました。 Cが15の異なる言葉だったとき。だから私はそれがおそらく最も簡単な方法だと思う。だから、A、B、D、E、Fなどのように20回好きにチェックしなければならなかったら、それが1つであるかどうかをチェックし、20種類のCオプションのうちの1つをチェックすれば、配列は正しい?私がそこで何を意味しているかを理解できれば、将来の使用に不思議に思っています。) – Robillard

1

「myWords」という名前の範囲をテスト単語とともにシートに作成します。 次にVBAコードに別のループでそれを指す:

ActiveSheet.AutoFilterMode = False 
lngRows = Range("A" & Rows.Count).End(xlUp).Row 
Dim rng As Range, cell As Range 
Set rng = Range("myWords") 

For lngRow = lngRows To 2 Step -1 
    For Each cell In rng 

    If (LCase(ActiveWorkbook.Worksheets("Sheet1").Cells(lngRow, "A").Value) _ 
     = cell And _ 
     Not InStr(1, LCase(Range("B" & lngRow)), LCase("err")) <> 0) Then 
     ActiveWorkbook.Worksheets("Sheet1").Cells(lngRow, "B").Value = "" 
    End If 
    Next cell 
+0

2つの異なる列をチェックしなければならなかったので、配列とIF、ELSEIFステートメントを使って作業しましたが、シートにmyWordsという名前の範囲を作成することによって何を意味するのか疑問に思っていませんでしたか?それはどういう意味ですか? – Robillard

+0

名前は、セル参照の目的(テストに使用しているデータの範囲)を理解しやすくする意味のある簡略表記です。[https://support.office.com/en-us/article/Define-and-use-names](https://support.office.com/en-us/article/Define-and-use-names- in-formula-4d0f13ac-53b7-422e-afd2-abd7ff379c64) – adarti

関連する問題