- ベストアンサー
文字列から必要な文字列を抽出する方法
- アメリカの税理士事務所でアルバイトをしている人が、PDFのクレジット明細をエクセルに整理する作業に時間がかかっている。会社名を抽出する手作業が必要で、スペースの数や会社名の特定が難しい。効率的なやり方やアイディアを求めている。
- クレジット明細の項目に含まれる会社名を抽出する作業が手作業であり、スペースの数や会社名の特定が難しい。作業の工数を減らすためにクレジット明細の行を語順に並び替え、会社名一覧を作成している。
- アメリカの税理士事務所でアルバイトをしている人が、PDFのクレジット明細をエクセルに整理する作業に時間がかかっている。会社名を抽出する手作業が必要で、効率的なやり方やアイディアを求めている。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
おそらく効率化自体は可能です。関数よりVBA向きの案件だと思います。 一番遠回りですが確実な手段は、貴方自身がVBAのスキルを身に着ける事ですね。 こうしたデータ選別の場合に重要なのは、どんな条件で会社名とそれ以外とを分けるか、という部分です。 ご提示の「英語の大文字箇所が1つの利用会社名を表し」というだけなら簡単です。 https://vbabeginner.net/vbaで文字列から英字のみを抽出する/ のような形で、英字のみや大文字のみ、小文字のみを抜き出すのは容易なので。 また「会社名一覧は一部ですがデータとしてあります。」という事なので、それと一致するかを条件付けとする事も出来ます。 ただ書かれている内容からすると、実務的には大文字を抜き出すのではダメで、一覧表とのマッチングでも十分ではないようです。 この判定条件の設定が一番のキモです。この部分が明確になっていれば、確実に対応可能です。 そしてこの部分を考えられるのは、実データを知っている貴方だけです。なので「一番遠回りですが確実な手段は、貴方自身がVBAのスキルを身に着ける事です」となるわけです。 で、そこで終わるのは何なので、一応軽い作業補助のマクロを組んでみました。 Sub tes() Dim i As Long Dim α1, α2 α1 = InputBox("指定数を入力してください") For i = 0 To CLng(α1) α2 = α2 & ActiveCell.Offset(0, i) Next ActiveCell = α2 End Sub マクロを起動すると数字を入力するウインドウが起動します。 アクティブなセルを起点として、ウインドウに入れた数字の分だけ、横のセルの語句を合成してアクティブセルを上書きします。 「B」の形の表であれば、これで楽になるような? 10分程度で組んだものなので色々雑なのはお許しを。 またエクセルのマクロはショートカット登録できますので、それを活用するとさらに楽になります。 https://www.moug.net/tech/exvba/0150112.html 個人的にはこうしたある程度の汎用性のある作業補助マクロを自分で組んで使い分けると、貴方が今従事しているような単純事務作業は劇的に楽になります。 興味があればお試しを。
その他の回答 (3)
- masnoske
- ベストアンサー率35% (67/190)
The City of SSF の場合、取り出したいのは SSF(全て大文字)ということですか? それとも、The, City, SSF というように大文字で始まる単語でしょうか? とりあえず、複数のスペースは TRIM関数で1つのスペースに置き換えることができますので、1. は少し楽になりませんか。
- SI299792
- ベストアンサー率47% (774/1618)
左、右の両パターンあり、アルファベット大文字を取り出す、 1列目なら「AAA BBB CCC」 ということでしょうか。 グーグルスプレッドシートなら、 左なら =RegexExtract(A1,"[A-Z ]*") 右なら =RegexExtract(TextJoin(" ",TRUE,A1:F1),"[A-Z ]*") Excel にはこれらの関数は無いので、ユーザー定義関数で作ります。標準モジュールに入れて下さい。但し、Excel2019 など、最新のExcel にはTextJoinがあるので、上だけ入れて下さい。RegexExtractは最新Excel にもないみたいです。 ' Option Explicit ' Function RegexExtract(Expression As String, Pattern As String) As String ' Dim RegExp As Object ' Set RegExp = CreateObject("VBScript.RegExp") RegExp.Pattern = Pattern RegexExtract = RegExp.Execute(Expression)(0) End Function ' Function TextJoin _ (Delimiter As String, Ignore As Boolean, TextArea As Range) As String ' Dim Cell As Range ' For Each Cell In TextArea ' If Not Ignore Or Cell > "" Then TextJoin = TextJoin & Delimiter End If TextJoin = TextJoin & Cell Next Cell TextJoin = Mid(TextJoin, 2) End Function
お礼
お礼が遅くなり申し訳ございません、回答いただきありがとうございました!参考にさせて頂きました。
- SI299792
- ベストアンサー率47% (774/1618)
文章は長くてて読んでいないのですが、図の様にしたいのであれば、 A列を洗濯し、 データタブ、区切り位置 カンマやタブなどの区切り文字によってフィールドごとに区切られたデータ、を選択。 次へ 区切り文字、スペースを選択。 次へ OK でできます。
お礼
回答ありがとうございます。 説明が長ったらしくて反省していたところです。 左の表を右の表にしたいのではなく 両方の表のケースで 英語の大文字箇所が1つの会社名だとした場合の 会社名のみの効率的な抽出の仕方が知りたいのです。 もしご存知でしたら、教えて頂けると幸いです。
お礼
お礼が遅くなり申し訳ございません、回答いただきありがとうございました!参考にさせて頂きました。