• ベストアンサー

VBA でコンマ区切りのデータを取り込む方法

こんにちは、VBAでお聞きします。 DIM Data as String で Data=12,45,3,68,5となっているとき コンマ区切りで仕切られた値を一つずつ 取り出して、MsgBox関数で、それぞれの 値を表示したいのです。 そのためには、それぞれの値と、値が いくつあるかを知る必要があります。 その方法を教えて下さい

  • tuneo
  • お礼率37% (11/29)

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

  • ベストアンサー
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.1

Dim a, i Dim Data As String Data = "12,45,3,68,5" a = Split(Data, ",") For i = 0 To UBound(a) MsgBox a(i) Next

tuneo
質問者

お礼

こんにちは、BLUEPIXYさん。 ばっちりです。 お教えいただいた方法で見事にいけました。 しかも質問のあと即の回答で感激しています。 いろいろ探しましたが、どこにも見つかり ませんでした。 ありがとうございます。

関連するQ&A

  • 【Excel VBA】カンマ毎にデータを区切る

    はじめて質問をさせて頂きます。 Excel VBAは初心者です。 仕事で必要なため、本を読みながら考えておりましたが、 手も足も出ない状態です。 【質問内容】 Excel VBAにて、ExcelファイルのA列のみに格納されているデータを カンマ「,」の位置毎に区切ります。 ※格納されているデータ例:A,B,C,D,E Excelの区切り位置にて、カンマで区切る処理と同じです。 A1から処理を開始し、A列のデータがなくなるまで 上記の処理を行います。 下記のプログラムを実行すると、1行目は正常にカンマ毎に 区切られますが、2行目以降はカンマ毎に区切られず、 そのままの状態です。 どこに問題があり、どのように修正すれば良いのでしょうか、 ご教示頂けると助かります。宜しくお願いします。 【プログラム】 Sub カンマ毎に区切る() Dim mydata As String Dim myArray() As String Dim i, j As Integer j = 0 Do While Cells(j + 1, "A").Value <> "" mydata = Cells(j + 1, 1) myArray() = Split(mydata, ",") For i = 0 To UBound(myArray) Cells(1, i + 1).Value = myArray(i) Next j = j + 1 Loop End Sub

  • Excel VBA: Inputステートメントで読み込むと、データ中のカンマで切れてしまう。

    いつも皆様ありがとうございます。 ExcelのVBAで、以下の仕様のテキスト・ファイルを1行ずつ読み込もうとしています。 【仕様】 ・1行は1つ以上のスペースで区切られた複数の値から成る。 ・値中に、半角カンマが含まれる場合がある。 値中にカンマが存在しない場合は、問題なく改行まで読み込まれるのですが、カンマがあるとそのカンマ以降のデータが読み込まれません。 Dim intFF As Integer 'FreeFile値 Dim strFileName As String 'ファイル名 Dim strRec As String '1行の読み込み内容 strFileName = "TEST.txt" intFF = FreeFile Open strFileName for Input As #intFF Do Until EOF(intFF) Input #intFF, strREC ' ※1 ・・・(省略) 上記※1のコード実行後にstrRECの中を見ると、カンマ以降の文字列が読み込まれていません。 例えば「A BB CCC DDDD」というデータの場合は問題なくそのままの値がstrRECの中に入っていますが、「A BB CC,C DDDD」というデータだと「A BB CC」というようになってしまいます。 Inputステートメントについて調べましたが、区切り文字に関する記述がなかったので困っています。 もし原因をご存知の方がいらっしゃいましたらお教えいただけないでしょうか。 よろしくお願いいたします。

  • vba split関数 コンマ区切り

    エクセルに不慣れなため教えていただけたら幸いです。 A3~A11・B3~B11・C3~C11列にコンマ区切りの数字があります。 列によってはコンマで区切られた数字が3つのものと4つのものが混在しています。 split関数でコンマ区切りの数字を分割してE~H列・J~M列・O~R列に表示したいと考えています。 先ほど別の質問で下記のマクロを教えていただいたのですが、 その際は、A1~A9にあるものをD~G列に表示するというものでした。 よくよく考えると、A列のみではなく、B・C列と複数の列を コンマ区切りしたいと考えています。 このような場合は、どうしたらよいでしょうか。 vba不慣れなためわかりづらかったら申し訳ありません。 お分かりになられるかたがいらっしゃいましたら教えていただけますでしょうか。 よろしくお願いいたします。 Option Explicit ' Sub Macro1()   Dim Rout As Long   Dim Colu As Integer   Dim Expression As Variant '   For Rout = 1 To Cells(Rows.Count, "A").End(xlUp).Row     Expression = Cells(Rout, "A")     Expression = Split(Expression, ",") '     For Colu = 0 To UBound(Expression)       Cells(Rout, Colu + 4) = Expression(Colu)   Next Colu, Rout End Sub

  • カンマ区切りCSVファイルをVBAで読み込みたい

    こんにちは。EXCELのVBAに詳しい方、どうか教えてください! カンマ区切りCSVファイルをEXCELに読み込みたいのですが、 CSVファイルのデータが金額のため、データ自体にもカンマが含まれていて、 金額のカンマでも分割されてEXCELのセルに収まってしまいます。 データの区切りのカンマと、金額のカンマを区別して読み込む良い方法はないでしょうか。 とても困っているので、お解りになる方どうかご回答をお願いいたします。 ・CSVファイルのデータ   1,000 , 2,000 , 1,500 , 3,000 , 1,000 , 2,500 , 2,000  ↑金額のカンマでデータが分割されないように読み込みたいのですが・・・

  • カンマ区切り

    VBAのテキストボックスで表示や入力時に、カンマ区切りにするにはどうすればいいのでしょうか?

  • vba split関数 コンマ区切り

    エクセル・vbaに不慣れなためわかりづらかったら申し訳ありません。 コンマ区切りの数字をsplit関数で分割して指定セルに表示したいと考えており、以前質問し回答をいただいた内容でやりたいことが出来るようになりました。 ただし、若干出力場所等の変更を行いたいのですが、変更することが出来ません。 以前はA~C列にあるものをE~H列・J~M列・O~R列に表示する。 その際、A~C列にあるコンマ区切りの数字は3つのものと4つのものがあります。画像の上段部分をご確認ください。 その際のマクロは下記のとおりです。 Sub Test() Dim i As Long, j As Long, k As Long Dim tmp As Variant For i = 1 To 3 For j = 3 To 11 tmp = Split(Cells(j, i).Value, ",") For k = 0 To UBound(tmp) If k < 4 Then Cells(j, i).Offset(0, i * 4 + k).Value = tmp(k) End If Next Next Next End Sub 変更したいのは、AC8~AE16にコンマ区切りの数字があります。 AC列にある数字はAI8~AL16にAD列にある数字はAS8~AV16に AE列にある数字はBC8~BF16に表示したいと考えています。 コンマ区切りの数字は3つのものと4つのものがあります。 (画像の下段部分をご確認ください。) 上記のマクロでは下記の部分を変更する必要なのかと考えていますが、変更方法がわかりません。 お分かりの方教えていただけたら幸いです。 どうぞよろしくお願いいたします。 For k = 0 To UBound(tmp) If k < 4 Then Cells(j, i).Offset(0, i * 4 + k).Value = tmp(k)

  • vba split関数 コンマ区切りの数字を表示 

    エクセルに不慣れなため教えていただけたら幸いです。 A列にコンマ区切りの数字があります。 列によってはコンマで区切られた数字が3つのものと4つのものが混在しています。 split関数でコンマ区切りの数字を分割してD~G列に表示したいと考えています。 3つのものだけだとvbaを作成できたのですが、4つ目があるときというプログラムが不明です。 現在作成済みのマクロは下記のとおりです。 Sub test() Dim SH As Worksheet Dim i As Long Set SH = Worksheets("sheet1") For i = 1 To 9 SH.Cells(i, 4).Value = Split(SH.Cells(i, 1).Value, ",")(0) SH.Cells(i, 5).Value = Split(SH.Cells(i, 1).Value, ",")(1) SH.Cells(i, 6).Value = Split(SH.Cells(i, 1).Value, ",")(2) Next i End Sub お手数ですがお分かりになられるかたがいらっしゃいましたら回答いただけたら助かりますのでよろしくお願いいたします。

  • カンマ区切りのデータを処理する方法

    よろしくお願いします。 vb6.0 + oracle9i(oo4o)で開発しています。 元データの中には、カンマ区切り形式で全角・半角・ブランクありの可変長です。(テキストデータではありません) 例えば、 111bb,22222,333333,44bb 11,234bb,33bb,44     見たいなデータです。 カンマの数は変わりませんし、各項目自体にカンマはありえません。 この各項目を個々に取り込んで処理したいのですが... MID関数(MID$,MIDB)など色々試してみるのですが 対応しきれなくなってしまいました。 各項目に対してTRIMをかけて処理をしたいのですが、 良い方法はあるのでしょうか? カンマ間を一つの項目として判断でき、 TRIMがかけれれば一番よいのですが... 文字を一文字ずつ読んでいって、カンマを判断するしかないのでしょうか?

  • excel2003 選択セル内データ→1個のセルにカンマ区切りデータ

    excel2003で、複数の選択セル内データを1個のセルにカンマ区切りデータに変換する操作をご教示願います。 具体的には、 「データ」メニューの「区切り位置」で、1つのセル内にカンマ区切りされた複数データを、データ数分のセルに変換可能ですが、これと逆の変換方法を知りたいのです。 可能であれば、VBA以外の方法が良いのですが・・・ ご教示よろしくお願い致します。

  • VBAで””なしのタブ区切りで出力する方法

    エクセルのデータをタブ区切りで出力したいのですが、「ファイル名を付けて保存」から「ファイルの種類」をタブ区切りにして保存した場合、カンマが含まれるセルにダブルクォーテーション「””」が付与されてしまいます。 やりたいことは以下の3つになります。 1.タブ区切りで出力する 2.カンマが含まれていてもダブルクォーテーションで括らない 3.先頭2行(1行目と2行目)を削除 ※1行目はタイトル行、2行目はサンプル行です。 1と2を満たすVBAはできたのですが、3を実現するために以下の 処理を加えたところ、正しくタブ区切りで出力されなくなってしまいました。 ・アクティブシートをコピー ・1~2行目を削除 ・コピーしたシートを削除 作成したVBAは以下になります。 ーーーーーーーここからーーーーーーーーーーーー Option Explicit Public Sub ChangeTSV() Dim FileName As String FileName = WriteTsvFile(ActiveSheet) If FileName <> "" Then MsgBox "タブ区切りテキストファイルが作成されました。" & vbCrLf & "[PATH]" & vbCrLf & FileName, vbInformation, "タブ区切りテキストファイル作成完了" End If End Sub Private Function WriteTsvFile(TargetSheet As Worksheet) As String On Error GoTo WriteTabTxtFileErr Dim FileName As String Dim LastRow As Long Dim LastCol As Long Dim レコード As String Dim c As Variant Dim i As Long Dim FileNo As Integer ' アクティブシートをコピー ActiveSheet.Copy After:=Worksheets("最後のシート名") ' 1~2行目を削除 Range("1:2").Delete ' ファイル名を作成 FileName = Application.ThisWorkbook.Path & "\" & TargetSheet.Name & "_" & Format(Now, "yyyymmdd-hhmmss") & ".txt" FileNo = FreeFile() ' 最終行と最終列の取得 LastRow = Cells(Rows.Count, 1).End(xlUp).Row LastCol = Cells(1, Columns.Count).End(xlToLeft).Column i = 1 Open FileName For Output As #FileNo ' アラートOFF Application.DisplayAlerts = False Do Until i > LastRow For Each c In Cells(i, 1).Resize(, LastCol) レコード = レコード & vbTab & c.Value Next c Print #FileNo, Mid$(レコード, 2) レコード = "" i = i + 1 Loop Close #FileNo ' コピーしたシートを削除 ActiveSheet.Delete ' アラートON Application.DisplayAlerts = True WriteTsvFile = FileName Exit Function WriteTabTxtFileErr: MsgBox "[WriteTabTxtFile]" & vbCrLf & TargetSheet.Name & vbCrLf & Err.Description, vbCritical, "Exception" WriteTsvFile = "" Exit Function End Function ーーーーーーーここまでーーーーーーーーーーーー タイトル行およびサンプル行を削除してから処理を行っているため、 どこまでがデータが入るべき列なのか判断できずに空白列にタブが入らないのは当たり前なのですが、 これを回避する方法がまったくわからず困っております。 お知恵をお貸しください。