- ベストアンサー
エクセルのマクロ 複数条件について質問です
- エクセルのマクロを使用して、複数の条件に基づいて検索を行い、セルを赤で塗りつぶす方法について質問があります。
- 具体的には、C3セルに入力された文字列とD3セル、E3セルに入力された文字列とを比較して、C11からC1000のセルに該当するものを赤く塗りつぶしたいです。
- また、C3セル、D3セル、E3セルの3つのセル全てに文字が入力された場合にマクロを実行するように設定したいと思っています。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
えーと・・ お望みの処理を「マクロを使わず」にあえて手作業で行う場合、 あなたならどうしますか? 「複数条件で検索」しか思いつかず、答えに近づけないなら、 おそらく、VBA以前に基本機能の復習をオススメします。 「検索」機能は複数の条件を受け付けないので、 お望みの処理には不向きです。 思いつく方法は、例えば (1)全行に対し、C・D・E列を3行目と照らし合わせ、 全部合致していたら塗りつぶす。 (2)C列で検索をかけ、当たった行のD・E列を照らし合わせ、 合致していたら塗りつぶす。 (3)C・D・E列をキーにフィルタをかけ、 抽出されたものを塗りつぶし、フィルタを解除する。 他にもありますが、おそらくこのどれか、でしょう。 「普通」という言葉を押し付けるのは好みではないのですが、 複数の条件で対象を絞り込みたいなら、普通はフィルタ機能、 つまり(3)を選択するような気がします。 ちなみにフィルタは With 対象範囲 .AutoFilter .AutoFilter Field:=1, Criteria1:=抽出条件1 .AutoFilter Field:=2, Criteria2:=抽出条件2 ・ ・ End With こんな感じで使えます。 ま、「マクロの記録」してみればわかりやすいですね。 > C3、D3、E3の3つ全てのセルに入力されたらマクロが実行 Worksheet_Changeイベントに、指定してやれば良いですね。 理解しやすいやり方を挙げるとすると If Application.CountA(Range("C3:E3")) = 3 Then ~処理~ End If でしょうか。 そんなわけで、今日は大サービスな私なら Private Sub Worksheet_Change(ByVal Target As Range) ' 入力したセルが3行目で、C~Eがすべて埋まっていたら実行 If Target.Row = 3 And Application.CountA(Range("C3:E3")) = 3 Then Application.ScreenUpdating = False ' 既にフィルタがかかっていたら解除 Set MF = ActiveSheet.AutoFilter If Not MF Is Nothing Then Range("C10").AutoFilter ' C列のデータがある範囲の最終行を調べる MR = Cells(Rows.Count, 3).End(xlUp).Row ' C列の塗りつぶしを一度解除 Columns("C:C").Interior.Pattern = xlNone ' C~E列にフィルタ処理、それぞれ3行目を基にフィルタ With Range("C10:E" & MR) .AutoFilter .AutoFilter Field:=1, Criteria1:=Range("C3") .AutoFilter Field:=2, Criteria1:=Range("D3") .AutoFilter Field:=3, Criteria1:=Range("E3") End With ' 抽出された行のC列に塗りつぶし(赤) With Range(Range("C11"), Range("C11").End(xlDown)).Interior .Pattern = xlSolid .ColorIndex = 3 End With ' フィルタを解除 Range("C10").AutoFilter End If Application.ScreenUpdating = True End Sub くらいかなぁ、と思いますよ。 パソコンと表のサイズに依りますが1000行程度なら一瞬ですよ。
その他の回答 (1)
- imogasi
- ベストアンサー率27% (4737/17070)
VBAうんぬんする前に、エクセルの基本的なつかいかたが認識されてない質問と思う。 模擬のデータ実例を数行挙げて、したいことを説明すべきだ。<==希望 ーー 本件ではFind法を使っているようだが、結構理解がむつかしいと思う(FindNextとの関連で) VBAコード(どの処理方法を使うかでガラッと変わる)など、内容やデータ数で採用処理ロジック(これのよい例を教えてもらえるかもしれないのが、このコーナのよいところと思う)でどう転ぶかわからない。初心者が自分の作った、(A列だけの例での、)例を挙げなくても、シートデータの実例と、したいこと(結果がどうなってほしいか)が読者に伝わるように質問表現を書くべきだ。一応回答者はVBAコード作成のベテランと仮定して考える。 ーー エクセルは、通常の使い方は、多列(A,B,C,D列など)にデータがあって、A列、B列、C列、D列などには異なる属性の、また1つの列には、同じ属性のデータが並ぶのが標準。 例えば A列 B列 C列 D列 産地国 品物 等級 扱い 中国 小麦 AA C社 ーーー そういう場合に 産地国 品物 等級 扱い を具体的に決めて、セルに指定して、該当のデータ(セル単位。複数が知りたい)を探す希望が多い。 また行単位で考える場合が多いはず。 エクセルは行単位で1単位のデータにする使い方が標準だ。 ーー 質問は上記の、そういう見地が入っていないようなので、質問内容がよくわからない。 持ちろん上記の使い方をせずに、単語的な言葉を散りばめて、データにするのももありえるが。 ーー 各セルには、文章的な文字データが入っているのか? WEBの表や記事を張り付けているのか。 ーー 最低でもC3セル条件を満たすということの状況を知りたい。