• 締切済み

エクセル フィルタで抽出したデータごとに別ファイルを作成したい(マクロ)

エクセルのフィルタで抽出したデータをタイトル行ごとコピーし、別ファイルを作る、という作業が大量にあります。これをマクロ化したいのですが良い方法はありますか? 出来ればシートに抽出条件の名前を付けて、そのファイル名で保存、までできたらありがたいです。

みんなの回答

  • mitarashi
  • ベストアンサー率59% (574/965)
回答No.2

非連続のセル範囲を、タブ区切りテキストファイルに書き出す関数を作成して、先日回答した事がありますので、オートフィルターの事例でテストしてみました。ご参考までに載せます。なぜタブ区切りテキストファイルか?答えはプログラムが楽だから。ご質問が抽象的なので、この様なやり方で、条件設定は、お好きな様にループを回して下さいとしか言えません。 Sub test() Dim targetRange As Range Dim extractedRange As Range Set targetRange = ActiveSheet.Range("a1").CurrentRegion If ActiveSheet.AutoFilterMode = False Then targetRange.AutoFilter targetRange.AutoFilter Field:=1, Criteria1:="あ" Set extractedRange = targetRange.SpecialCells(xlCellTypeVisible) Call saveToText(extractedRange, ThisWorkbook.Path & "\" & "test.txt") targetRange.AutoFilter Field:=1 End Sub Private Sub saveToText(targetRange As Range, filepath As String) Dim fso As Object Dim i As Long, j As Long Dim oneLine As String Dim area As Range Set fso = CreateObject("Scripting.FileSystemObject") With fso.CreateTextFile(filepath) For Each area In targetRange.Areas For i = 1 To area.Rows.Count oneLine = "" For j = 1 To area.Columns.Count If oneLine = "" Then oneLine = area.Cells(i, j).Text Else oneLine = oneLine & vbTab & area.Cells(i, j).Text End If Next j .writeLine oneLine Next i Next area .Close End With Set fso = Nothing End Sub

noname#63206
質問者

お礼

ありがとうございます。試してみますね。

  • end-u
  • ベストアンサー率79% (496/625)
回答No.1

>良い方法はありますか? そういったニーズはよくありますから、 一番手っ取り早いのは、そういうフリーなソフトを検索するのが早いんじゃないでしょうか。 http://search.vector.co.jp/search?query=excel+%95%AA%8A%84 ご自分でお作りになられるなら、AdvancedFilterメソッドが効率的です。 AdvancedFilterメソッドを使って、抽出キーとなる列から重複を除き項目を抜き出し、 抽出条件グループを作業列につくります。 さらにその抽出条件グループをLoopさせて、 AdvancedFilterメソッドで新規別Bookにデータを抽出していく事を繰り返せば良いです。

noname#63206
質問者

お礼

ありがとうございました。

関連するQ&A

専門家に質問してみよう