- ベストアンサー
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個分)を抜き取りたいのですが可能でしょうか? カテ違いな質問でしたらスミマセン。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは。 もう回答が出ていますが、 関数なら、 =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)
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)
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つ以上あることと、文字列に"@"が無いことが正常な結果を得るための前提条件です。 もしその場合は補足してください。式を見直すことは可能です
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)
>これだけ(左から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