• ベストアンサー

【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

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

  • ベストアンサー
  • end-u
  • ベストアンサー率79% (496/625)
回答No.1

>どこに問題があり、どのように修正すれば良いのでしょうか、 >Cells(1, i + 1).Value = myArray(i) ここです。Cells(1, i + 1)で常に1行目を指定していますから。 変数jを使えば良いです。 >j = 0 ここを 1 から始めて >Do While Cells(j + 1, "A").Value <> "" >  mydata = Cells(j + 1, 1) ここも j + 1 ではなく j に修正。 ついでに。 j = 1 Do While Cells(j, "A").Value <> ""   mydata = Cells(j, 1).Value   myArray() = Split(mydata, ",")   Cells(j, 1).Resize(, UBound(myArray) + 1).Value = myArray   j = j + 1 Loop 配列myArrayのサイズに合わせて書き込み先をResizeすればLoop不要です。 それよりも 『Excelの区切り位置にて、カンマで区切る処理と同じです。』 なのでTextToColumnsメソッドを使えば良いと思いますが。 [データ]-[区切り位置]をマクロ記録してみてください。

coltcolt
質問者

お礼

end-uさんのアドバイスにより、無事に解決しました。 早急で的確なアドバイス、有難う御座います。

すると、全ての回答が全文表示されます。

その他の回答 (3)

  • watabe007
  • ベストアンサー率62% (476/760)
回答No.4

参考に Dim c As Range, myArray As Variant For Each c In Range("A1", Cells(Rows.Count, "A").End(xlUp))   myArray = Split(c.Value, ",")   c.Resize(, UBound(myArray) + 1).Value = myArray Next

coltcolt
質問者

お礼

多くの方のアドバイスにより、無事に解決致しました。 watabe007さんのプログラムを試してみます。 アドバイス有難う御座います。

すると、全ての回答が全文表示されます。
  • nda23
  • ベストアンサー率54% (777/1415)
回答No.3

犯人はコレ→Cells(1, i + 1).Value = myArray(i) 処理するデータは行(j)で変わるのに、結果は常に1行目に出力されます。 Dim mydata As String Dim myArray As Variant '★Variantに変更 Dim myElement As Variant '★新規 Dim mySheet As WorkSheet '★新規 Dim i As Long, j As Long '★特に理由が無ければlongの方が良い j = 0 '★明示的にワークシートを指定すべき Set mySheet = ThisWorkbook.WorkSheets(1) Do     j = j + 1     mydata = mySheet.Cells(j, 1)     If mydata = "" Then Exit Do     myArray = Split(mydata, ",") '★()は不要     i = 0     For Each myElement In myArray         i = i + 1         Cells(j, i).Value = myElement     Loop Loop

coltcolt
質問者

お礼

nda23さんのアドバイス、判りやすくて参考になりました。 無事に解決致しました、有難う御座います。

すると、全ての回答が全文表示されます。
  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.2

A列全体を選択して、 「データ」-「区切り位置」でカンマで区切ればいいのでは?

coltcolt
質問者

お礼

n-junさんのアドバイスはごもっともです。 実は諸事情により、VBAでカンマ区切りをする必要がありましたが、 多くの方のアドバイスにより、無事にVBAでカンマ区切りができました。 有難う御座います。

すると、全ての回答が全文表示されます。

関連するQ&A

このQ&Aのポイント
  • プリンターCANON TS6330の文字印字が太くなってしまう問題が発生しています。
  • TS8230と比較して、TS6330の文字印字が細くなる方法はありますか?
  • キヤノン製品に関する質問です。プリンターCANON TS6330の文字印字が太くなることについてお知恵を拝借したいです。
回答を見る

専門家に質問してみよう