質問: 画像の様な2パターンの表で 英語の大文字箇所が1つの会社名だとした場合、 会社名のみの効率的な抽出の仕方が知りたいです。 会社名の一覧は別のエクセルシートであります。 もしご存知でしたら、教えて頂けると幸いです。
回答: まあVBAの方でやるのが適当だろう。 VBAは、直ぐマスターできるわけではないが、参考に挙げてみる。 また色々なやり方が考えられることなので、1方法に過ぎない。 質問表現内容やデータ例も、大雑把で納得はできないが、臭いだけ嗅いで、「(会社名)テーブル参照法による割り出し」ならどれぐらいのコード行数になるか感じてみて。 データ例も、実際データを秘密にしたいためだろうが、抽象化しすぎて、良く伝わらない。もう少し工夫して、現実データの臭いを残して質問すべきだろう。 なお、下記は会社名の判別に、語の先頭文字が大文字かどうかは、考えてない。 会社名のテーブルSheet2のA列にその語句があれば、会社名とした。 また早く出てきたもの勝ち。 なお下記では、Sheet1のP-X列に半角スペースで区切ったデータを列を分けて出している。Worksheets("Sheet1").Range("P" & i & ":X" & i) = a とりあえずコメント化(無効)にしたが。 単語数が多い場合は列の範囲を増やす必要がある。プログラムの修正が必要。 ーー これで実際の現場では、不都合があるかもしれない。 しかしそういう場合は、その点こそ、質問の問題点になることで、それを主たる 論点にして解決法を質問すべきなんだ。 語句の先頭1文字が大文字であれば、会社名だと断定できるというのは 小生の経験に反するので取り上げていない。 また今回が初出の会社の場合(Sheet2のA列にその会社名は出てこないが)の問題は、複雑になるので、あえて捨ててある。 ーー ・Sheet1のB列に文章(文字列という。やや長文でも可。)があるとする。 ・文章の単語(会社名を含む)の前後の区切りは半角のスペース(1文字以上)であるとする ・Sheet2のA列に(今までに判っている)会社名がある(入力されている)とする ーー テストデータ Sheet1のB列に2例=2行 がテストデータとする。 AAA BBB CCC 78204 dkfvhd AAA grektl 5930 rkdj SHeet2のA列に、会社名があるとする。A1:A5 会社名 dkfvhd rkdj krttj EEE ーー 標準モジュールに Sub test01() Dim a As Variant For i = 2 To 3 a = Split(Worksheets("Sheet1").Cells(i, "B"), " ") For j = 0 To UBound(a) b = StrConv(a(j), vbNarrow) 'MsgBox b Set s = Worksheets("Sheet2").Range("A2:A10").Find(b) '10は実際の行数で増やすこと If Not (s Is Nothing) Then Worksheets("Sheet1").Cells(i, "A") = b Exit For End If Next j 'Worksheets("Sheet1").Range("P" & i & ":X" & i) = a Next i End Sub と入れて実行。 結果 Sheet1のA列に会社名を決めて、出力した。 下記はSheet1のA,B列 dkfvhdAAA BBB CCC 78204 dkfvhd rkdjAAA grektl 5930 rkdj