• ベストアンサー

VBA文字列の抜き出し方

こんにちは。Excel VBAで文字列を抜き出したいと思っています。 変数には下記のようなデータがはいっています。 hensu = "コード:xxxxx / コード2:yyyy / コード3:zzzzzz" コード2:から始まって/の手前までのデータ、つまりyyyyのみを抜き出したいと思っていますが、どのように抜き出すことができるでしょうか? instrでコード2を検索しても、どのように「/」を検索すればいいのかわかりません。 このあと、ループを使ってyyyyを連続的に抜き出していきたいと思っています。各文字列の文字数は不定です。 宜しくお願い致します!

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

Public Function CutStr(ByVal Text As String, ByVal Separator As String, ByVal N As Integer) As String   Dim strDatas() As String   strDatas = Split("" & Separator & Text, Separator, , 0)   CutStr = strDatas(N * Abs(N <= UBound(strDatas))) End Function 上記のCutStr関数で切り出せます。 抜出し要領は、イミディエイトウインドウのPRINTSCを参考にされて下さい。

mellow91
質問者

お礼

ご回答ありがとうございます!助かりました。また非常に勉強になりました。感謝です。

その他の回答 (7)

  • bin-chan
  • ベストアンサー率33% (1403/4213)
回答No.8

hensu = "コード:xxxxx / コード2:yyyy / コード3:zzzzzz" dim strBuff1() as string dim strBuff2() as string strBuff1()=split(hensu, "コード2:")  ''ここでは以下の結果を期待 ''strBuff1(0)="コード:xxxxx / " ''strBuff1(1)="yyyy / コード3:zzzzzz" if ubound(strBuff1())>1 then  strBuff2()=split(strBuff1(1), "/") ''" / "でも良いかも  ''ここでは以下の結果を期待  ''strBuff2(0)="yyyy "  ''strBuff2(1)=" コード3:zzzzzz"  if ubound(strBuff2())>1 then   msgbox strBuff2(0)   ''Trimが必要かも  endif endif もし、hensuに2回以上「コード2:」が出現するなら if ubound(strBuff1())>1 then の結果を見て strBuff1(1)~strBuff1(max)までループさせてください。

mellow91
質問者

お礼

ご回答ありがとうございます!助かりました。また非常に勉強になりました。感謝です。

  • tsubuyuki
  • ベストアンサー率45% (699/1545)
回答No.7

Sub sample() Dim hensu As String Dim HensuB As String, HensuC As String Dim HensuZ As String hensu = "コード:xxxxx / コード2:yyyy / コード3:zzzzzz" HensuB = "コード2" HensuC = Mid(hensu, InStr(hensu, "コード2") + Len(HensuB) + 1) HensuZ = Left(HensuC, InStr(HensuC, "/") - 2) Debug.Print HensuZ End Sub 単純に。 Instr一回で抜けないなら、二回に分けてやれば良いです。

mellow91
質問者

お礼

ご回答ありがとうございます!助かりました。また非常に勉強になりました。感謝です。

回答No.6

Public Sub test()  Const PICKUP_CODE_NAME As String = "コード2:"  Const CODE_SEPARATOR As String = "/"    Dim hensu As String  hensu = "コード:xxxxx / コード2:yyyy / コード3:zzzzzz"    Dim codeStartPos As Integer  codeStartPos = InStr(1, hensu, PICKUP_CODE_NAME)  Dim value As String  value = Trim(Mid(hensu, codeStartPos + Len(PICKUP_CODE_NAME), _    InStr(codeStartPos, hensu, CODE_SEPARATOR) - codeStartPos - Len(PICKUP_CODE_NAME)))  MsgBox value End Sub

mellow91
質問者

お礼

ご回答ありがとうございます!助かりました。また非常に勉強になりました。感謝です。

回答No.5

いろいろ回答がついていますが、 初心者の私はこのほうが分かりやすいです。 Dim 検索開始文字 As String Dim 検索終了文字 As String Dim 切取開始位置 As Long Dim 切取文字数 As Long Dim 抽出した文字 As String 検索開始文字 = "コード2:" 検索終了文字 = "/" 切取開始位置 = InStr(hensu, 検索開始文字) + Len(検索開始文字) 切取文字数 = InStr(切取開始位置, hensu, 検索終了文字) - 切取開始位置 抽出した文字 = Mid(hensu, 切取開始位置, 切取文字数)

mellow91
質問者

お礼

ご回答ありがとうございます!助かりました。また非常に勉強になりました。感謝です。

  • keithin
  • ベストアンサー率66% (5278/7941)
回答No.4

sub macro1()  dim hensu as string  dim a, res  dim i as long  dim mes as string  hensu = "コード:xxxxx / コード2:yyyy / コード3:zzzzzz"  a = split(hensu, " / ") ’区切り記号は調整する事  res = filter(a, "コード2") ’てきとーに見繕う事 ’「抜き出してどうしたい」のか不明なので以下オマケ  if ubound(res) = -1 then   mes = "NOT FOUND"  else   mes = ubound(res) + 1 & " item(s) found"   for i = 0 to ubound(res)    mes = mes & vblf & split(replace(res(i), ":",":"), ":")(1)   next i  end if  msgbox mes end sub #「:」と「:」みたいにデータが整備されていないので余計な処理が発生しています。

mellow91
質問者

お礼

ご回答ありがとうございます!助かりました。また非常に勉強になりました。感謝です。

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.3

No.2です! 前回の説明で間違いがありました。 >そして、必ず「/」はコード2:の後に存在するいう前提です。 >(「/」が存在しないと無限ループに陥ってしまいます) の2行は無視してください。 「/」がない場合は最後まで表示されるだけです。 何度も失礼しました。m(_ _)m

mellow91
質問者

お礼

ご回答ありがとうございます!助かりました。また非常に勉強になりました。感謝です。

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.2

こんにちは! 一例です。 データはA1セル以降にあり、B列に表示させるとします。 尚、「コード2:」は各セルに1個だけしか出現しない! そして、必ず「/」はコード2:の後に存在するいう前提です。 (「/」が存在しないと無限ループに陥ってしまいます) Sub Sample1() Dim i As Long, k As Long, str As String, buf As String For i = 1 To Cells(Rows.Count, "A").End(xlUp).Row If InStr(Cells(i, "A"), "コード2:") > 0 Then For k = InStr(Cells(i, "A"), "コード2:") + Len("コード2:") To Len(Cells(i, "A")) str = Mid(Cells(i, "A"), k, 1) buf = buf & str If str = "/" Then Exit For End If Next k Cells(i, "B") = Left(buf, Len(buf) - 1) buf = "" End If Next i End Sub ※ 質問文ではyyyyの後にスペースが入っているようですが、 質問通り「/」の前までを表示させるようにしています。 (半角スペースも表示されます。) こんな感じではどうでしょうか?m(_ _)m

mellow91
質問者

お礼

ご回答ありがとうございます!助かりました。また非常に勉強になりました。感謝です。

関連するQ&A

専門家に質問してみよう