はじめて質問をさせて頂きます。
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
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メソッドを使えば良いと思いますが。
[データ]-[区切り位置]をマクロ記録してみてください。
No.2
- 回答日時:
A列全体を選択して、
「データ」-「区切り位置」でカンマで区切ればいいのでは?
n-junさんのアドバイスはごもっともです。
実は諸事情により、VBAでカンマ区切りをする必要がありましたが、
多くの方のアドバイスにより、無事にVBAでカンマ区切りができました。
有難う御座います。
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
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
多くの方のアドバイスにより、無事に解決致しました。
watabe007さんのプログラムを試してみます。
アドバイス有難う御座います。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) 2つのVBAを一緒にしたら機能しなくなりました(エクセル) 7 2022/06/02 12:41
- Visual Basic(VBA) vba 重複データ合算 5 2023/07/05 18:55
- Visual Basic(VBA) 改行ごとに行を追加し、数量を分割 4 2023/07/11 16:39
- Visual Basic(VBA) VBAで質問ですが、皆さんはどの様に導き出しているのでしょうか? 6 2022/05/03 21:53
- Visual Basic(VBA) 列と行の名前(重複あり)が交差するセルに、データを入力したい 2 2022/06/25 22:42
- Java javaのCSVデータ読込についてです 6 2022/07/02 10:58
- Excel(エクセル) Excel VBAどこが間違ってますか? 4 2023/07/17 10:04
- Visual Basic(VBA) 【VBA】特定のワードが入っている行全体を塗りつぶしたい 4 2022/04/20 15:22
- Visual Basic(VBA) 【前回の続き続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/24 20:49
- Visual Basic(VBA) ExcelからAccessのテーブルに書き込む時に時間がかかる 1 2022/10/14 20:38
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
CSVファイルの中で、「 , 」カ...
-
エクセルで数値を全角文字(カ...
-
パス区切りの文字について
-
マクロを使ってフォルダー内に...
-
EXCELからCSVにすると余計なカ...
-
WORDで改ページすると時々グレ...
-
何故、日本は未だに数字を3桁...
-
カンマ区切りの数字をCSVフ...
-
[VBA][Excel]クリップボードか...
-
VBAでtxtファイルを読み込む際...
-
CSVの定義
-
「カンマ」と「コンマ」は同じ...
-
エクセルの区切り位置の設定方法
-
Excel 桁区切りの カンマ シ...
-
メモ帳からエクセルにセル区切...
-
ひとつの命令を複数行に記述
-
PHP カンマをエスケープしたい...
-
TextBoxに文字が正しく配置され...
-
VBScript 日付の比較について
-
VB2005のTextBoxでカン...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
CSVファイルの中で、「 , 」カ...
-
エクセルで数値を全角文字(カ...
-
EXCELからCSVにすると余計なカ...
-
マクロを使ってフォルダー内に...
-
カンマ区切りの数字をCSVフ...
-
CSVの定義
-
WORDで改ページすると時々グレ...
-
何故、日本は未だに数字を3桁...
-
データにカンマが入ったCSVデー...
-
3桁ごと?4桁ごと?コンマの...
-
[VBA][Excel]クリップボードか...
-
カンマ区切り
-
VBAでtxtファイルを読み込む際...
-
「カンマ」と「コンマ」は同じ...
-
パス区切りの文字について
-
メモ帳からエクセルにセル区切...
-
EXCELの文字が指数になる
-
C#で、テキストボックスの入力...
-
PHP カンマをエスケープしたい...
-
カンマ区切りでないテキストをc...
おすすめ情報