- 締切済み
しつもおおおおん><;
一つのフォルダ内に格納されているCSVファイルの中身を展開し、 一つのシートに全てのCSVファイルの中身を反映させる というマクロなのですが QueryTablesを使い、ファイルを読み込み処理している時、 ●1 読み込んだデータのA列目が99以上の数値だったとき そのセルは黄色で塗りつぶし、何も書かず、次のセルから読み込む。 【一つ目のCSVデータ】 A B C D 1 20 12 14 67 2 98 45 12 57 3 67 58 82 91 4 30 64 21 23 【二つ目のCSVデータ】 A B C D 1 99 12 14 67 ←この列は黄色で塗りつぶし、2行目から読み込んでいく 2 98 45 12 57 3 67 58 82 91 4 30 64 21 23 ●2 読み込んだデータのA列目が0だった場合、前回読み込んだCSVファイルの最終A列目 を優先し 二つ目のデータの1列目は無視し、2列目から読み込む 【一つ目のCSVデータ】 A B C D 1 20 12 14 67 2 98 45 12 57 3 67 58 82 91 4 30 64 21 23 【二つ目のCSVデータ】 A B C D 1 99 12 14 67 ←この列は無視して2列目から読み込む 2 98 45 12 57 3 67 58 82 91 4 30 64 21 23 というようなマクロを現在作成中なのですが 途中経過として QueryTablesの中身をこのように作ってみました。 まだVB不慣れなものでこのQueryTablesだとIF文で記述した箇所をスルーして処理を 行ってしまうので 困っております ↓↓ 'Dir関数を使って指定フォルダ内csvファイルを順次処理 MyFnm = Dir(MyFol & "*.csv") Do Until Len(MyFnm) = 0& i = i + 1 'データエリアを取得してセット先を変更 n = IIf(n = 0, 1, n + n1) '外部データ取り込みを利用 With .QueryTables.Add(Connection:="TEXT;" & MyFol & MyFnm, _ Destination:=.Range("A" & n)) .AdjustColumnWidth = False .TextFilePlatform = xlWindows .TextFileStartRow = 2 '【csvファイルのM列を読み込んだときM列目の1行目が99%以上なら空白黄 文字】 If Range("M1") >= 99 Then Range("M1").Font.ColorIndex = 3 '【読み込んだcsvファイルでM列目の1行目が0ならば無視して2行目から読 み込む】 ElseIf Range("M1") = 0 Then .TextFileStartRow = 3 '【読み込んだcsvファイルでM列目の1行目が空白ならば空白のまま】 ElseIf Range("M1") = "" Then Range("M1").FontColor = 1 Else End If .TextFileCommaDelimiter = True .Refresh False n1 = .ResultRange.Rows.Count .Parent.Names(.Name).Delete .Delete End With '次のファイルへ MyFnm = Dir() Loop Sleep (2000) End With 長々となってしまいましたがご教授よろしくお願いします><;
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- imogasi
- ベストアンサー率27% (4737/17069)
この質問だとやりたいことの丸投げではないか。丸投げはこの質問コーナーの規約違反のはず。 質問文章を読んで、コードを読み解いて、動くコードを作るのに回答者がどれだけ時間を必要とするか考えてみてほしい。 自分でやって(はやっているようだが)、疑問点を絞り、質問すること。 我流で難しいMSクエリなど使わずとも、 A。CSVファイルよ読む B。読んだデータをカンマでSplit C.エクセルのセルCells(i,j)にデータを代入 さえ知っていれば質問するほどのことでもないのでは。