2017-10-18 14 views
0

私はセルで動作する数式を持っていますが、本当に長い入れ子のifです。基本的に、複数の異なる値のセルをチェックしようとしています。(Excel VBAの公式​​)ネストされたIFハイライトされた赤

A2 =これは私の説明です。 B2には、A2の説明で複数の単語を検索する入れ子のifが含まれています。各if文を実行するときに、見つかった単語が表示されます。

この式を複数のセルに設定するには、VBAを使用する必要がありますが、なぜ式が間違っているのかわかりません。 (Excelは赤をハイライト表示します)これを書くには良い方法はありますか?

(私はライン上の場合は2つの入れ子をやって、そしてダウン次の行に分離するために、「& _」を使用してきた。)

Sub Search_For_Keywords() 
Do Until ActiveCell.Value = "" 

    Range(B2).Activate 
    With ActiveCell 
    .Formula = "=IF(ISNUMBER(SEARCH(""Keyword1 "",A2,1)),""1"",IF(ISNUMBER(SEARCH(""Keyword2 "",A2,1)),""2"", & _ 

...そこに48個のキーワードがあり、よりよいです...将来的に追加する必要が

IF(ISNUMBER(SEARCH(""Keyword_n"",A2,1)),""n"",""No Keywords Found"")))))))))))))))))))))))))))))))))))))))))))))))" 

    End With 
Loop 
End Sub 

UPDATE:

別の解決策(回避策?)

を使用しています
=IFERROR(INDEX(E2:E6,MATCH(D2:D6,A2:A6,0)),"Not Found") 

=INDEX (column to return a value from, MATCH (lookup value/column, column to lookup against, 0)) 

私はD2:D6にキーワードを、E2:E6にそれぞれのキーワードのエイリアスを、そしてA2:A6に実際の説明を入れてみました。

このコードはVBAに入れるのに十分短いので、この情報を含む列を持つ必要があります。

もう一度お手伝いをしてください。その他のVBA固有のソリューションについては、下記をご覧ください。

+0

これを(もっと少ないキーワードで)[mcve]にしてください。文の断片を与えるだけで、デバッグが難しくなります。 –

+0

改行で '_'の後に二重引用符を使用していますか? –

+0

私はそう思っています...上に何か他のものを投稿させてください、もしそれを微調整する方法が見つけられればもっと簡単かもしれません。 – mitchmitch24

答えて

2

あなたはVBAを使用する場合は、uはちょうど単語が

arr = Array("keyword1", "keyword2", "keyword3") 'List of keywords to look for 
For i = 0 To 2 
    Set c = Sheets(1).Range("a2").Find(arr(i), LookIn:=xlValues) 
    If Not c Is Nothing Then Sheets(1).Range("b2").Value = arr(i) 'Setting the value if the keyword is found 
Next i 

を見つけました。しかし、複数の単語が見つかった場合、それは(uは、コードを変更することができる最後のものだけを印刷しますしたいと仮定して、この単純なコードを使用することができますあなたがそれを必要とする場合)。

Sub Find_Keywords() 

Keywords = Array("Awesome", "hey", "world") 'List of keywords to look for 

Range("A2").Activate 

    Do Until ActiveCell = Range("a14") 

     For i = 0 To 2 
      Set C = ActiveCell.Find(Keywords(i), LookIn:=xlValues) 
      If Not C Is Nothing Then ActiveCell.Offset(0, 1).Value = Keywords(i) 'Setting the value if the keyword is found 
     Next i 

    ActiveCell.Offset(1, 0).Activate 

    Loop 

End Sub 
+0

こんにちはRaunakトーマス!これは実際には完璧な - 私の唯一の質問は、アクティブセルに設定されている検索範囲ですか?しかし、それは動作しませんでした(私は多くのセルをチェックする必要があり、私はActivecellとdoループを使用するつもりだったので質問します)。そのためのオフセット。) – mitchmitch24

+0

アクティブ、私はそれを試した。シート( "your_sheet_name")。範囲( "b2")にシート(1).range( "b2")を変更して試してください。 –

+0

Raunak Thomas、ありがとう!いくつかの調整をして、私はそれが私が望んでいた方法を正確に働かせました! :)(私の特定のソリューションコードであなたのコメントを更新しましたが、それが表示される前にピアレビューをしていなければなりません)。 – mitchmitch24

1
Function SearchMyKeywords(rng As Range) 
    Select Case rng 
     Case _1st_keyword 
      SearchMyKeywords = Whatever_You_Like 
     Case _2nd_keyword 
      SearchMyKeywords = Whatever_You_Like2 
     ... 
     Case Else ' For all the rest 
      SearchMyKeywords = Whatever_suitable_here 
    End Select 

機能

に建てられたように、あなたはあなたの関数を使用することができます。これはあなたがコードを実行する必要があります計算ではありませんので、もちろんそれぞれの時間は、セルの値は

固有のソリューションを変更します

+1

Hi TSion.DPこれを投稿していただきありがとうございます。私はSelect Caseでさらに読んで、あなたのコードで遊びます。私はそれも良い解決策を証明することができると思う!私はあなたの助けに感謝します :) – mitchmitch24

関連する問題