![](https://blogimg.goo.ne.jp/user_image/68/87/7dd93edbea622a489337558d46ebe67a.jpg)
Excelのデーターベースで、フィルター機能によりデーターの抽出が簡単に出来ます。
複数項目の条件を検索することで、絞り込んだデーターも抽出できます。
パソコンのボランティア仲間から次のような質問がきました。
項目で絞り込んで抽出するのではなく、2項目の内のどちらかの条件を満足していれば抽出したい。
そんなときはどうするのか?
2項目の内のどちらかがOKなデーターを抽出するフィルター設定はどうする?どこにある?
エクセルには無いと思う。(Accessならできるのかどうか、私はAccessを知らない)
マクロでは条件による分岐処理が出来ない。
Excel VBA ならば、できるはず。(VBAを少し扱えるので挑戦してみよう)
VBA作成から3~4か月遠ざかっているので、かなり手間取ってしまった。
やっとできたのが次のVBAです。私にできるのはこれくらいでした。
フィールド名(列見出し)を次のようにしました。
B3セルは「番号」 C3セルは「患者名」 E3セルは「病名」 F3セルは「担当者名」
H2セルには 指定条件の「病名」を入力しておきます。
I2セルには 指定条件の「担当者名」を入力しておきます。
ボタンを作成して、「病名担当者フィルター」と「全体表示する」を実行してみました。
希望通りの抽出ができました。
表全体の再表示もOKです。
普通の人ならば数分で出来るVBAを、いろいろ調べながら何時間もかけて作りました。
時々は作成しておかないと、簡単なことでも忘れてしまいます。
良い勉強をさせてもらいました。
以下は私の作ったVBAです。
( Else: Exit Sub が必要かどうか分からなかったが、問題なかったのでそのままにしました)
Sub 病名担当者フィルター()
Range("C4").Select
Do While ActiveCell.Value <> "" 'C列のセルが空白になるまで繰り返す
If ActiveCell.Value = "" Then Exit Sub 'セルが空白になったら処理を終了する
If ActiveCell.Value <> "" Then 'セルが空白でないときは、次の通り処理を行う
If ActiveCell.Offset(0, 2).Value = Range("H2").Value Or _
ActiveCell.Offset(0, 3).Value = Range("I2").Value Then
' 2列右のセルがH2セルと同じかあるいは(Or)
' 3列右のセルがI2セルと同じ場合は
ActiveCell.Offset(1, 0).Select
ElseIf ActiveCell.Offset(0, 2).Value <> Range("H2").Value And _
ActiveCell.Offset(0, 3).Value <> Range("I2").Value Then
' 2列右のセルがH2セルと異なり かつ(And)
' 3列右のセルがI2セルと異なる場合は
ActiveCell.EntireRow.Hidden = True '行非表示
ActiveCell.Offset(1, 0).Activate 'セルを1行下に移動
Else: Exit Sub
End If
End If
Loop '繰り返す
End Sub
Sub 全体表示する()
'表全体を再表示する
Cells.Select
Selection.EntireRow.Hidden = False
Selection.EntireColumn.Hidden = False
Cells(4, 3).Select 'range("C4").select と同じ
End Sub
※コメント投稿者のブログIDはブログ作成者のみに通知されます