MENU

複数のシートのフィルター結果を、1枚のシートにまとめる

無料アプリで、すぐにエクセルVBAマクロを作成できます。

例として、「複数のシートのフィルター結果を、1枚のシートにまとめる」VBAマクロを作成します。

(ページの末尾に、VBAコード掲載)

事例

下の例は、「Sheet1」をのぞいた、各シートを「りんご」でフィルターし、各フィルター結果を「Sheet1」に貼り付けています。

マクロを実行すると、「Sheet1」に、フィルター結果がまとまりました。



できました(^^)/

アプリの設定

アプリのトップページ

 ⇒▼並べ替え・フィルター

 ⇒◆フィルター結果をコピー/削除/色付け 条件1つ

【ポイント】

■ 「▼複数のシートで実行する」をひらき、「上記(例:Sheet1, Sheet2)のシートを、除いて実行」を選びます。

表示されるVBAコード 

アプリで作成されたコードを、VBE画面に貼り付ければ、マクロの完成です。

 
Sub デモ_1_シートオプションあり() 'フィルター条件1つ
Dim 除外配列 As Variant, 対象配列 As Variant, 数 As long
Dim 除外 As Object, 対象 As Object, 配列 As Variant
Set 除外辞書 = CreateObject("Scripting.Dictionary")
Set 対象辞書 = CreateObject("Scripting.Dictionary")
'除外配列に、除外対象を代入
配列 = Split("Sheet1", ",")
除外配列 = 配列
For 数 = 0 To UBound(除外配列)
   除外辞書.Add 除外配列( 数 ), "除外"
Next 数
'シート名が除外辞書になければ、対象辞書に加える
Dim シート As Worksheet
For Each シート In Worksheets
   If Not 除外辞書.Exists(シート.Name) Then
       対象辞書.Add シート.Name, "対象"
   End If
Next シート
'対象のキーを、配列に入れる
対象配列 = 対象辞書.keys
'配列に入れた対象に、順次処理をする
For Each シート In Worksheets(対象配列)
    Call デモ_1(シート)
Next
End Sub


Sub デモ_1(シート As Worksheet) 'フィルター条件1つ     
 Application.ScreenUpdating = False ' 画面描画を停止
Application.DisplayAlerts = False  ' 警告表示を停止
Dim  セル範囲 As String, セル As Range, 右下セル As String
シート.Select  
'◆最終行を取得し、セル範囲を決める          
Range("a1:d1").CurrentRegion.Select
右下セル = Cells(Selection.Row+ Selection.Rows.Count-1, Range("d1").Column).Address(False, False)
セル範囲 = "a1" & ":" & 右下セル 
Range(セル範囲).Select
Call デモ_1_メイン処理 (セル範囲) 
Application.DisplayAlerts = true   ' 警告表示を再開
Application.ScreenUpdating = True  ' 画面描画を再開
End Sub  


Sub  デモ_1_メイン処理 (セル範囲 As String )
Application.Calculation = xlCalculationManual '自動計算を停止
'フィルタ
Range(セル範囲).AutoFilter Field:= 1, Criteria1:="=りんご"
'コピー
Range(セル範囲).Offset(1, 0).Resize(Selection.Rows.Count - 1).Copy
 ActiveSheet.AutoFilterMode = False
Sheets("Sheet1").Select
'◆上で始まる表の最終行の下に貼り付け
Range("a1").Select  
Dim 左端列 As Long, 下端行 As Long, 相手セル as String
左端列 = ActiveCell.Column
下端行 = Selection.CurrentRegion.Row + Selection.CurrentRegion.Rows.Count - 1
相手セル = Cells(下端行, 左端列).Address(False,False)
If Range(相手セル).Value <> "" Then
    相手セル = Cells(下端行 + 1, 左端列).Address(False,False)
End If   
Range(相手セル).Select           
Selection.PasteSpecial Paste:=xlPasteAll
Application.CutCopyMode = False
   Application.Calculation = xlCalculationAutomatic ' 自動計算を再開
End sub    

マクロを使うメリット

手作業で数分かかる作業が、1秒で終わります。

ぜひ、アプリをご利用ください。

 

アプリはこちらから↓↓↓↓