• ベストアンサー

2つの検索項目を入れ、当てはまるものを全て表示させたい

エクセルで、作った表の中の文字を検索して表示できるようなものを作ろうとしています。 「10月1日」 「第3病棟」 の様な診療日と病棟の両方が当てはまる項目を検索できるものを作成しようとして、いろいろ教えていただきました。 しかし、私のやり方がおかしいのか検索をしてもうまくいきません。 作った表にはB列に「診療日」、D列に「病棟」が全部で100近く入っています。 下記のものだと、検索し、当てはまるものが1つしか表示されません。 本当は当てはまる項目は複数あるのですが、それらがうまく表示されないのです。 わかる方がいらっしゃりましたら、教えてください。 Private Sub CommandButton1_Click() 'マクロ実行画面の凍結 Application.ScreenUpdating = False '変数宣言 Dim 診療日 As Variant Dim 病棟 As Variant '抽出キーの入力指示 診療日 = InputBox("診療日をいれてください", "診療日入力") 'キャンセルした場合の処理 If 診療日 = Empty Then Exit Sub 病棟 = InputBox("病棟をいれてください", "病棟入力") 'キャンセルした場合の処理 If 病棟 = Empty Then Exit Sub 'オートフィルタがかかっていたら解除 If ActiveSheet.AutoFilterMode Then Selection.AutoFilter 'フィルタ設定 Range("B5:E5").AutoFilter Range("B3").Select '診療日と病棟の2項目にフィルタ条件設定 Selection.AutoFilter Field:=1, _ Criteria1:="=*" & 診療日 & "*", Operator:=xlAnd Selection.AutoFilter Field:=3, _ Criteria1:="=*" & 病棟 & "*", Operator:=xlAnd End Sub

質問者が選んだベストアンサー

  • ベストアンサー
  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.1

テストの関係上、A,B列でフィルタする例に変えましたが Private Sub CommandButton1_Click() 'マクロ実行画面の凍結 Application.ScreenUpdating = False '変数宣言 Dim 診療日 As Variant Dim 病棟 As Variant '抽出キーの入力指示 診療日 = InputBox("診療日をいれてください", "診療日入力") 'キャンセルした場合の処理 If 診療日 = Empty Then Exit Sub 病棟 = InputBox("病棟をいれてください", "病棟入力") 'キャンセルした場合の処理 If 病棟 = Empty Then Exit Sub 'オートフィルタがかかっていたら解除 If ActiveSheet.AutoFilterMode Then Selection.AutoFilter '------ 'フィルタ設定 Range("A1:B11").Select Selection.AutoFilter '診療日と病棟の2項目にフィルタ条件設定 Selection.AutoFilter Field:=1, Criteria1:="=*" & 診療日 & "*" Selection.AutoFilter Field:=2, Criteria1:="=*" & 病棟 & "*" End Sub はどうですか。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.2

こんにちは。 とりあえず、そのままのスタイルを生かして、作り変えました。 できるなら、ExcelのVersionを出しておいたほうがよいと思います。これは、Versionによっても、微妙に違っていたような気がします。 Private Sub CommandButton1_Click() Dim 診療日 As Variant Dim 病棟 As String Dim flg As Boolean flg = False With ActiveSheet 'すべてを出す。 If .FilterMode Then .ShowAllData Do 診療日 = InputBox("診療日をいれてください", "診療日入力") If 診療日 = Empty Then Exit Sub  If Not IsDate(診療日) Then     MsgBox "日付ではありません。"  Else   診療日 = DateValue(診療日)   If Year(診療日) < 2000 Then    MsgBox "日付が違うようです。"   Else    flg = True   End If  End If Loop Until IsDate(診療日) And flg = True 'B6の書式に従って診療日の書式を変更させる。 診療日 = Format(診療日, .Range("B5").Offset(1).NumberFormatLocal) 病棟 = InputBox("病棟をいれてください", "病棟入力")  If 病棟 = "" Then Exit Sub Application.ScreenUpdating = False 'フィルタ設定 With .Range("B5").CurrentRegion   .AutoFilter _   Field:=1, Criteria1:="=" & CStr(診療日), Operator:=xlAnd   .AutoFilter _   Field:=3, Criteria1:="=" & 病棟 & "*", Operator:=xlAnd End With Application.ScreenUpdating = True End With End Sub 懸案としては、 「第3病棟」 ←3だけで検索できるかどうか、という        こと。        つまり、データの文字列が全角なら全        角、半角なら半角の3を探すようにさ        せ、Criterial1:="第"&病棟 &"*" に        したほうがよいかもしれません。 なお、ご質問のコードは、No.1684363で、hana-hana3さんのもののようです。回答者どうしのコードに手を入れるのは、掲示板の回答の暗黙のルールに触れますから、もし、hana-hana3さんが読まれて気分を害していたら、私はお詫びいたします。 この Autofilterは、Versionによって違いがあるのか、バグっぽい動きがあるので、特にに日付式の検索検索などは、念入りに手を加えないと、うまくできません。VBAを良く知っている者でも、むつかしいもののひとつです。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • エクセル 複数項目の検索

    2つのボタンがあります。 (1)日付をいれて、診療日を検索するボタン (2)病棟をいれて、病棟を検索するボタン 教えて頂きたいのは、「10月1日 第3病棟」の様な診療日と病棟の両方が当てはまる項目を検索できるボタンです。 また、診療日を検索している(1)ですが、 「10月1日 10月7日」 など、複数の項目も検索できるボタンにしたいとも思っています。 検索の「and」みたいなものです。 おわかりになる方は、教えて下さい。 あまりVBAは詳しくありませんので、宜しくお願い致します。 <1> Private Sub CommandButton1_Click() 'マクロ実行画面の凍結 Application.ScreenUpdating = False '変数宣言 Dim 診療日 As Variant '抽出キーの入力指示 診療日 = InputBox 'キャンセルした場合の処理 If 診療日 = Empty Then Exit Sub End If 'オートフィルタがかかっていなかったらかける 'かかっていたら念の為一度解除し再設定 If ActiveSheet.AutoFilterMode = False Then Range("B5:E5").Select Selection.AutoFilter Else Selection.AutoFilter Range("B5:E5").Select Selection.AutoFilter End If Range("B3").Select '「診療日」の列(2列目)で、抽出キーを含むものを抽出 Selection.AutoFilter Field:=1, _ Criteria1:="=*" & 診療日 & "*", Operator:=xlAnd End Sub <2> (2)は(1)の「診療日」のところが「病棟」に変わっているだけです。

  • オートフィルタ マクロについて

    質問です。 オートフィルタで複数列を1つの条件で抽出したいのですが、教えてください。 たとえばA列が納品書No.・B列が受注No.・C列が商品No.なのですがすべて数字の為、出来ればInBox一回でA-C列を検索してほしいです。 指定納品書NO 受注NO 元品番 21812 3252608 77 21880 3307989 32B 22053 3389769 95414A 22050 3389770 67312H 22052 3389771 67312H 22050 3389773 67118H 以下の様なマクロを作ってみましたが、 A-C列全てに一致しないと抽出しないようです。 どなたかご教授いただけないでしょうか? マクロ '条件1 の設定 Dim 検索NO As Variant '抽出キーの入力指示 検索NO = InputBox("検索NOを入力てください。") 'キャンセルした場合の処理 If 検索NO = Empty Then Exit Sub End If 'オートフィルタがかかっていなかったらかける 'かかっていたら念の為一度解除し再設定 If ActiveSheet.AutoFilterMode = False Then Range("A2:O2").Select Selection.AutoFilter Else Selection.AutoFilter Range("A2:O2").Select Selection.AutoFilter End If Selection.AutoFilter Field:=1, _ Criteria1:=">=" & 検索NO, Operator:=xlAnd, Criteria2:=" " & 検索NO Selection.AutoFilter Field:=2, _ Criteria1:=">=" & 検索NO2, Operator:=xlAnd, Criteria2:=" " & 検索NO2 Selection.AutoFilter Field:=3, _ Criteria1:=">=" & 検索NO3, Operator:=xlAnd, Criteria2:=" " & 検索NO3 AutoFilterMode = False Application.ScreenUpdating = True End Sub よろしくお願いいたします。

  • 下記マクロの意味を教えてください。

    Sub 済() With Worksheets("管理表") If .AutoFilterMode Then .AutoFilterMode = False End If Range("O7:P7").Select Selection.AutoFilter Selection.AutoFilter Field:=1, Criteria1:="=*済*", Operator:=xlAnd ActiveWindow.SmallScroll Down:=-12 Range("A1").Select End With End Sub よろしくお願い致します。

  • エクセルVBA住所録で半角全角問わず検索する方法

    エクセルVBAで住所録を作っています。 住所録で下記のようなコードを書いて、キーワード検索をさせるようにしているのですが、『*丁目』や番地に半角英数を使っています。 全角で数字を入力しても検索されるようなコードの書き方はあるのでしょうか? 宜しくお願いします。 Sub 住所検索() ans = InputBox("住所を入力してください") With ActiveSheet If .AutoFilterMode Then 'オートフィルタモードがオンなら .AutoFilterMode = False 'リセットする End If .Range("A1:IV1").AutoFilter 'オートフィルタモードをセット .Range("A1:IV1").AutoFilter Field:=4, Criteria1:="=*" & ans & "*" '4つ目のフィルターに検索文字 End With End Sub

  • エクセルの変数について

    お世話になります。 下のマクロについてどうしてもわからないので教えてください。 開始日、最終日をinputboxにて日付を入れてオートフィルターで結果をだしたいのですが、どうしてもオートフィルター内のmyfirstdateとmylastdateに変数の値が入りません。 どこが間違っていますでしょうか? お願いします。 Sub Macro1() ' ' Macro1 Macro ' マクロ記録日 : 2006/12/7 ユーザー名 : AAAAAA ' Dim myfirstdate As Date Dim mylastdate As Date myfirstdate = InputBox("開始日を入力してください。" & vbCrLf & "例)12/1") mylastdate = InputBox("最終日を入力してください。" & vbCrLf & "例)12/31") Selection.AutoFilter Field:=2, Criteria1:=">=myfirstdate", Operator:=xlAnd, _ Criteria2:="<=mylastdate" ' End Sub

  • エクセルVBAで住所録を作成

    住所録シートに次のようにコードを作っています。 Option Explicit Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) If Target.Address = "$B$1" Then 顧客名検索 ElseIf Target.Address = "$C$1" Then フリガナ検索 ElseIf Target.Address = "$D$1" Then 住所検索 ElseIf Target.Address = "$E$1" Then 郵便番号検索 ElseIf Target.Address = "$A$1" Then オートフィルタ解除 カナ順に設定 Else Exit Sub End If End Sub そして標準モジュールには Sub 顧客名検索() ans = InputBox("顧客名を入力してください") With ActiveSheet If .AutoFilterMode Then 'オートフィルタモードがオンなら .AutoFilterMode = False 'リセットする End If .Range("A1:G1").AutoFilter 'オートフィルタモードをセット .Range("A1:G1").AutoFilter Field:=2, Criteria1:="=*" & ans & "*" '2つ目のフィルターに検索文字 End With End Sub Sub フリガナ検索() ans = InputBox("顧客カナを入力してください") With ActiveSheet If .AutoFilterMode Then 'オートフィルタモードがオンなら .AutoFilterMode = False 'リセットする End If .Range("A1:G1").AutoFilter 'オートフィルタモードをセット .Range("A1:G1").AutoFilter Field:=3, Criteria1:="=*" & ans & "*" '3つ目のフィルターに検索文字 End With End Sub Sub 住所検索() ans = InputBox("住所を入力してください") With ActiveSheet If .AutoFilterMode Then 'オートフィルタモードがオンなら .AutoFilterMode = False 'リセットする End If .Range("A1:G1").AutoFilter 'オートフィルタモードをセット .Range("A1:G1").AutoFilter Field:=4, Criteria1:="=*" & ans & "*" '4つ目のフィルターに検索文字 End With End Sub Sub 郵便番号検索() ans = InputBox("郵便番号を入力してください") With ActiveSheet If .AutoFilterMode Then 'オートフィルタモードがオンなら .AutoFilterMode = False 'リセットする End If .Range("A1:G1").AutoFilter 'オートフィルタモードをセット .Range("A1:G1").AutoFilter Field:=5, Criteria1:="=*" & ans & "*" '5つ目のフィルターに検索文字 End With End Sub Sub オートフィルタ解除() Application.CutCopyMode = False Selection.AutoFilter Range("A1").Select End Sub Sub カナ順に設定() Range("C1").Select ActiveWorkbook.Worksheets("住所録").Sort.SortFields.Clear ActiveWorkbook.Worksheets("住所録").Sort.SortFields.Add Key:=Range("C1"), _ SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal With ActiveWorkbook.Worksheets("住所録").Sort .SetRange Range("A2:IV65536") .Header = xlNo .MatchCase = False .Orientation = xlTopToBottom .SortMethod = xlPinYin .Apply End With Range("A2").Select Selection.AutoFilter End Sub と入れています。 VISTAで作ったのですが、このファイルを共有にして使おうとすると、XPのパソコンでは、A1セルをダブルクリックすると、コードが黄色になり、マクロが中断されます。 B1~G1は問題なくマクロが実行されるのに・・・。 もう一台のVISTAでは同じ共有状態で使っても問題ありません。 どうすればXPでも問題なく使えるのでしょう?

  • Excel AutoFilterメソッドについて

    excelのvbaについてです。  日付   取引先   金額 ------------------------------ 3月20日  ○○様  ¥20,000 4月23日  △△様  ¥19,000 5月23日  ○○様  ¥5,000 ・・・・・ ・・・ ・・ というような表から、INPUTBOXで入力した抽出条件でデータを取り出したいと思っています。 Dim aa As String, i As Integer aa = InputBox("抽出する取引先を入力してください") i = InputBox("抽出を開始する月は?※半角数字で入力してください") ii = InputBox("抽出を終了する月は?※半角数字で入力してください") Selection.AutoFilter field:=1, Criteria1:=aa Selection.AutoFilter field:=2, Criteria1:=">=" & i & "月1日", Operator:=xlAnd, Criteria2:="<=" & ii & "月31日" End Sub としたのですが、月によって30日で終わる月もあれば、28日、29日で終わる月もありますよね。 どんな月の範囲指定をしても、ちゃんと抽出できるようにするにはどうしたらいいでしょうか? 諸先輩方、どうぞよろしくお願いします。

  • エクセルVBAの一時停止後、 入力し再実行したい

    エクセルVBAでオートフィルター実行後に一時停止し、オートフィルターで選んだエクセルシート上のセルに直接入力た後、マクロを再実行させたい。 Sub Macro1() ' ' Macro1 Macro ' マクロ記録日 : 2008/3/2 '製品コードより枠番を選ぶ Selection.AutoFilter Field:=12, Criteria1:="=?????1*", Operator:=xlAnd 'ここで一時停止し、エクセルシート上で入力した後、次の行を実行したい Selection.AutoFilter Field:=12, Criteria1:="=?????2*", Operator:=xlAnd 'ここで一時停止し、エクセルシート上で入力した後、次の行を実行したい Range("A1").Select End Sub

  • Excelマクロでオートフィルターからコピペ

    ファイルのB列の値から0以外の値をオートフィルターで抽出し、値を、別のファイルのD列の一番下に貼りつけるマクロを作っていますがうまくいきません。 今作ったのは Sub macro1() If ActiveSheet.AutoFilterMode = False Then Range("A:G").Select Selection.AutoFilter Else Selection.AutoFilter Range("A:G").Select Selection.AutoFilter End If Selection.AutoFilter Field:=2, Criteria1:="<>0", Operator:=xlAnd Range("A1").Select Range("B2", Range("B2").End(xlDown)).Select Selection.Copy Windows("貼りつけるファイル名").Activate Cells(Rows.Count, 4).End(xlUp).Offset(1).Select ActiveSheet.Paste End Sub です。 フィルターで0以外の値を抽出しコピーまではできていますが、貼りつけるところでエラーがでます。 Microsoft Visual Basic 400 というエラーです。 何が悪いのか分かりません・・・。 分かる方いましたらご教授ください。よろしくお願いします。

  • エクセルのマクロのことについてです。

    エクセルのマクロのことについてです。 セル内に入力した日本語でオートフィルタの絞り込み検索をかけるマクロを作りたいのですが、英語ではうまく行っているのですが、日本語ではなぜかうまくいきません。 下記のようにコードを書いているのですが、 どこが間違っているのかご教授いただけませんでしょうか? Dim nihongo As String nihongo = Worksheets("絞り込み").Cells(3.4).Value If nihongo = Empty Then nihongo = "*" End If ActiveSheet.Range("$A$7:$G$100").AutoFilter Field:=4, Criteria1:="=*" & nihongo & "*", Operator:=xlAnd

空白で表示する方法について
このQ&Aのポイント
  • エクセルで業務の経験年月を表示させるためのDATEIF関数を使用しています。
  • 「開始年月日」と「終了年月日もしくは今日」のセルが未入力の場合、経験年月のセルに「122年2ヶ月」と表示されてしまいます。
  • 業務経験がないセルは空白で表示したいのですが、空白に表示する方法について教えていただけるとありがたいです。
回答を見る

専門家に質問してみよう