dポイントプレゼントキャンペーン実施中!

Excel VBAを使って、テキストデータをExcelインポートしたいと思っています。
画像を添付していますが、こちらにも例として。
*********************↓例↓***********************
/NAME    1行目
//①      2行目
A,B,C,D   3行目
E,F,G,H   4行目
,,,
,,,

省略

,,,       1026行目
//②      1027行目
AA,BB,CC,DD 1028行目
EE,FF,GG,HH  1029行目
,,,
,,,

省略

,,,  2051行目(データ最終行)
*********************↑例↑***********************
このようなデータを読み込みたいと思っています。
1行目・2行目を無視して、3行目のデータから
ExcelのF列5行目から繁栄をさせたいです。
また、A,B,C,D となっている状態で
F5にA F6にB F7にC F8にE 
と繁栄をさせたいと思っています。

そして、1027行目を無視して、1028行目からのデータを
K列5行目から同じように
K5にAA K6にBB K7にCC K8にDD
と言うようなデータ繁栄をさせたいと思うのですが
何か方法が思い付く方がいましたら、教えて頂きたいです。。

「Excel VBA テキストインポートに」の質問画像

A 回答 (5件)

こんばんは


内容が良く分かりませんが、なんとなくで
新規シート(加工用)にQueryTables.Addでカンマ区切り、必要カラムのみで抽出 一旦 = でVariant配列に入れ Transposeで行列を入れ替え出力、
必要であれば、不要列などを削除(シート上で加工、記録も出来るかな、)
配列出力時などや配列内で加工できるなら飛ばして出力するだけ

加工した場合、改めて= でVariant配列に入れ
対象シートに出力、(出力先が飛び列ならstepでループ)

データの行や値がユニークなら
新規シート(加工用)にQueryTables.Addでカンマ区切り、必要カラムのみ
Find などで データ行を配列へ Transpose で 出力
    • good
    • 1

CSVの読み込み方法|VBAサンプル集


https://excel-ubara.com/excelvba5/EXCEL111.html

> もっとも簡単かつ良くあるCSV読み込みVBAコード

をベースにいじったもの。


質問の内容と解釈変えてますが、希望の操作になると思われます。

1行ずつ読み込む。
2行目まではスルー
書き込み行(RO)は5。
書き込み列(CO)は6(F列)。
各行を読み込み、要素を縦に追加していく。

その過程で、
CSVの1つ目のデータの先頭2文字が"//"の場合は…
書き込み行(RO)を5に戻し、
書き込み列(CO)は+5する(6+5=11列目 → K列)。


Option Explicit
Sub CSV入力1()
  Dim varFileName As Variant
  Dim intFree As Integer
  Dim strRec As String
  Dim strSplit() As String
  Dim i As Long, j As Long
  Dim RO As Long, CO As Long

  varFileName = Application.GetOpenFilename(FileFilter:="CSVファイル(*.csv),*.csv", _
                        Title:="CSVファイルの選択")
  
  If varFileName = False Then
    Exit Sub
  End If

  intFree = FreeFile '空番号を取得
  Open varFileName For Input As #intFree 'CSVファィルをオープン
  
  RO = 5
  CO = 6
  i = 0
  Do Until EOF(intFree)
    Line Input #intFree, strRec '1行読み込み
    i = i + 1
    strSplit = Split(strRec, ",") 'カンマ区切りで配列へ
    If i > 2 Then
      For j = 0 To UBound(strSplit)
        If Left(strSplit(0), 2) <> "//" Then
          Cells(RO, CO) = strSplit(j)
          RO = RO + 1
        Else
          RO = 5
          CO = CO + 5
          Exit For
        End If
        
      Next
    End If
  Loop
 
  Close #intFree
End Sub
    • good
    • 1
この回答へのお礼

コードまで作成して頂いてありがとうございます!
VBA自体初心者でしたので、すごく助かりました!!
Excelから出力したい場合、このサイトを基に作成する事できますでしょうか?

お礼日時:2022/03/16 08:34

こんにちは



ご説明だけでは、よくわかりませんけれど・・

『テキストファイルの3行目と1028行だけを取り出して、それぞれをF列とK列に行列入換えて転記したい』ってことでしょうか?

>何か方法が思い付く方がいましたら~
VBAとのご質問なので、
◇方法1
1)テキストファイルをカンマ区切りとしてエクセルで開く
2)3行目と1028行目を、F列、K列に転記
3)テキストファイルを閉じる(保存せずに)

◇方法2
1)テキストファイルをシークエンシャルファイルとして開く
2)3行目と1028行目を、F列、K列に転記(不要な部分は読み飛ばす)
3)ファイルを閉じる

あたりが、一般的な方法かと思います。
    • good
    • 1

こんにちは。



データの大きさが決まっているなら、Excelに書き出す配列を用意して、
テキストファイルを1行ずつ読み込んで、カウンタを使って、
Select Caseで Case 3 To 1026,1028 To 2051 などを記載。
もう1つセルの行のカウンタを用意して、Splitで、配列に1つずつ入れて
いくでしょうかね?
最後に、配列からセルへ一気に書き込むのが良いのでは?と思います。

https://jizilog.com/vba-lininputtext
    • good
    • 1

>F5にA F6にB F7にC F8にE



F5にA G5にB H5にC I5にD
じゃなくてってこと?
    • good
    • 1
この回答へのお礼

テキスト上では、カンマ区切りで4つならんでいますが
カンマ区切り毎で、Excel上には、縦列に繁栄させたいです。
言葉足らずですみません。

お礼日時:2022/03/15 16:08

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!