• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:EXCEL Spirit関数 繰り返し処理)

EXCEL VBAでテキストファイルを読み込み、Spirit関数にて項目内容を書き出す方法

このQ&Aのポイント
  • Excel VBAを使用してテキストファイルを読み込み、Spirit関数を使って項目内容を書き出す方法について教えてください。
  • 日付を1日から31日まで繰り返し処理するコードを作成し、金額A、金額B、金額Cのデータを書き出しています。
  • 現在は15ずつカンマ区切りの位置を変えて1行ずつ書き出していますが、for next文を使ってスッキリとした書き方を教えていただきたいです。

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

  • ベストアンサー
  • jcctaira
  • ベストアンサー率58% (119/204)
回答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

kochimaru06
質問者

お礼

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