• ベストアンサー

文字列から複数の文字列を抽出する方法

imogasiの回答

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.5

まあ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列 dkfvhd AAA BBB CCC 78204 dkfvhd rkdj AAA grektl 5930 rkdj

ynkus
質問者

お礼

お礼が遅くなり申し訳ございません、アドバイス参考にさせて頂きました。ご丁寧に回答いただき本当にありがとうございました。

関連するQ&A

  • 文字列から必要な文字列を抽出する方法

    現在アメリカの税理士事務所でアルバイトをしているものです。 お客様からのクレジット明細全てがPDFのため それをエクセルにコピペし整理をした後に ソフトウェアへインポートする仕事を最近よくするのですが、 あまりに時間が掛かりすぎるため、 何か他に効率の良いやり方があるのではないかと模索の日々を過ごしております。 ただ自分の持っている知識や考えられる対策には限界があるため エクセルの知識が豊富な方 考え方が柔軟な方、同じような経験のある方から 「こんな風なやり方・手順をすると時間短縮できるんじゃない?」 といったアイディアの提案をして頂ければ、とても有り難いです。 クレジット明細内では 利用明細の項目に、利用会社名を含む長い文字列が記載されています。 インポートに必要な情報は利用会社名のみなので、 今は文字列の中から手作業で1つずつ会社名を抽出してる状態です。 会社名というのは、たまに確認される程度の あまり必要性が高い項目ではないのにも関わらず この作業にとても時間が掛かってしまってます。 利用明細の項目内容は、添付画像の様な感じで コピペをした時に、A行に全て貼り付けされる左の表のパターンと スペースごとに各行に振り分けられて貼り付けされる右の表のパターンがあります。 (なぜか条件付き貼り付けをしようにも選択ができない状態です) 英語の大文字箇所が1つの利用会社名を表し それ以外の文字列はその他の不必要な情報と考えてもらえると有り難いです。 私が手作業をする理由(抱える問題点)としましては、 1、文字列の分割をしても 英語のため会社名にスペースを含む場合が多く、 結局最終的に手作業で結合する羽目になる。 また1つの会社が含むスペース数もランダムで規則性がない。 2、とにかく文字列の分割を行い、先頭行のみを利用しようにも 会社名によってはThe City of SSFなど先頭の数行のみだと 何の会社を示しているのか特定できないことがあり また数行にすると余計な情報を含みすぎる場合がある。 この手作業の過程で 私が現在している微量な対策は クレジットの明細内容の行を語順に並び替え 同じく語順に並んでいる会社一覧のエクセルを作り その一覧をコピペすることによって、作業工数を減らしています。 (会社名一覧は一部ですがデータとしてあります。) ※なおセキュリティー管理が厳しくPDF以外のフォーマットのデータを手に入れるのが難しい状況です。 全てを解決することは難しいかもしれませんが どんなアドバイスでも構いません。 何か少しでも生産性を向上できればと考えています。 宜しくお願い致します!

  • 複数のシートに重複する文字列の抽出

    教えてgooの利用は初めてです。 どなたかお時間ある方、お知恵を貸していただけると幸いです。 Excel初心者です。 Sheet1(会合名) AAA会社 | 鈴木 一郎 | Sheet1 BBB会社 | 田中 ニ郎 | Sheet1 CCC会社 | 佐藤 三郎 | Sheet1 Sheet2 BBB会社 | 田中 ニ郎 | Sheet2 DDD会社 | 渡辺 四朗 | Sheet2 EEE会社 | 伊藤 五郎 | Sheet2 Sheet3 BBB会社 | 田中 ニ郎 | Sheet3 CCC会社 | 佐藤 三郎 | Sheet3 FFF会社 | 高橋 六郎 | Sheet3 上記のようにシート毎に数百件ずつ会社名・氏名・住所等が記載された複数のリストがあります これらの中から名前が重複してる人だけを抽出し Sheet4 田中 ニ郎 | Sheet1 田中 ニ郎 | Sheet2 田中 ニ郎 | Sheet3 佐藤 三郎 | Sheet1 佐藤 三郎 | Sheet3 このSheet4のように重複している名前とシート名が分かる形で抽出できないでしょうか? 具体的には各会合に参加している出席者で、出席頻度の高い人・出席した会合名を一覧で表示したいと考えています。

  • エクセル:文字列間の行を抽出

    エクセルファイルで1つのシートに複数の表がひたすら縦に並んでいます。それぞれの表が別々のシートに記載されるようにしたいと思っています。 どの表も基本的な書式は同じなので列数は同じなのですが、行数は表ごとに異なります。 また各表の右下(C列)にTotalという文字列が必ずあります。 文字列Totalがある行の直下の行から次のTotalのある行まで抽出して、シートを作成できれば良いのだと思うのですが、どうすれば可能になるのか分かりません。 どなたか教えていただけ無いでしょうか。

  • Excelでの文字列抽出

    Excelで文字列の抽出とそれを並べる方法を教えてください。 関数だけを用いて実現できるのか、マクロを使わなければできないのかも分かりません。 この関数をこの様に使えばよいというのを教えていただけると幸いです。 やりたいことは、下記条件で、シート2のB列にシート1のG列~P列までに登録されている担当者名に該当するB列の店名を4店まで抽出したいのです。 分かりづらくて申し訳ございませんが、よろしくお願い致します。 ------------------------ シートが2枚(シート1/シート2)あります。 シート1  B列は4行毎に結合されており、店名が登録されています。  G列~P列までは1行目は担当者名、2,3,4行目は補足情報が登録されています。  シート2  A列に担当者名が入っています。(4行毎に結合しています)  B列にA列の担当者名に該当する、シート1の店名を4店まで登録したい。

  • エクセル マクロ 文字列の検索と抽出

    エクセル2010を使っています。 画像の様に、【Sheet3】のA列~CQ列に 空白・エラー・数値・文字 の入った表があります。 そのL列には、画像の様な形で様々な地域の名前が入っています。 やりたいのは、L列に 検索対象文字が複数、例えば 福岡 か 大阪 が入っていたら、その表ごと抽出し、【Sheet1】の上から順に枠線ごと貼り付けて行きたいと思います。 この時、両方一致ではなく、検索対象の文字列が一つでも含まれていたら抜き出したいと思います。 その時に 【Sheet3】から抽出した部分は削除し、上に詰めて行きたいと思います。 ちなみに検索対象が、福岡・大阪・名古屋等、増える場合もありますので、増えたとき対応が出来る形が理想です。 ちなみにL列の文字と文字の間は ・ だったり / だったりします。 詳しい方、よろしくお願い致します。

  • エクセルファイルをHTML化した後の特定領域の文字列抽出

    エクセルファイルをHTML化した後の特定領域の文字列抽出 1.したい事  HTMLで作った表の中から特定の場所の文字列を抽出し,クリックでその画像が出てくるようにしたい.  OSはWinXP(pro)エクセルは2003です. 2.説明  4000程のjpeg画像ファイルがあるフォルダから,ネット上で配布されていましたエクセルマクロで  ファイル名を抽出しリストを作り,それをHTML化しました.エクセル上のB列に画像ファイル名が  抽出されているわけですが,当然のことながらHTML化した時点でセルの情報は失われています.  ファイル名は変えずに(拡張子はすべてjpg),HTML構文中でその文字列をクリックするとその画像  が出てくるようにしたいと考えています(ファイル名以外の列が出来ても構いません). 3.教えていただきたい事  1)HTMLの表の書式から特定の場所(エクセルでいうセルにあたる)の文字列を抽出できる方法が    あるかどうかご教示ください.  2)私が考えている方法以外にあるフォルダから千を上まわるファイル名を抽出,リスト化し    目的を達成出来る方法があるかどうかご教示ください.   

  • 同一フォーマットの複数のexcelファイルの何箇所かのセルを抽出して一覧表を作るには

    同一フォーマットの複数のexcelファイルの何箇所かのセルを抽出して一覧表を作る仕事をさせられています。 具体的には、一つのフォルダ(フルパスを仮に D:\shitumon とします)の中に "質問事項*.xls" ("*"の箇所は任意の文字列で、何文字あるかもまちまちです)が大量にあります。 この "質問事項*.xls" は同一フォーマットになっていて、シート名は QA となっております。 この "質問事項*.xls" の何箇所かのセルの内容を抽出して "一覧表.xls" というファイルにまとめる作業をさせられています。 "質問事項*.xls" と "一覧表.xls" の対応箇所なのですが、 (質問事項*.xls)   (一覧表.xls)    B5          A列    I3           B列    C8          D列    B10          E列    C34          F列    B36          G列    H34          H列 となっております。 ("質問事項*.xls" の何箇所かのセルは結合されているものがいくつかあります。) 現在、"一覧表.xls" には300行ぐらい入力済みで、 さらにその下の行から入力することになっているのですが、 例えば "一覧表(仮).xls" というフォルダにまとめて "質問事項*.xls" の該当箇所を抽出して、  "一覧表(仮).xls" の内容をコピーして "一覧表.xls" に貼り付けるという作業でも構いません。 プログラミングを全く知らないおじさんなので、 噛み砕いて教えてくださればありがたく思います。

  • エクセルで、指定した文字の左側にある文字列を抜き出しをしたい。

    エクセルで条件を指定した文字列の抜き出しをしたいです。 取引先一覧表があるのですが、その中の会社名が、 「○○株式会社 ▲営業部」というように登録しています。 それを、文字列の中に「株式会社」と入っている場合、 「株式会社」の左側にある文字列を抜き出したいのです。 エクセルでそのような処理はできますでしょうか。 *取引先一覧の中には「有限会社」や「株式会社」が右側についているものもありますが、それはそれぞれフィルタで抽出しながら処理をしようと考えています。

  • エクセル 重複文字列の色分け抽出

    エクセル2003において、1行内に重複した文字列に対して色を付ける。これは条件付書式で「数式で」COUNTIF関数選択範囲>1 書式「セルを赤パターンで塗りつぶす」 はできるのですが、その重複する文字列が直接入力のものではなく、別シートからのIF関数を利用しての抽出なのです。なのでセル自体には既に数式が入っている状態です。この状態で上記のことをすると、すべてのセルが赤く染まってしまうのですが、何とか回避できるでしょうか?抽出された「文字列」にではなく、既に入っている「数式」に反応しているようなのですが…。 具体的に言うと、各支店の出勤状況をまとめた出勤予定表がシートごと(sheet2~sheet15)にあります。その各シートから1日に出勤するスタッフ、2日に出勤するスタッフの名前が全スタッフ出勤状況表(sheet1)にピックアップされるように作られています。しかし、別店舗で同じ人間を出勤させている場合があり、そのスタッフを赤色に塗りたいのです。 ご教授宜しくお願いいたします。

  • エクセル 自動で抽出と集計

    現在エクセル2007です sheet1には a列に会社名b列に担当者名が入ってます sheet2に来社数を数えたいのです 沢山の会社名と同じ会社名でも個人名が違うのでオートフィルタなど設定では表を作成したり数を数えるのが出来ません 希望は自動でsheet2に会社名一覧が出来 (新しい会社名や担当者がsheet1に入力されたら新規で一覧に入る) 何処の会社の担当者さんが何回来たというのを抽出し合計回数を表示したいです 全く分かりません ネットで調べても複数条件で抽出しても自動転記や回数を数えるまで出ておらずお手上げです どなたか教えて下さい