- ベストアンサー
エクセル関数/少し不定形な文章中のコード検索?
エクセルの関数について質問です。 セル内に、例えば 【1月9日(水) 15:30~16:30 3363 東京エンジン科学(株) A 社長 参加 しない する】 という情報があったとします。 この中で、この会社のコード番号である数字4桁(3363)を見つけ出すには、どのような関数を使えばよいでしょうか。 なお、日付や時間などに注意書きが入ることもあり、コードの位置は一定しません。 この検索を1度きりではなく、複数のセルに付いて実行したいのです。 良いアドバイスをお願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
はっきりした条件が出せない時は 思いつく限りの例を挙げて欲しいもの です。 =-LOOKUP(1,-MID(SUBSTITUTE(SUBSTITUTE(REPLACE(A1,1,6,""), " ","!")," ","!"),COLUMN(1:1),4))
その他の回答 (2)
【1月9日(水) 15:30~16:30 3363 東京エンジン科学(株) A 社長 参加 しない する】 この文章から 会社コード番号(3363)を見つけ出す手順 1、文章を小さな部品に分解する。 2、部品総数を知る。 3、抽出する特定の部品と他の部品とを区別する条件を知る。 4、全ての部品を条件に合致しているか否かをテストする。 この原則的な手順を採用しないとすれば・・・。 =MID(A1, SEARCH(" ", A1, SEARCH("~", A1))+1, 4) =TRIM(MID(A1, SEARCH(" ", A1, SEARCH("~", A1)), 6)) (1) 先ず、"~" の位置を見つける。 (2) 次に、" " の位置を見つける。 (3) そして、その次にあるであろう会社コード番号を取り出す。 しかし、この手ですと、さらにMid関数が切り取る長さをSerch関数を駆使して求めないといけないかもです。 そこで、多少なりとも、汎用性を確保するのであれば以下のようなVBAを書く必要があるかも知れません。 =GetSuji(A1 & "") Public Function GetSuji(ByVal Moji As String) As String Dim I As Integer Dim N As Integer Dim Mojis() As String Moji = Replace(Moji, " ", " ", , , vbTextCompare) Mojis() = Split(Moji, " ") N = UBound(Mojis()) For I = 0 To N If IsSuji(Mojis(I)) Then GetSuji = Mojis(I) Exit For End If Next I End Function Public Function IsSuji(ByVal Moji As String) As Boolean Dim I As Integer Dim L As Integer L = Len(Moji) For I = 1 To L If InStr(1, "0123456789", Mid(Moji, I, 1), vbTextCompare) = 0 Then L = -1 Exit For End If Next I IsSuji = IIf(L < 0, False, True) End Function
補足
時間とコードの間に注記情報が入る事があるので、ちょっと無理かもしれませんね。 【区切り位置】を実施後に手作業で再処理しているのですが、一括処理できないかなと思って相談いたしました。 数字だけを対象とするワイルドカードがあれば、4桁のコードを見つけることが出来そうな気がするのですが。。。 VBAは。。。今度勉強します。。。すみません。
- pbforce
- ベストアンサー率22% (379/1719)
この情報はひとつのセルにありますか?大体スパースごとにセルに入っていますか? ひとつのセルにあるならば、Find関数かSearch関数で何とかなりそうですが・・・
補足
この情報は、1つのセルに入っています。 同様な情報(必要とするコード情報はそれぞれ違います)がいくつもあり、それらが各々1つのセルに入っています。 【区切り位置】で一括して分けようとしても、スペースがセル毎に違ったりするので、綺麗に揃えられません。 よろしくおねがいします。 申し遅れましたが、当方は素人と考えていただいて結構です。
お礼
標記数式を用いた所、過去のデータは全て処理できているようです。 どうもありがとうございました。 どうしてそうなるのかは、ゆっくり考えて見ます。 お世話になりました。