[[20241224131149]] 『複数のシートに一括でフィルターをかける』(jimtan) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『複数のシートに一括でフィルターをかける』(jimtan)

はじめまして。

エクセルで複数のシートに一括でフィルターをかけるマクロを設定したいのですが上手くいきません。

どなたか教えてください。

sheet1名:顧客リスト
項目行は2行目です。項目は顧客名や住所、電話番号のリストです。
顧客名はH列です。

sheet2名:顧客担当者
項目行は1行目です。項目は顧客名や顧客担当者部署、役職、メールアドレスなどのリストです。
顧客名はK列です。

sheet1名:顧客リストのH1セルにフィルターをかけたい内容を入力すると
sheet1名:顧客リストのH列とsheet2名:顧客担当者のK列で
同時にフィルターをかけたいのですが、私がマクロの記録しか扱えません

マクロの記録で書いたものが下記です。

Sub 検索()
'
' 検索 Macro
'

   Sheets("顧客リスト").Select
    Range("H1").Select
    Selection.Copy
    ActiveSheet.Range("$A$2:$W$477").AutoFilter Field:=8, Criteria1:="=山形商事" _
        , Operator:=xlOr, Criteria2:="=山形商事"
    Sheets("顧客担当者").Select
    ActiveSheet.Range("$A$1:$Q$476").AutoFilter Field:=11, Criteria1:="=山形商事" _
        , Operator:=xlOr, Criteria2:="=山形商事"
    Sheets("顧客リスト").Select
    Range("A1").Select
    Application.CutCopyMode = False
End Sub

これだと、山形商事しかフィルターがかけれません
sheet1名:顧客リストのH1セルに入力した文字をコピーしてフィルターをかけたかったのですがどのように変更すればよいでしょうか

よろしくお願いします

< 使用 Excel:Microsoft365、使用 OS:Windows10 >


 >同時にフィルターをかけたいのですが

 やってることの意味と365はしりませんが、無理かと
 1シートづつやってください
(Copyright) 2024/12/24(火) 14:37:05

やっていることの意味は、

現状は1つのシートで管理しています。
しかし、1顧客でも担当者はメイン担当者と契約用の担当者、請求書郵送先担当者など複数います

この顧客リスト自体が他のシステムの台帳マスタにも使用しているので
1顧客は1行にしておきたいです
なので今は顧客担当者欄はひとつのセルを改行して名前も部署もアドレスも数名分全部書いています
ものすごく行が膨らんで見にくいので担当者だけ別シートに分けようと思った次第です。

でも無理なのですね。
ありがとうございます。他の方法を考えます
(jimtan) 2024/12/24(火) 15:04:56


こういうことではないのかな?
手動で出来るなら、自動化はできるかと。。。

Sub 検索()

    Dim Key As String

    Key = Sheets("顧客リスト").Range("H1").Value
    Sheets("顧客リスト").Range("$A$2:$W$477").AutoFilter Field:=8, Criteria1:=Key
    Sheets("顧客担当者").Range("$A$1:$Q$476").AutoFilter Field:=11, Criteria1:=Key
End Sub

あ、動作確認してないので上手く行かなかったら教えてください。
(まっつわん) 2024/12/24(火) 16:12:58


 >ものすごく行が膨らんで見にくいので担当者だけ別シートに分けようと思った次第です。

よくわからないけど、いい感じにリストを作ったらいいと思うけども。。。
データベースとして使うなら、1件のデータを1行にすると、
エクセルの機能が使いやすいかと。

参考URL>

第八章 正規化 ―Excel 表の困ったを解決してみる―
https://qiita.com/CodeOne/items/5df2a5e38cc4c1c90a7a
(まっつわん) 2024/12/24(火) 16:21:39


 > sheet1名:顧客リストのH列とsheet2名:顧客担当者のK列で
 > 同時にフィルターをかけたいのですが
 されようとしていることが今一つ明確にわかりません。
 オートフィルタを掛ける条件を明確にしてください。
 (1)どのシートのどの列を対象にフィルタしたいのですか?
 (2)その条件は?
    シート○の△列が、
        ○シートの□セルの文字列を含み、
        または、
        △シートの◎セルの文字列を含む。
    ものを抽出したい。
    といったように書いてください。

(xyz) 2024/12/24(火) 17:10:37


(まっつわん) さん (xyz)さん

ありがとうございます!

まさに参考にいただいた正規化の話です。
今回は「第一正規形」で充分、1つのセルには1つの値しか収めないことにして
顧客担当者は別シートで管理したいのです。

教えていただいたコードでフィルターはかかりました。
でも「指定した条件と等しい」なのですね。

(1)どのシートのどの列を対象にフィルタしたいのですか?
(2)その条件は?
顧客リストシートのH列と顧客担当者シートのK列を対象にし
顧客リストシートのH1セルの文字列を含むものを抽出したいです。

オートフィルターのマクロ入門読みました
https://excel-ubara.com/excelvba2/EXCELVBA018.html

山形だけで検索したときに山形商事と山形建設も出てきてほしいので
orの条件で抽出したいのと、
フィルターがかかっている状態でマクロを実行すると正しい結果が出ないので
先にフィルター解除を入れたいです。

自分でも理解できそうなので一度やってみます。

躓いたらまた相談させてください

(jimtan) 2024/12/24(火) 17:46:28


 >顧客リストシートのH列と顧客担当者シートのK列を対象にし
 >顧客リストシートのH1セルの文字列を含むものを抽出したいです。

 顧客リストシートのH1セルの文字列を仮に"AA"とすると、
 ・顧客リストシートのH列のAAを含むものを抽出する
 ・顧客担当者シートのK列のAAを含むものを抽出する
 という二つのオートフィルタを実行するということですか?

 一つのセルに複数担当者を持っているという問題の解決方向と関係するんですか?

(xyz) 2024/12/24(火) 17:59:07


Criteria1:=Key & "*"

これでいいのかな?
まずは手動で出来るようになれば、
マクロの記録でコードを探れるかと思います。

http://officetanaka.net/excel/excel2010/018.htm

「エクセル オートフィルター 前方一致」で検索しました。
(まっつわん) 2024/12/25(水) 08:02:51


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.