- ベストアンサー
VBAにて検索して検索結果を表記
はじめまして。 VBAにてファイルAとBがあり、ファイルAにファイルBのデータがあるかを検索して、 ある場合はファイルAの検索した値が入力されているセルの二つ隣のセルに 「あり」、ない場合は「なし」と表記したいのですが、どうしたら可能でしょうか。 FINDで検索して、IF関数NOTHINGとElseで場合分けまでできましたが、 表記できませんでした。 また、VLOOKUPで検索した場合は、IF関数の場合分けもできませんでした。 ご教授願います。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
VBAの質問でしたら、必ず、コードは書いてください。そうしないと、本当にVBAを書いているか分かりません。一応、何個あるのか数えていますが、ある・なしの表示の時に上書きしています。 Sub TestFind() Dim Bk1 As Workbook Dim Bk2 As Workbook Dim c As Variant, r As Range Dim rng1 As Range, rng2 As Range Dim FirstAdd Set Bk1 = ThisWorkbook Set Bk2 = Workbooks("Book1") With Bk1.ActiveSheet Set rng1 = .Range("A1", .Cells(Rows.Count, 1).End(xlUp)) 'A列 End With Set rng2 = Bk2.ActiveSheet.Cells '検索される側の場所 Application.ScreenUpdating = False For Each r In rng1 Set c = rng2.Cells.Find( _ What:=r.Value, _ LookIn:=xlValues, _ LookAt:=xlWhole, _ MatchCase:=True) If Not c Is Nothing Then r.Offset(, 2).Value = 1 FirstAdd = c.Address Do Until c Is Nothing Set c = rng2.FindNext(c) r.Offset(, 2).Value = r.Offset(, 2).Value + 1 If c.Address = FirstAdd Then Exit Do Loop FirstAdd = "" End If If r.Offset(, 2).Value = "" Then r.Offset(, 2).Value = "なし" Else r.Offset(, 2).Value = "あり" End If Next Application.ScreenUpdating = True Set rng1 = Nothing: Set rng2 = Nothing Set Bk1 = Nothing: Set Bk2 = Nothing End Sub
その他の回答 (2)
- soixante
- ベストアンサー率32% (401/1245)
#1の者です。 ずいぶん時間が経ってしまいましたが、もう解決してますかね? " の入っている文字列ということですが、 たとえば、 "a" と記載されているセルを判定するなら、クオーテーションを二重にしてやればよいです。 =COUNTIF(範囲,"""a""") でカウントできますよ。 "a" を 前後2箇所の "" で挟んでますから、a の前には、" が3つ、a の後ろにも " が3つです。
- soixante
- ベストアンサー率32% (401/1245)
VBAじゃなくてはだめですか? 普通にシンプルに関数では? ファイルA Book1 ファイルB Book2 それぞれのSheet1 のA列にデータが入っているとして、 ファイルAの C2セルに、 =IF(COUNTIF([Book2]Sheet1!$A:$A,A2)>0,"あり","なし") で下に引っ張って見るとか。 どうしてもVBAにしたいなら上記のことをコードにしてみたらよいのでは? 難しくしないでいいと思いますよ。
お礼
ご教授、ありがとうございます。 こちらの説明不足がありました。 「"」が入っている文字列を入力できる方法があればご教授願います。 Excel2003にて「""」の間に「"」があるとエラーとなってしまいました。 ご指南いただいたコードの入力方法をお教え願えないでしょうか。 よろしくお願いします。