[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『別のシートの3行目のデータを抽出してメインシートでリストを作成したい』(syoko)
お世話になっております。
みだしのことについてですが、デスクトップの画面に顧客情報を抽出したファイルが50個あります。
ファイル名は1.csv〜50.csvと名前を付けています。
ファイルの中身
[A1]データを抽出した日付(1〜50のファイルすべて同じ日付です)
[A2]整理番号[B2]登録番号[C2]名前[D2]住所[E2]電話番号~~省略~~[AE2]その他情報
2行目に、項目名がありAE2のセルまで項目が入力されています。
[A3]11320001[B3]8024[C3]田中雄一[D3]東京都千代田区○ビル201[E3]08021451245~~省略~~[AE2]特になし
3行目に項目の顧客情報が入力されています。
【実現したいこと】
1.csvファイルの4行目以降に、2.csv〜50.csvファイルの3行目のデータのみ
抽出したデータを貼り付けて、リストを作りたいです。
< 使用 Excel:Excel2013、使用 OS:Windows10 >
とりあえずのマクロのサンプルです。 出力は 1.csv ではなく all.csv というファイルにしています。
Sub LoadCSV50() Dim fso Set fso = CreateObject("Scripting.FileSystemObject")
Dim deskTopPath deskTopPath = CreateObject("WScript.Shell").SpecialFolders("Desktop")
Dim msg msg = ""
Dim dstPath '// 出力ファイルパス dstPath = deskTopPath & "\all.csv"
Dim dstCSV Set dstCSV = fso.CreateTextFile(dstPath, True)
Dim csvPath
Dim csvNum For csvNum = 1 To 50 csvPath = deskTopPath & "\" & csvNum & ".csv" If fso.FileExists(csvPath) = True Then With fso.OpenTextFile(csvPath) If csvNum = 1 Then dstCSV.WriteLine .ReadLine() dstCSV.WriteLine .ReadLine() dstCSV.WriteLine .ReadLine() Else .ReadLine '// 空読み .ReadLine '// 空読み dstCSV.WriteLine .ReadLine() End If End With Else msg = msg & vbNewLine & csvNum & ".csv" If csvNum = 1 Then Exit For End If Next
If msg = "" Then msg = "処理が完了しました。" Else msg = "下記のファイルがありません" & msg End If MsgBox msg End Sub
(QS) 2020/10/16(金) 11:35
すごいですね!完璧に動作しました。
C&Pも覚悟していましたが、処理も一瞬で終わり感動しました。
VBAに関してほとんど無知なので、勉強のためにもしよろしければ
教えてほしいのですが、、
If csvNum = 1 Then
dstCSV.WriteLine .ReadLine() dstCSV.WriteLine .ReadLine() dstCSV.WriteLine .ReadLine()
上記は、1〜3行目をall.csvファイルに書き込む
読み込んだファイルが1.csv以外の数字であれば
Else
.ReadLine '// 空読み .ReadLine '// 空読み dstCSV.WriteLine .ReadLine()
1行目、2行目は空読み
3行目のみ読み込んで、all.csvファイルに書き込み。
という認識であっていますか?
.readlineというのは、行数を指定できないので
あえて空読みをしているのでしょうか?
(syoko) 2020/10/16(金) 13:35
うまく動いたようで何よりです。 ご質問の点は推測されているとおりです。
一度に読み込んで行を処理する方法もありましたが、3行だったので今回は行単位で読み込みました。 行を指定するのであれば、
AllLines = Split(.ReadAll(),vbNewLine) のように、全体を読み込んで改行コードで分割して配列にしておけば AllLines(0) のように行を指定できます。
ただインデックスが 0 からなので、行の指定は(行-1) を指定する必要がありますが、指定する行が 多い場合はこの方が良いかもしれません。 (QS) 2020/10/16(金) 14:22
これからも他の業務で使えそうなので、試行錯誤しながら応用してみます!
本当にありがとうございました!
(syoko) 2020/10/16(金) 16:54
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.