前提・実現したいこと
VBAを利用してExcelの値をCSVに出力するプログラムを作成しています。
オートフィルターを利用してB列の絞込を行いながら順番に出力していきたいです。
例えば下記のような表があったときは列2の情報(東京都・愛知県・大阪府)で絞込を順に行い、別々のCSVとしてその行の情報を出力したいと思っています。
列1 | 列2 | 列3 | 列4 | 列5 |
---|---|---|---|---|
1 | 東京都 | Aさん | 女 | 23歳 |
2 | 愛知県 | Bさん | 男 | 53歳 |
3 | 東京都 | Cさん | 男 | 29歳 |
4 | 大阪府 | Dさん | 女 | 31歳 |
5 | 愛知県 | Eさん | 男 | 48歳 |
6 | 大阪府 | Fさん | 女 | 12歳 |
###実現イメージ
東京都.csv
列1 | 列2 | 列3 | 列4 | 列5 |
---|---|---|---|---|
1 | 東京都 | Aさん | 女 | 23歳 |
3 | 東京都 | Cさん | 男 | 29歳 |
愛知県.csv
列1 | 列2 | 列3 | 列4 | 列5 |
---|---|---|---|---|
2 | 愛知県 | Bさん | 男 | 53歳 |
5 | 愛知県 | Eさん | 男 | 48歳 |
大阪府.csv
列1 | 列2 | 列3 | 列4 | 列5 |
---|---|---|---|---|
4 | 大阪府 | Dさん | 女 | 31歳 |
6 | 大阪府 | Fさん | 女 | 12歳 |
発生している問題・エラーメッセージ
実際にコードを書いて出力したところ、各県の名称のファイルが出力されたものの、セルの絞込がクリアできていないのか、
東京都⇒東京都のみのデータ(想定通り)
愛知県⇒東京都と愛知県のデータ(想定通りではない)
大阪府⇒東京都と愛知県と大阪府のデータ(想定通りではない)
上記のように出力されてしまいます。
セルのクリアがうまくいっていないか、検索で変数を入れるところがうまく実装できていないかと思うのですが、VBAは初心者でありよくわからなかったので、皆様のお力をお借りしたいと思っています。
よろしくお願いいたします。
該当のソースコード
VBA
1 2 Dim cmax 3 Dim csvFile As String 4 Dim i As Integer 5 6 SaveDir = ThisWorkbook.Path 7 8 'B列の最終行の数を取得 9 cmax = Worksheets("active").Range("B65536").End(xlUp).row 10 11 12 13 '最終行まで繰り返す 14 For i = 2 To cmax 15 16 Dim atai As String 17 'ataiにフィルターの絞込を行っている単語を入れる 18 If atai <> Worksheets("active").Range("B" & i).Value Then 19 atai = Worksheets("active").Range("B" & i).Value 20 End If 21 22 '「フィルターの絞込を行っている単語名.csv」の名称のファイルをカレントディレクトリに作成する 23 csvFile = SaveDir & "\" & atai & ".csv" 24 25 '高さをカウント 26 lngRowMax = Range("$A$" & Rows.Count).End(xlUp).row 27 28 29 '書き込みを行うファイルを開く 30 Open csvFile For Output As #1 31 32 'フィルターの絞込がされていたら解除する 33 If ActiveSheet.FilterMode = True Then 34 ActiveSheet.ShowAllData 35 End If 36 37 'ataiの単語でB列のフィルター動作させる 38 ActiveWorkbook.Worksheets("active").Range("A2:E" & cmax).AutoFilter Field:=2, Criteria1:=atai 39 40 Dim j As Long 41 For j = 1 To 5 42 '1行目の各列のタイトルを書き込む 43 Print #1, ActiveSheet.Cells(1, j).Value&; ","; 44 Next j 45 '改行 46 Print #1, vbCr; 47 48 Dim c As Long, k As Long 49 50 For c = 2 To lngRowMax 51 For j = 1 To 5 52 '絞り込んだデータを基にCSV書き込みを行う 53 Print #1, ActiveSheet.Cells(c, j).Value&; ","; 54 Next j 55 '改行 56 Print #1, ActiveSheet.Cells(c, j).Value & vbCr; 57 Next c 58 'ファイルを閉じる 59 Close #1 60 61 '次の行に行く 62 Next i 63 64 'フィルターの絞込を解除する(全件表示) 65 If ActiveSheet.FilterMode = True Then 66 ActiveSheet.ShowAllData 67 End If
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。