Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


9397 / 13644 ツリー ←次へ | 前へ→

【27511】オートフィルタについて HIRO 05/8/10(水) 16:32 質問[未読]
【27517】Re:オートフィルタについて kobasan 05/8/10(水) 18:35 回答[未読]
【27536】Re:オートフィルタについて HIRO 05/8/11(木) 9:11 質問[未読]
【27538】Re:オートフィルタについて kobasan 05/8/11(木) 9:38 発言[未読]
【27539】Re:オートフィルタについて HIRO 05/8/11(木) 9:55 質問[未読]
【27542】Re:オートフィルタについて kobasan 05/8/11(木) 11:35 発言[未読]
【27545】Re:オートフィルタについて HIRO 05/8/11(木) 13:01 お礼[未読]
【27564】Re:オートフィルタについて kobasan 05/8/11(木) 19:07 発言[未読]
【27584】Re:オートフィルタについて HIRO 05/8/12(金) 14:49 質問[未読]
【27587】Re:オートフィルタについて kobasan 05/8/12(金) 15:09 回答[未読]

【27511】オートフィルタについて
質問  HIRO  - 05/8/10(水) 16:32 -

引用なし
パスワード
   VBAにおいて オートフィルターを使用して表を絞り込み検索したいのですが
複数の列(項目)において AND で絞り込みたいのです
検索するキーはコンボボックスより取得して 絞り込む項目は
3つでいずれも入力されていないものは無視して動作させたいのです
現在

If Sheet1.ComboBox1.Text = "" Then
Else
Worksheets("Sheet1").Range("A13").AutoFilter _
  field:=1, _
  Criteria1:=A
End If

このように指定しているのですが
このやり方で更に他の列(項目)を追加したい時はどうしたらいいでしょうか?
自分は上記の指定を複数使用したら出来るのかと思い試しましたが
うまく検索する事が出来ませんでした。

【27517】Re:オートフィルタについて
回答  kobasan  - 05/8/10(水) 18:35 -

引用なし
パスワード
   ▼HIRO さん 今晩は

これでできると思います。

c1 = Sheet1.ComboBox1.Text
c2 = Sheet1.ComboBox2.Text
c3 = Sheet1.ComboBox3.Text

With Worksheets("Sheet1").Range("A13")
  If c1 <> "" Then .AutoFilter field:=1, Criteria1:=c1
  If c2 <> "" Then .AutoFilter field:=2, Criteria1:=c2
  If c3 <> "" Then .AutoFilter field:=3, Criteria1:=c3
End With


>VBAにおいて オートフィルターを使用して表を絞り込み検索したいのですが
>複数の列(項目)において AND で絞り込みたいのです
>検索するキーはコンボボックスより取得して 絞り込む項目は
>3つでいずれも入力されていないものは無視して動作させたいのです
>現在
>
>If Sheet1.ComboBox1.Text = "" Then
>Else
>Worksheets("Sheet1").Range("A13").AutoFilter _
>  field:=1, _
>  Criteria1:=A
>End If
>
>このように指定しているのですが
>このやり方で更に他の列(項目)を追加したい時はどうしたらいいでしょうか?
>自分は上記の指定を複数使用したら出来るのかと思い試しましたが
>うまく検索する事が出来ませんでした。

【27536】Re:オートフィルタについて
質問  HIRO  - 05/8/11(木) 9:11 -

引用なし
パスワード
   返事が遅くなりましたが
どうしても 2つ目の条件を入力すると表全体が閉じてしまうのですが
セルの設定とか 変数の形式とか 関係あるのでしょうか?
普通にオートフィルターの機能を使うと出来るので設定の問題では
ないとおもうのですが。


▼kobasan さん:
>▼HIRO さん 今晩は
>
>これでできると思います。
>
>c1 = Sheet1.ComboBox1.Text
>c2 = Sheet1.ComboBox2.Text
>c3 = Sheet1.ComboBox3.Text
>
>With Worksheets("Sheet1").Range("A13")
>  If c1 <> "" Then .AutoFilter field:=1, Criteria1:=c1
>  If c2 <> "" Then .AutoFilter field:=2, Criteria1:=c2
>  If c3 <> "" Then .AutoFilter field:=3, Criteria1:=c3
>End With
>
>

【27538】Re:オートフィルタについて
発言  kobasan  - 05/8/11(木) 9:38 -

引用なし
パスワード
   ▼HIRO さん おはようございます。

>2つ目の条件を入力すると表全体が閉じてしまうのですが

このことが、表示されるデータがないということでしたら
Sheet1.ComboBox1.TextとSheet1.ComboBox2.Textの両方に該当するデータが
あるか調べてみてください。
(私が作ったサンプルでは動くのですが)
それから、追加を入れておくといいと思います。

これでなかったらコードを見ないと何とも言えないので、どのようなコードなのか
アップしてみてください。


>>With Worksheets("Sheet1").Range("A13")
   .AutoFilter   '<=========一度AutoFilter解除 ==========追加
>>  If c1 <> "" Then .AutoFilter field:=1, Criteria1:=c1

>どうしても 2つ目の条件を入力すると表全体が閉じてしまうのですが
>セルの設定とか 変数の形式とか 関係あるのでしょうか?
>普通にオートフィルターの機能を使うと出来るので設定の問題では
>ないとおもうのですが。
返事が遅くなりましたが
どうしても 2つ目の条件を入力すると表全体が閉じてしまうのですが
セルの設定とか 変数の形式とか 関係あるのでしょうか?
普通にオートフィルターの機能を使うと出来るので設定の問題では
ないとおもうのですが。


▼kobasan さん:
>▼HIRO さん 今晩は
>
>これでできると思います。
>


>▼kobasan さん:
>>▼HIRO さん 今晩は
>>
>>これでできると思います。
>>
>>c1 = Sheet1.ComboBox1.Text
>>c2 = Sheet1.ComboBox2.Text
>>c3 = Sheet1.ComboBox3.Text
>>
>>With Worksheets("Sheet1").Range("A13")
>>  If c1 <> "" Then .AutoFilter field:=1, Criteria1:=c1
>>  If c2 <> "" Then .AutoFilter field:=2, Criteria1:=c2
>>  If c3 <> "" Then .AutoFilter field:=3, Criteria1:=c3
>>End With
>>
>>

【27539】Re:オートフィルタについて
質問  HIRO  - 05/8/11(木) 9:55 -

引用なし
パスワード
   迅速な回答有り難うございます
でわ こちらのコードをアップしてみます
Sub TEST()
'*************************************************************************
'*オートフィルター処理                          *
'*                                    *
'*************************************************************************

Dim A, B, C As String


A = Sheet1.ComboBox1.Text
B = Sheet1.ComboBox2.Text
C = Sheet1.ComboBox3.Text

If Worksheets("Sheet1").FilterMode = True Then
Worksheets("Sheet1").ShowAllData
End If

With Worksheets("Sheet1").Range("A13")
  If A <> "" Then .AutoFilter field:=1, Criteria1:=A
  If B <> "" Then .AutoFilter field:=2, Criteria1:=B
  If C <> "" Then .AutoFilter field:=3, Criteria1:=C
End With


End Sub

このような感じでいま コーディングしています。
データはちゃんとありますので大丈夫なはずなのですが
といいますのも 別表で作成した物からコンボボックスのリストに項目を
追加して、更に検索する表はそれをもとに作られているので
データがないという事はないとおもうのですが
何度もすみませんが回答のほどよろしくお願いします

▼kobasan さん:
>▼HIRO さん おはようございます。
>
>>2つ目の条件を入力すると表全体が閉じてしまうのですが
>
>このことが、表示されるデータがないということでしたら
>Sheet1.ComboBox1.TextとSheet1.ComboBox2.Textの両方に該当するデータが
>あるか調べてみてください。
>(私が作ったサンプルでは動くのですが)
>それから、追加を入れておくといいと思います。
>
>これでなかったらコードを見ないと何とも言えないので、どのようなコードなのか
>アップしてみてください。
>
>
>>>With Worksheets("Sheet1").Range("A13")
>   .AutoFilter   '<=========一度AutoFilter解除 ==========追加
>>>  If c1 <> "" Then .AutoFilter field:=1, Criteria1:=c1
>

【27542】Re:オートフィルタについて
発言  kobasan  - 05/8/11(木) 11:35 -

引用なし
パスワード
   ▼HIRO さん 今日は

提示のcodeで問題なくうごきます。
ComboBox1、ComboBox2、ComboBox3に、ある行のDATAのA、B、C列の値を選択してみてください。
それで、その行のDATAが出ますか?
出ないようでしたら、ComboBoxのdataとSheet上のDATAに余分なspaceが入ってないか調べてください。

【27545】Re:オートフィルタについて
お礼  HIRO  - 05/8/11(木) 13:01 -

引用なし
パスワード
   何度もすみません
やはりこちらでは正常に動作しません
ちなみに変数の指定を検索をかけたい列の値を入力してやってみたのですが
B=SHEET1.RANGE("該当のセル")
やはりこの指定でも すべて表が閉じてしまいます。
まったくこちらでは 原因がわかりません
エクセルのバージョンの違いとか 関係あるのでしょうか?
ちなみにこちらは2000をしようしています
お手数おかけしました
もうちょっとこちらで調査してみます。 有り難うございました
また なにか ありましたらよろしくお願いします


▼kobasan さん:
>▼HIRO さん 今日は
>
>提示のcodeで問題なくうごきます。
>ComboBox1、ComboBox2、ComboBox3に、ある行のDATAのA、B、C列の値を選択してみてください。
>それで、その行のDATAが出ますか?
>出ないようでしたら、ComboBoxのdataとSheet上のDATAに余分なspaceが入ってないか調べてください。

【27564】Re:オートフィルタについて
発言  kobasan  - 05/8/11(木) 19:07 -

引用なし
パスワード
   ▼HIRO さん今晩は。

>やはりこちらでは正常に動作しません

>まったくこちらでは 原因がわかりません

>エクセルのバージョンの違いとか 関係あるのでしょうか?
>ちなみにこちらは2000をしようしています

私も2000です。2000,2003でOKでした。

'ComboBox1にA14,ComboBox2にB14,ComboBox3にC14の値をセットして、
'macro9を実行して、メッセージボックスの値を比較してみてください
'*〜*"の値を比較して、上段の3行が下段の3行と違っていたら、
'ComboBoxのリストを作るコードを見直す必要があります。
'メッセージボックスの値が同じであれば、他を検討する必要があります。

Sub Macro9()
  Application.ScreenUpdating = False
  
  c1 = Sheet1.ComboBox1.Text
  c2 = Sheet1.ComboBox2.Text
  c3 = Sheet1.ComboBox3.Text

  With Worksheets("Sheet1").Range("A13")
    .AutoFilter
    If c1 <> "" Then .AutoFilter field:=1, Criteria1:=c1
    If c2 <> "" Then .AutoFilter field:=2, Criteria1:=c2
    If c3 <> "" Then .AutoFilter field:=3, Criteria1:=c3
  End With
  
  MsgBox "ComboBox1===>*" & c1 & "*" & Chr(13) & _
      "ComboBox2===>*" & c2 & "*" & Chr(13) & _
      "ComboBox3===>*" & c3 & "*" & Chr(13) & Chr(13) & _
      "A14===>*" & Range("A14").Text & "*" & Chr(13) & _
      "B14===>*" & Range("B14").Text & "*" & Chr(13) & _
      "C14===>*" & Range("C14").Text & "*" & Chr(13)
End Sub

【27584】Re:オートフィルタについて
質問  HIRO  - 05/8/12(金) 14:49 -

引用なし
パスワード
   KOBASANさん
お手数おかけしました。
なぜか 新しくファイルを作りなおしえてやってみたところ
うまく動きました。 原因は不明ですW
セルを複数結合していたのがまずかったのでしょうか?
なんにせよ うまくいき一安心です
親切に有り難うございました


▼kobasan さん:
>▼HIRO さん今晩は。
>
>>やはりこちらでは正常に動作しません
>
>>まったくこちらでは 原因がわかりません
>
>>エクセルのバージョンの違いとか 関係あるのでしょうか?
>>ちなみにこちらは2000をしようしています
>
>私も2000です。2000,2003でOKでした。
>
>'ComboBox1にA14,ComboBox2にB14,ComboBox3にC14の値をセットして、
>'macro9を実行して、メッセージボックスの値を比較してみてください
>'*〜*"の値を比較して、上段の3行が下段の3行と違っていたら、
>'ComboBoxのリストを作るコードを見直す必要があります。
>'メッセージボックスの値が同じであれば、他を検討する必要があります。
>
>Sub Macro9()
>  Application.ScreenUpdating = False
>  
>  c1 = Sheet1.ComboBox1.Text
>  c2 = Sheet1.ComboBox2.Text
>  c3 = Sheet1.ComboBox3.Text
>
>  With Worksheets("Sheet1").Range("A13")
>    .AutoFilter
>    If c1 <> "" Then .AutoFilter field:=1, Criteria1:=c1
>    If c2 <> "" Then .AutoFilter field:=2, Criteria1:=c2
>    If c3 <> "" Then .AutoFilter field:=3, Criteria1:=c3
>  End With
>  
>  MsgBox "ComboBox1===>*" & c1 & "*" & Chr(13) & _
>      "ComboBox2===>*" & c2 & "*" & Chr(13) & _
>      "ComboBox3===>*" & c3 & "*" & Chr(13) & Chr(13) & _
>      "A14===>*" & Range("A14").Text & "*" & Chr(13) & _
>      "B14===>*" & Range("B14").Text & "*" & Chr(13) & _
>      "C14===>*" & Range("C14").Text & "*" & Chr(13)
>End Sub

【27587】Re:オートフィルタについて
回答  kobasan  - 05/8/12(金) 15:09 -

引用なし
パスワード
   ▼HIRO さん  今日は

>なぜか 新しくファイルを作りなおしえてやってみたところ
>うまく動きました。 原因は不明ですW

>セルを複数結合していたのがまずかったのでしょうか?

そうだと思います。

私は、VBAでいじるシートにはセルの結合は使わないことにしています。
参考までに、次の記事も見ておいてください。

【9963】
基本的にセルの結合はデメリットが大きいので、
VBAでいじるシートには使わないことをお薦めいたします。

9397 / 13644 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free