dポイントプレゼントキャンペーン実施中!

Excel VBA初心者です。

split関数についてどなたか教えていただけないでしょうか。

aaa,bbb,ccc,eee
fff,ggg,hhh,iii
jjj,kkk,lll,mmm

というデータがあるとして、そこから

aaa bbb
fff ggg
jjj kkk

これだけ(左から2個分)を抜き取りたいのですが可能でしょうか?

カテ違いな質問でしたらスミマセン。

A 回答 (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
    • good
    • 0

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
結果はシートのセルにセットしました。
元データを配列に入れてはじめていますが、セルに入っている
場合も変え方は判るでしょう。
    • good
    • 0

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つ以上あることと、文字列に"@"が無いことが正常な結果を得るための前提条件です。
もしその場合は補足してください。式を見直すことは可能です
    • good
    • 0

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
    • good
    • 0

>これだけ(左から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
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!