コメントありがとうございます! 「フィルタされないまま全てのデータが反映される」というのは、難しいですね(^^;)再現ができませんでした。 参考にされているVBAコードは、次のVBAコードになりますでしょうか。 Sub TEST4() '配列を作成 Dim A A = Array("東京", "大阪", "名古屋", "福岡") For i = 0 To 3 '支店でフィルタ Worksheets("Sheet1").Range("A1").AutoFilter 2, A(i) 'シートを追加 Worksheets.Add after:=ActiveSheet ActiveSheet.Name = A(i) 'シート名を変更 'フィルタしたデータを、別シートに転記 Worksheets("Sheet1").Range("A1").CurrentRegion.Copy ActiveSheet.Range("A1") 'フィルタを解除 Worksheets("Sheet1").Range("A1").AutoFilter Next End Sub 以下のブログにて紹介しているVBAコードになります。 daitaideit.com/vba-worksheets-workbooks/ また、表のデータとしては、ブログに記載のデータとなりますでしょうか。こんな感じ↓のデータでしょうか? No 支店 商品 1 東京 A 2 大阪 B 3 東京 C 4 大阪 D 5 名古屋 E 6 福岡 F 7 名古屋 G 8 東京 H 9 沖縄 I とりあえずのアプローチとしては、次のようなものが考えられます。 アプローチ① 現在、最初のシートに対してフィルタをかけている「検索値」で、AutoFilterを使って、シンプルにフィルタをかけてみると、フィルタがかかりますでしょうか。かかる場合は、検索値に問題がなくて、かからない場合は、検索値に問題がありそうです。 アプローチ② F8を使ってVBAコード毎に実行して、「.AutoFilter」のVBAコードを含め、実行する手順を確認してみるとどうでしょうか。もしかしたら、「.AutoFilter」のVBAコード以外で、オートフィルタを全表示させてしまっているなどの意図しない箇所が見つかるかもしれません。 アプローチ③ ブックのオブジェクトを指定していないので、別ブックを開いている場合は、意図しない動作となる可能性がありますので、別ブックを閉じて実行するとどのようになりますでしょうか。
コメントありがとうございます! ちょっと原因はわからないんですけど、コピーする際に、「SpecialCells」を使ってみるとどうでしょうか。 コピーするVBAコードのところで、「CurrentRegion」のあとに、「SpecialCells(xlCellTypeVisible)」を追加しています。 Sub TEST4_2() '配列を作成 Dim A A = Array("東京", "大阪", "名古屋", "福岡") For i = 0 To 3 '支店でフィルタ Worksheets("Sheet1").Range("A1").AutoFilter 2, A(i) 'シートを追加 Worksheets.Add after:=ActiveSheet ActiveSheet.Name = A(i) 'シート名を変更 'フィルタしたデータを、別シートに転記 Worksheets("Sheet1").Range("A1").CurrentRegion.SpecialCells(xlCellTypeVisible).Copy ActiveSheet.Range("A1") 'フィルタを解除 Worksheets("Sheet1").Range("A1").AutoFilter Next End Sub
コメントありがとうございます! おっしゃるとおりで、今回の場合でいくと「xlFilterCopy」を使うと、次のように、かなりシンプルなVBAコードになりますね(^^) Dim A Set A = Sheets("Sheet1").Range("A1").CurrentRegion.Columns(2) A.AdvancedFilter Action:=xlFilterCopy, CopytoRange:=Range("E1"), Unique:=True 存じておりませんでした(^^;) 勉強になります!コメントありがとうございます♪
実務でやりたかったことのヒントになりそうです、
チャレンジしたいと思います。
ありがとうございます。
アップありがとうございました。これを使うと自分のやりたいこと、ずばり出来そうです!めっちゃ助かります❗️
コメントありがとうございます!
お役に立てたようで何よりです。
これからも、お役に立てるようがんばっていきます(^^)
こちらのマクロを探していました!
大変便利で重宝しています♪
ひとつ上手くいかないのが、マクロを実行して最初のシートだけフィルタ機能が上手くいかず、フィルタされないまま全てのデータが反映されます。次のシートからは成功するのですが…。何かわかりますでしょうか?
コメントありがとうございます!
「フィルタされないまま全てのデータが反映される」というのは、難しいですね(^^;)再現ができませんでした。
参考にされているVBAコードは、次のVBAコードになりますでしょうか。
Sub TEST4()
'配列を作成
Dim A
A = Array("東京", "大阪", "名古屋", "福岡")
For i = 0 To 3
'支店でフィルタ
Worksheets("Sheet1").Range("A1").AutoFilter 2, A(i)
'シートを追加
Worksheets.Add after:=ActiveSheet
ActiveSheet.Name = A(i) 'シート名を変更
'フィルタしたデータを、別シートに転記
Worksheets("Sheet1").Range("A1").CurrentRegion.Copy ActiveSheet.Range("A1")
'フィルタを解除
Worksheets("Sheet1").Range("A1").AutoFilter
Next
End Sub
以下のブログにて紹介しているVBAコードになります。
daitaideit.com/vba-worksheets-workbooks/
また、表のデータとしては、ブログに記載のデータとなりますでしょうか。こんな感じ↓のデータでしょうか?
No 支店 商品
1 東京 A
2 大阪 B
3 東京 C
4 大阪 D
5 名古屋 E
6 福岡 F
7 名古屋 G
8 東京 H
9 沖縄 I
とりあえずのアプローチとしては、次のようなものが考えられます。
アプローチ①
現在、最初のシートに対してフィルタをかけている「検索値」で、AutoFilterを使って、シンプルにフィルタをかけてみると、フィルタがかかりますでしょうか。かかる場合は、検索値に問題がなくて、かからない場合は、検索値に問題がありそうです。
アプローチ②
F8を使ってVBAコード毎に実行して、「.AutoFilter」のVBAコードを含め、実行する手順を確認してみるとどうでしょうか。もしかしたら、「.AutoFilter」のVBAコード以外で、オートフィルタを全表示させてしまっているなどの意図しない箇所が見つかるかもしれません。
アプローチ③
ブックのオブジェクトを指定していないので、別ブックを開いている場合は、意図しない動作となる可能性がありますので、別ブックを閉じて実行するとどのようになりますでしょうか。
@@IT-gx8sf
早々に返信ありがとうございます!
記載のあるコードに違いは見当たらないのですが、アプローチ①、②、③をやってみます!
@@IT-gx8sf
返信が遅れてしまい申し訳ありません。
F8でひとつひとつ実行しましたら、フィルタまではうまくいくのですが、別シート作成→シート名を変更→貼り付け(ここで全データ貼り付け)のところに原因があるかと思います。でも2枚目のシートからは問題なく実行でき、フィルタも問題ない状態ですね…
コメントありがとうございます!
ちょっと原因はわからないんですけど、コピーする際に、「SpecialCells」を使ってみるとどうでしょうか。
コピーするVBAコードのところで、「CurrentRegion」のあとに、「SpecialCells(xlCellTypeVisible)」を追加しています。
Sub TEST4_2()
'配列を作成
Dim A
A = Array("東京", "大阪", "名古屋", "福岡")
For i = 0 To 3
'支店でフィルタ
Worksheets("Sheet1").Range("A1").AutoFilter 2, A(i)
'シートを追加
Worksheets.Add after:=ActiveSheet
ActiveSheet.Name = A(i) 'シート名を変更
'フィルタしたデータを、別シートに転記
Worksheets("Sheet1").Range("A1").CurrentRegion.SpecialCells(xlCellTypeVisible).Copy ActiveSheet.Range("A1")
'フィルタを解除
Worksheets("Sheet1").Range("A1").AutoFilter
Next
End Sub
@@IT-gx8sf
出来ました!ありがとうございます!
すごいですね!助かりました🙇♂️
質問です。TEST5の重複しないリスト作成の際、xlFilterInPlaceを使用されてますが、xlFilterCopyではダメなのでしょうか?
コメントありがとうございます!
おっしゃるとおりで、今回の場合でいくと「xlFilterCopy」を使うと、次のように、かなりシンプルなVBAコードになりますね(^^)
Dim A
Set A = Sheets("Sheet1").Range("A1").CurrentRegion.Columns(2)
A.AdvancedFilter Action:=xlFilterCopy, CopytoRange:=Range("E1"), Unique:=True
存じておりませんでした(^^;)
勉強になります!コメントありがとうございます♪
いつも役立つ動画、感謝しております。これからも動画のアップお願いします。(o^^o)