Excel、リンク元に指定文字列の存在を調べたい
失礼いたします。
次のような関数式を用いて管理表を作りたいのです。
=IF(? ? ? ? ? ?,VLOOKUP(A3&B3,\○○○\△△△\[XXXXX]sheet1!$A$2:$G$20,4,false),"未入力")
( ※ 「○○○」の前は\ではなく\\が正しいかもしれませんが、その点は大目に見ていただきたいです)
長い関数式ですので、念のため解説をしておきます。
○ もし「? ? ? ? ? ?」だったら、「XXXXX」というエクセルブックの中の、「sheet1」というシートの中の、「A2~G20」の範囲の1列目(すなわち「A」の列)に、「A3&B3」と一致する文字列のセルから右に3列移動したセルを表示してください。
○ もし「? ? ? ? ? ?」でなかったら、「未入力」と表示してください。
ところがここで問題なのが、「XXXXX」というエクセルブックの中の、「sheet1」というシートの中の、「A2~G20」の範囲の1列目(すなわち「A」の列)に、「A3&B3」と一致する文字列のセルが存在しない場合があるのです。そこで、
○ もし「? ? ? ? ? ?」だったら、~~
○ もし「? ? ? ? ? ?」でなかったら、~~
の「? ? ? ? ? ?」には、「XXXXX」というエクセルブックの中の、「sheet1」というシートの中の「A」の列に、「A3&B3」と一致する文字列のセルが存在する、という関数を入れたいのです。そうすれば、
1.(1つ以上)存在する → TRUEを返す → VLOOKUP関数により表示される
2.存在しない → FALSEを返す → 「未入力」と表示される
というように管理できます。
ところが、私の現在の知識では、(1つ以上)存在すればTRUEを返す関数として、COUNTIF関数しか知らず、使いこなせません。
そこでCOUNTIF関数を使いました。次のような式です。
COUNTIF(\○○○\△△△\[XXXXX]sheet1!$A:$A,A3&"営業")>0
関数式のすべてを書けば、
=IFCOUNTIF(\○○○\△△△\[XXXXX]sheet1!$A:$A,A3&"営業")>0
,VLOOKUP(A3&B3,\○○○\△△△\[XXXXX]sheet1!$A$2:$G$20,4,false),"未入力")
( ※ VLOOKUP関数の中の「B3」には、「営業」と入力されることもあれば、ほかの文字列が入力されることもあります)
すると、
○ 通常 : 「#VALUE」が表示されてしまいます。
○ 「XXXXX」というエクセルブックを開く : 実際に入力されているもの、もしくは「未入力」が表示されます。
そして、「#VALUE」が表示される理由を追いかけますと、COUNTIF関数の中の「A3」の箇所だけに下線が引かれ、この「A3」のためにエラーになっているのだとエクセルは教えてくれます。
以上を踏まえ、質問させていただきます。
1. COUNTIF関数は、リンクが混在する関数には適さないのでしょうか。
2. COUNTIF関数以外に、「A」列に「A3&"営業"」と一致する文字列が存在するかどうかを検索する関数があるとすれば、何でしょうか。
3. 現在、しかたなく「=VLOOKUP(~~~~)」だけにしているのですが、「未入力」と表示させたいところに「#N/A」が表示されます。これをほかの方法で、「#N/A」でなく「未入力」と表示させる方法があるとすれば、何でしょうか。
長文失礼いたしました。
お礼
右に貼り付けたいセルを複数にするやり方は以下で解決しました。シンプルで完璧なマクロをありがとうございました。 Sub 試験() Dim Row1 As Integer Dim Coln1 As Integer Dim Row2 As Integer Dim Coln2 As Integer Set WS1 = Worksheets("Sheet1") Set WS2 = Worksheets("Sheet2") Coln1 = 1 Coln2 = 1 For Row1 = 1 To WS1.Cells(Rows.Count, 1).End(xlUp).Row For Row2 = 1 To WS2.Cells(Rows.Count, 1).End(xlUp).Row If WS2.Cells(Row2, 1) = WS1.Cells(Row1, 1) Then Do Coln1 = Coln1 + 1 Coln2 = Coln2 + 1 WS1.Cells(Row1, Coln1) = WS2.Cells(Row2, Coln2) Loop Until Coln1 = 4 Coln1 = 1 Coln2 = 1 End If Next Row2 Next Row1 End Sub
補足
どうもありがとうございます。やりたいことができました。もう一つお教えください。私の説明不足で、この場合は一致したセルの右隣の一つのセルしか代入できませんが、右隣から3つまでのセルなど、複数のセルを代入する場合はこのコードから、さらにどうしたらよいでしょうか。よろしくお願い申し上げます。