EXCEL VBAでテキストファイルを読み込み、Spirit関数にて項目内容を書き出しています。
下記のコードの日付部分は1日~31日まで繰り返しになります。
Dim maxRow As Integer
Dim maxCol As Integer
Dim i As Long
Dim mytxtfile As String, myStr As String
Dim myRange As Range
Dim mySp() As String
Dim sh1 As Worksheet
On Error GoTo myError
mytxtfile = "D:\明細.TXT"
Set sh1 = Worksheets("元データ")
Set myRange = sh1.Range("A1")
sh1.Cells.Clear
Open mytxtfile For Input As #1
Do Until EOF(1)
Line Input #1, myStr
myRange.Offset(i, 0).Value = myStr
myStr = Replace(myStr, """", "")
mySp = Split(myStr, ",")
myRange.Offset(i, 1).Value = mySp(0) '卸名
myRange.Offset(i, 2).Value = mySp(1) 'コード
myRange.Offset(i, 3).Value = mySp(2) 'フラグ
myRange.Offset(i, 4).Value = mySp(6) '納品先
myRange.Offset(i, 5).Value = mySp(7) '店舗
myRange.Offset(i, 6).Value = mySp(23) '日付
---------ここから
myRange.Offset(i, 7).Value = mySp(26) '1日_金額A
myRange.Offset(i, 8).Value = mySp(27) '1日_金額B
myRange.Offset(i, 9).Value = mySp(34) '1日_金額C
--------ここまでが 1日分です。これが31日まで続きます。
i = i + 1
Loop
Close #1
'31日までのデータが無い場合のエラーを無視する(データが存在する日まで書き出す)
myError:
Resume Next
sh1.Range("A:A").Delete 'txt取込作業列を削除
End Sub
カンマ区切りの位置は、15ずつ増えますので
繰り返し処理したいのですが、うまくいきません。
最初は、金額A だけの書き出しだったため、
1行ずつ書いていたのですが、金額B、Cの列も必要になりました。
for next で すっきりした書き方を教えていただけないでしょうか?
宜しくお願い致します。
No.1ベストアンサー
- 回答日時:
kochimaru06 さん
こんにちは。
以下、修正してみました。ご確認下さい。
※見やすくするため、勝手に命令を変更しました。
Dim maxCol As Integer
Dim I As Long
Dim J As Long
Dim mytxtfile As String, myStr As String
Dim myRange As Range
Dim mySp() As String
Dim sh1 As Worksheet
Set sh1 = Worksheets("元データ")
Set myRange = sh1.Cells
myRange.Clear
Open mytxtfile For Input As #1
Do Until EOF(1)
Line Input #1, myStr
I = I + 1
myRange(I, "A") = myStr
myStr = Replace(myStr, """", "")
mySp = Split(myStr, ",")
myRange(I, "B") = mySp(0) '卸名
myRange(I, "C") = mySp(1) 'コード
myRange(I, "D") = mySp(2) 'フラグ
myRange(I, "E") = mySp(6) '納品先
myRange(I, "F") = mySp(7) '店舗
myRange(I, "G") = mySp(23) '日付
For J = 0 To 30
On Error Resume Next
myRange(I, 8 + J * 3) = mySp(26 + J * 15) '1~31日_金額A
myRange(I, 9 + J * 3) = mySp(27 + J * 15) '1~31日_金額B
myRange(I, 10 + J * 3) = mySp(34 + J * 15) '1~31日_金額C
On Error GoTo 0
Next J
Loop
sh1.Range("A:A").Delete 'txt取込作業列を削除
End Sube
jcctairaさん、ありがとうございました。
希望どおりの結果が得られました。
EXCEL2003使用の為、元データが列のMAXを超えるので
A列に一旦入れて、Split関数を使用して書き出す方法を取りました。
色々と調べて参考にしたコードがDo Loop 使用だったのに、
For Nextで質問してしまい、回答をいただけないかもと不安でした。
(質問を書き直すことが出来なかったので…。)
myRange(I, 8 + J * 3) = mySp(26 + J * 15) '1~31日_金額A
J*3 J*15 の部分は、J*4 J*15 でも試して確認してみて、
何となく雰囲気がつかめた気がします。
繰り返し処理が、どうしても苦手で…。
避けれないことは分かっているので、少しずつでも理解できる様に頑張ります。
また、Cellsプロパティの列番号は、"A" の様にも指定できたのですね。
とても見やすいので、これからはこちらの方法を使用したいと思います。
本当にありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBAが止まります。 3 2022/08/31 14:09
- Visual Basic(VBA) エクセルVBAのコードで質問です。 下のコードはJ16の文字列をB3を起点とする範囲から探して、見つ 5 2023/04/07 11:07
- Visual Basic(VBA) VBAでoutlook365が起動しません。 4 2022/08/25 13:31
- Visual Basic(VBA) 稀に1円合いません? Sheet1から金額と個数を貼り付ける下記コードで、金額を切り上げるコードを何 3 2022/09/05 15:11
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
- Visual Basic(VBA) エラーコード1004 6 2022/06/09 14:12
- Visual Basic(VBA) オブジェクトが見つかりません 1 2023/06/24 19:43
- Excel(エクセル) 並べ替え、ソートの構文がわからない。 お世話になります。VBA超初心者です。 エクセルでワークシート 2 2023/06/28 21:00
- Excel(エクセル) マクロで行を追加、削除すると行位置がずれますが、解決方法はありませんか?。 5 2022/05/28 16:03
- Visual Basic(VBA) VBA 別ブックからの転記の高速化について VBA 別ブックからの転記の高速化についてご教授下さい。 19 2022/07/26 13:07
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルVBAで SendKeys "{TAB}"
-
Excel で行を指定回数だけコピ...
-
エクセルVBA 別シートの複数の...
-
シャープのアクオス sh-m25 を...
-
Excel VBA インデックスの境...
-
エクセル:VBAで月変わりで、自...
-
excelの差込印刷で可視セルだけ...
-
重複データの集計マクロについて
-
[EXCEL]全てのチェックボックス...
-
VBAで条件が一致する行のデータ...
-
Excel VBAでシート内全体に非表...
-
【WORD差し込み印刷】複数レコ...
-
WorkbooksとWorksheetsを簡単に...
-
エクセルVBAで 2種のリストを...
-
スマホ機種変更で旧機種のGoogl...
-
機種変更時にデータは見られる?
-
LAVIE Direct DT PC-GD298ZZAL...
-
外付けHDDをフローリングに落と...
-
拡張子「.HUF(.huf)」のファ...
-
au(MEDIASKIN)からiPhoneへの...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excel で行を指定回数だけコピ...
-
エクセルVBA 別シートの複数の...
-
シャープのアクオス sh-m25 を...
-
excelの差込印刷で可視セルだけ...
-
Excel VBA インデックスの境...
-
VBA:同じ文字列データの比...
-
エクセルVBAで 2種のリストを...
-
エクセル:VBAで月変わりで、自...
-
歯抜けの時間を埋めて行の挿入
-
エクセルVBAで SendKeys "{TAB}"
-
VBAで条件が一致する行のデータ...
-
VBA別シートの最終行の下行へ貼...
-
EXCELマクロで全シート対...
-
Excel VBAでシート内全体に非表...
-
VBA 貼付先範囲(行)がいっぱ...
-
VBAで複数シート選択
-
【VBA】UserForm1の中で使うワ...
-
【WORD差し込み印刷】複数レコ...
-
VBAで複雑な構成の転記
-
エクセルVBAでの日付順のデ...
おすすめ情報