Excel VBA質問箱 IV

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

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


7236 / 13645 ツリー ←次へ | 前へ→

【40357】inputboxを使ってフィルタ? JINましん 06/7/12(水) 14:05 質問[未読]
【40365】Re:inputboxを使ってフィルタ? Kein 06/7/12(水) 15:58 回答[未読]
【40373】Re:inputboxを使ってフィルタ? JINましん 06/7/12(水) 18:22 質問[未読]
【40378】Re:inputboxを使ってフィルタ? Mariko 06/7/12(水) 21:55 発言[未読]
【40382】Re:inputboxを使ってフィルタ? Kein 06/7/12(水) 23:12 回答[未読]
【40385】Re:inputboxを使ってフィルタ? JINましん 06/7/13(木) 8:31 お礼[未読]

【40357】inputboxを使ってフィルタ?
質問  JINましん  - 06/7/12(水) 14:05 -

引用なし
パスワード
   データベースもどきを作ろうとしていますが、インプットボックスを
使ってフィルタをかけようと思うのですがよく分かりません。
ご教示くださいませ。

(例)
  A   B   C   D
1 123   345  678  あいう
2 910   111  123  えおか
3 456   789  101  かきく
4 112   124  256  あいう 

インプットボックスを使用して、項目を入力し列Dでフィルタをかけたいのですができますでしょうか?

内容が分かりずらいかもしれませんがよろしくお願いします。。

【40365】Re:inputboxを使ってフィルタ?
回答  Kein  - 06/7/12(水) 15:58 -

引用なし
パスワード
   フィルターを使うなら、先頭に項目行を入れるのが必須となります。
もし項目を入れたくなければ、どこかに作業列を作って数式を入れ、
判定結果に基づいてフィルターと同じように行を非表示にする処理を
コードにすると良いと思います。
仮に作業列を AD列 にするとして、以下のようなコードになります。
(なお、抽出する値は必ず 文字列 であることを前提とします)

Sub MyFilter()
  Dim CkSt As String

  CkSt = InputBox("抽出する値を入力して下さい")
  If CkSt = "" Then Exit Sub
  Cells.EntireRow.Hidden = False
  On Error Resume Next
  With Range("D1", Range("D65536").End(xlUp)).Offset(, 26)
   .Formula = "=IF($D1=" & """" & CkSt & """" & ","""",1)"
   .SpecialCells(3, 1).EntireRow.Hidden = True
   .ClearContents
  End With
  If Err.Number <> 0 Then
   MsgBox "抽出されたデータはありません", 48
   Err.Clear
  End If
End Sub

【40373】Re:inputboxを使ってフィルタ?
質問  JINましん  - 06/7/12(水) 18:22 -

引用なし
パスワード
   早速の回答ありがとうございます。
下の(例)のように先頭に項目行を入れてみましたが、下記のVBA
ではうまく動きませんでした。

Cells.EntireRow.Hidden = False  で止まります。

それと、項目のフィルタでは、「うえ」とかのあいまいな検索
フィルタってできるのでしょうか。
お手数かけて申し訳ありません。
初心者ですみませんが回答よろしくお願いします。

(例)
  A   B   C   D
1 番号  ID   回答  項目
2 123   345  678  あいうえお
3 910   111  123  えおかきく
4 456   789  101  かきくせの
5 112   124  256  あいうまた


>フィルターを使うなら、先頭に項目行を入れるのが必須となります。
>もし項目を入れたくなければ、どこかに作業列を作って数式を入れ、
>判定結果に基づいてフィルターと同じように行を非表示にする処理を
>コードにすると良いと思います。
>仮に作業列を AD列 にするとして、以下のようなコードになります。
>(なお、抽出する値は必ず 文字列 であることを前提とします)
>
>Sub MyFilter()
>  Dim CkSt As String
>
>  CkSt = InputBox("抽出する値を入力して下さい")
>  If CkSt = "" Then Exit Sub
>  Cells.EntireRow.Hidden = False
>  On Error Resume Next
>  With Range("D1", Range("D65536").End(xlUp)).Offset(, 26)
>   .Formula = "=IF($D1=" & """" & CkSt & """" & ","""",1)"
>   .SpecialCells(3, 1).EntireRow.Hidden = True
>   .ClearContents
>  End With
>  If Err.Number <> 0 Then
>   MsgBox "抽出されたデータはありません", 48
>   Err.Clear
>  End If
>End Sub

【40378】Re:inputboxを使ってフィルタ?
発言  Mariko  - 06/7/12(水) 21:55 -

引用なし
パスワード
   ▼JINましん さん:
>早速の回答ありがとうございます。
>下の(例)のように先頭に項目行を入れてみましたが、下記のVBA
>ではうまく動きませんでした。

Keinさんの回答で上手く動作するはずですよ。

>Cells.EntireRow.Hidden = False  で止まります。
止まるはずが無いのですが・・・

>それと、項目のフィルタでは、「うえ」とかのあいまいな検索
>フィルタってできるのでしょうか。

このテーマは今のコードを完全に動かしてからにされては?

>お手数かけて申し訳ありません。
>初心者ですみませんが回答よろしくお願いします。
>
>(例)
>  A   B   C   D
>1 番号  ID   回答  項目
>2 123   345  678  あいうえお
>3 910   111  123  えおかきく
>4 456   789  101  かきくせの
>5 112   124  256  あいうまた
>
>
>>フィルターを使うなら、先頭に項目行を入れるのが必須となります。

項目行が必要であれば次のコードを入れてみてください。
あくまでD列での検索ですので、inputboxには、その列の検索文字を
間違わずに入れる事です。
Sub MyFilter()
  Dim CkSt As String

  CkSt = Application.InputBox("抽出する値を入力して下さい")
  If CkSt = "" Then Exit Sub
  Cells.EntireRow.Hidden = False
  On Error Resume Next
  With Range("D2", Range("D65536").End(xlUp)).Offset(, 26)
   .Formula = "=IF($D2=" & """" & CkSt & """" & ","""",1)"
   .SpecialCells(3, 1).EntireRow.Hidden = True
   .ClearContents
  End With
  If Err.Number <> 0 Then
   MsgBox "抽出されたデータはありません", 48
   Err.Clear
  End If
End Sub

下のコードは戻し用です
Sub MyUnFilter()
  Cells.EntireRow.Hidden = False
End Sub

試してみてください。

【40382】Re:inputboxを使ってフィルタ?
回答  Kein  - 06/7/12(水) 23:12 -

引用なし
パスワード
   >で止まります。
止まるとすればエラーメッセージが出ているはずですが、その内容は何ですか ?
ちなみにこちらでテストした限りでは、問題なく動作しましたが・・。
>「うえ」とかのあいまいな検索
ならば数式を書き換えて

=IF(ISERR(FIND(" & """" & CkSt & """" & ",$D1)),1,"""")"

などとしたら、どうでしょーか ?

【40385】Re:inputboxを使ってフィルタ?
お礼  JINましん  - 06/7/13(木) 8:31 -

引用なし
パスワード
   返信遅くなりました。

うまく動きました。
ご教示ありがとうございました。
(あいまい検索も動きましたです。)

わからないことがあったら、また、お願いします。

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