人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

EXCELの関数について質問です。
一つのセルから特定の文字列があったら抽出したい。
※環境は、EXCEL2010でございます。

詳細は、添付画像を参照願います。
2列目:抽出する前のデータ、3列目:抽出した後のデータ
抽出条件は、「BA=」から始まる文字列です。

1421929237
●拡大する

●質問者: japan-nan
●カテゴリ:コンピュータ
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● a-kuma3
●400ポイント ベストアンサー

ユーザ定義関数を作るしかないかな、と思います。

以下のコードを、標準モジュールに定義。

Function extract_string(str, label)
 Dim result() As String
 n = 1
 ar = Split(str, ";")
 For Each s In ar
 If Left(s, 3) = label & "=" Then
 ReDim Preserve result(1 To n)
 result(n) = s
 n = n + 1
 End If
 Next
 extract_string = Join(result, ";")
End Function

3列目には、以下の式を設定。

=extract_string(B1,"BA")

こんな感じになります。
f:id:a-kuma3:20150122232722p:image



追記です。

今回は「;」の一つだけ指定しましたが、「;」&「,」どちらかの場合の時は、
以下のようにすればよろしいでしょうか?

Split 関数は、区切り文字として受け付けるのは一文字だけです。
https://msdn.microsoft.com/ja-jp/library/6x627e5f%28v=vs.90%29.aspx

なので、分割の仕方を別の方法で実装します。

Function extract_string(str, label)
 Dim result() As String
 n = 1
 Set re = CreateObject("VBScript.RegExp")
 re.Pattern = "[^=]+=[^;,]+(;|,|$)"
 re.Global = True
 Set matches = re.Execute(str)
 For Each s In matches
 If Left(s, 3) = label & "=" Then
 ReDim Preserve result(1 To n)
 result(n) = s
 n = n + 1
 End If
 Next
 extract_string = Join(result, "")
End Function

抽出したときには、元の BA=????? の末尾についているものを活かせば良いのですよね?


japan-nanさんのコメント
ありがとうございました。希望通りの表になりました。 今回は「;」の一つだけ指定しましたが、「;」&「,」どちらかの場合の時は、 以下のようにすればよろしいでしょうか? unction extract_string(str, label) Dim result() As String n = 1 ar = Split(str, ";" or ",") For Each s In ar If Left(s, 3) = label & "=" Then ReDim Preserve result(1 To n) result(n) = s n = n + 1 End If Next extract_string = Join(result, ";" or ",") End Function

a-kuma3さんのコメント
>> 今回は「;」の一つだけ指定しましたが、「;」&「,」どちらかの場合の時は、 以下のようにすればよろしいでしょうか? << 回答に追記しました。
関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ