
はじめて質問をさせて頂きます。
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.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さんのプログラムを試してみます。
アドバイス有難う御座います。
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
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルで数値を全角文字(カ...
-
CSVファイルの中で、「 , 」カ...
-
openoffice calcで#DIV/0! の...
-
何故、日本は未だに数字を3桁...
-
WORDで改ページすると時々グレ...
-
マクロを使ってフォルダー内に...
-
データグリッド内の数値をカン...
-
EXCELからCSVにすると余計なカ...
-
[VBA][Excel]クリップボードか...
-
【VBA】エクセルで値のみクリッ...
-
WindowsのOutlookの連絡先をiPh...
-
dat形式ををcsv形式に変更したい。
-
ラムダ式イミフ
-
秀丸エディタで、「-」や「ー」...
-
いまスマホからカードの申込み...
-
正規表現で、特定の文字列を含...
-
全角入力
-
【ExcelVBA】英数記号の半角変換
-
splitの逆の処理
-
【至急!!!!!】ランダム桁数を正...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
CSVファイルの中で、「 , 」カ...
-
エクセルで数値を全角文字(カ...
-
Excelについて質問です。 セル...
-
CSVの定義
-
EXCELからCSVにすると余計なカ...
-
WORDで改ページすると時々グレ...
-
マクロを使ってフォルダー内に...
-
[VBA][Excel]クリップボードか...
-
データにカンマが入ったCSVデー...
-
カンマ区切りの数字をCSVフ...
-
エクセルにペーストする際にカ...
-
エクセル:桁区切り「カンマ」...
-
【VBA】エクセルで値のみクリッ...
-
C#でcsvファイルの列を入れ替え...
-
C#で、テキストボックスの入力...
-
ひとつの命令を複数行に記述
-
エクセルの区切り位置の設定方法
-
3桁ごと?4桁ごと?コンマの...
-
Excel 住所の分割(文字数制限...
-
openoffice calcで#DIV/0! の...
おすすめ情報