• ベストアンサー

EXCEL VBA split関数について

Excel VBA初心者です。 split関数についてどなたか教えていただけないでしょうか。 aaa,bbb,ccc,eee fff,ggg,hhh,iii jjj,kkk,lll,mmm というデータがあるとして、そこから aaa bbb fff ggg jjj kkk これだけ(左から2個分)を抜き取りたいのですが可能でしょうか? カテ違いな質問でしたらスミマセン。

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

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.4

こんにちは。 もう回答が出ていますが、 関数なら、 =MID(SUBSTITUTE(A1,","," "),1,FIND("^",SUBSTITUTE(A1,",","^",2))-1) SUBSTITUTE(A1,",","^",2) の2が、2番目の意味 ※なおエラー処理はされておりません。 VBAなら、以下のようでよいかな? '実行用のプロシージャ Sub TestSplit() Dim myData As Variant Dim v As Variant Dim i As Long '本来は、Excelなら、Set myData =Range("A1:A3") ReDim myData(2) myData(0) = "aaa,bbb,ccc,eee" myData(1) = "fff,ggg,hhh,iii" myData(2) = "jjj,kkk,lll,mmm" For Each v In myData  Debug.Print CutAr(v, ",", 2)  'セルに出すなら  'i = i + 1  'Cells(i, 1).Value = CutAr(v, ",", 2) Next v 'Set myData = Nothing End Sub '分割用のサブルーチン・ファンクション Private Function CutAr(StrVal As Variant, Separator As String, cnt As Integer) Dim Ar As Variant Dim Arbuf As Variant  Ar = Split(StrVal, Separator)  If UBound(Ar) + 1 >= cnt Then    Arbuf = Ar    ReDim Preserve Arbuf(cnt - 1)  Else    Arbuf = Ar  End If  CutAr = Join(Arbuf) End Function

その他の回答 (4)

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

Sub test01() Dim d(2) d(0) = "aaa , bbb, ccc, eee" d(1) = "fff , ggg, hhh, iii" d(2) = "jjj , kkk, lll, mmm" For i = 0 To UBound(d) x = Split(d(i), ",") For j = 0 To 1 Cells(i + 1, j + 1) = x(j) Next j Next i End Sub 結果はシートのセルにセットしました。 元データを配列に入れてはじめていますが、セルに入っている 場合も変え方は判るでしょう。

  • zap35
  • ベストアンサー率44% (1383/3079)
回答No.3

A1に文字列があるとき、B1に  =LEFT(A1,FIND("@",SUBSTITUTE(A1,",","@",1))-1) C1に  =MID(A1,FIND("@",SUBSTITUTE(A1,",","@",1))+1,FIND("@",SUBSTITUTE(A1,",","@",2))-FIND("@",SUBSTITUTE(A1,",","@",1))-1) の式を入れてみてください ただし","が2つ以上あることと、文字列に"@"が無いことが正常な結果を得るための前提条件です。 もしその場合は補足してください。式を見直すことは可能です

noname#22222
noname#22222
回答No.2

No1さんの答えを応用して CutStr() を作ってみました。 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(A1, ",", 1) & " " & CutStr(A1, ",", 2) aaa bbb

  • hana-hana3
  • ベストアンサー率31% (4940/15541)
回答No.1

>これだけ(左から2個分)を抜き取りたいのですが可能でしょうか? 関数の仕組みが解っていれば簡単なはずですよ。 読み込まれた物は配列に入っているので、最初の2個だけ読み出せば良いだけです。 質問者様が実際にどのような使い方をするか解りませんが・・・一例です。 Sub test() Dim txt As String Dim tmp As Variant txt = "aaa,bbb,ccc,eee" tmp = Split(txt, ",") Debug.Print tmp(0), tmp(1) End Sub

関連するQ&A