
以下のようなCSVファイルが複数あります。
VBAを実行するとファイル選択画面になり、複数のCSVファイルを選択して、
Sheet1に順番に読み込んでその際、2個目以降のCSVファイルでは1行目の項目名を破棄して、
2行目からのデータのみ繋げていくようにしたいです。
その時にG列の文字化けを防ぐため書式を文字として読み込み、
最終的にE列の2行目以降のデータにて昇順で並べ替えしたいです。
各CSVファイルには約1,500データほどあります。
一度に選択するCSVファイルは5~20個ほどです。
VBAでのプログラムを教えて頂けないでしょうか。
CSVファイル例
A B C D E F G
1 顧客コード フリガナ 氏名 敬称 郵便番号 住所1 住所2
2 000123 〇〇〇〇 〇▲ 様 256-0000 〇〇県 1-3-5
3 000124 ▲□▲〇 ◇● 様 258-3311 □▲県 2-6-9
4 000180 〇▲◇▲ ●▲ 御中 258-3325 ●□県 3-8-2
5 000186 〇●▲〇 ●〇 様 258-8236 〇■県 2-4-4
・
・
・
No.3ベストアンサー
- 回答日時:
まあ、こんなところでしょうか?
ファイル選択・ダイアログは、マルチセレクトですから、複数のファイルを選べます。
'//標準モジュール
Sub ImportCSV_Sort()
Dim Fnames As Variant
Dim fn As Variant
Dim FNo As Integer
Dim TextLine As String
Dim i As Long, j As Long, b As Long
Dim buf
Dim flg As Boolean
Dim LastRow As Long
Fnames = Application.GetOpenFilename _
("CSVFile (*.csv), *.csv", 1, "ファイルインポート", , True)
If VarType(Fnames) = vbBoolean Then Exit Sub
For Each fn In Fnames
b = Cells(Rows.Count, 1).End(xlUp).Row
If b > 2 Then flg = True
'--
FNo = FreeFile()
Open fn For Input As #FNo
If b = 1 Then
i = 0 '先頭から
Else
i = 1
End If
Do While Not EOF(FNo)
Line Input #FNo, TextLine
buf = Split(TextLine, ",")
For j = 1 To UBound(buf) + 1
If j <> 7 Then
Cells(b + i, j).Value = buf(j - 1)
Else
Cells(b + i, j).Value = "'" & buf(j - 1) 'プレフィックス文字列書式
End If
Next j
If flg And i = 1 Then
i = 0 '行を飛ばす
flg = False
End If
i = i + 1
Loop
Close #FNo
Next fn
If MsgBox("ソートしますが、よろしいですか?", vbOKCancel) = vbCancel Then Exit Sub
ActiveSheet.Sort.SortFields.Clear
With ActiveSheet.Range("A1").CurrentRegion
.Sort Key1:=.Cells(1, 5), Order1:=xlAscending, _
Header:=xlYes, OrderCustom:=1, MatchCase:=False, _
Orientation:=xlTopToBottom, SortMethod:=xlPinYin
End With
End Sub
No.2
- 回答日時:
VBA使わないでやるやり方です。
(ぜんぜん質問の趣旨と違っててごめんなさい)1.csvファイルをひとつのフォルダにまとめる。例えばc:\work
2.コマンドプロンプトを開く
3.上記のフォルダに移動する。 (cd c:\work)
4.コピーコマンドでcsvをひとつのテキストファイルにまとめる。(copy *.csv csvfile.txt)
5.できたテキストファイルをExcelで開く。列の書式を指定する。
6.ソートして、重複するヘッダ項目の行を削除する。
No.1
- 回答日時:
質問が多すぎて、またどこが分からないのか分かりませんねぇ。
http://www.moug.net/tech/exvba/0060086.html
このあたりを参考にしてみてはいかがでしょうか?
私なら
①選択ファイル数分ループ
②1ファイル目のみ全件読み込み、2ファイル目以降は一行目は読み飛ばしながら、あらかじめ用意した配列変数に入れる
③あとは読み込んだファイルをシートに出力
④書式やソートなどを最後に。
こんな感じでしょうか…。
返事が遅くなり申し訳ありません。
ご指摘の通り、内容が複雑すぎてました。
ご提案内容を参考にもう一度自分で考えてみます。
ご回答ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
複数のCSVファイルを横に並べて...
-
エクセルの指数を無効にしたい
-
excelインポート時の「実行時エ...
-
複数のcsvファイルを1つのEXCEL...
-
二つのCSVファイルを照らし合わ...
-
EXCELにcsv形式の外部データを...
-
【VBA初心者】同じフォルダ内の...
-
datファイル→csvファイル→datフ...
-
Excel VBAを使った複数のCSVフ...
-
VBAでCSVの1行目だけを書き換え...
-
【エクセル VBA】CSVファイルの...
-
CSVファイルの結合(重複データ...
-
複数個のascファイルを1つ...
-
大量のCSVデータを1つのエ...
-
同じ形のCSVファイルを複数同時...
-
エクセルでcsvデータを自動読み...
-
「ほかのアプリケーションを無...
-
EXCELで外部データの取り込みが...
-
複数のデータ系列の線の太さを...
-
VBAを一度起動するとずっと出て...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
複数のCSVファイルを横に並べて...
-
excelインポート時の「実行時エ...
-
「ほかのアプリケーションを無...
-
VBAでCSVの1行目だけを書き換え...
-
エクセルの指数を無効にしたい
-
複数のcsvファイルを1つのEXCEL...
-
EXCELにcsv形式の外部データを...
-
Excel2002のおせっかい機能につ...
-
複数個のascファイルを1つ...
-
Excel VBAを使った複数のCSVフ...
-
OUTLOOKのスケジュール...
-
Excelで複数の他のファイルから...
-
二つのCSVファイルを照らし合わ...
-
VB及びエクセルのVBAにて、
-
海外の印刷所を使って入稿する...
-
エクセル2003 CSVファイルの取...
-
エクセルのcsvで、12e3を入れる...
-
大量のCSVデータを1つのエ...
-
各ファイル中データの張付け操...
-
エクセルでcsvデータを自動読み...
おすすめ情報