Excel (VBA)

Excel VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 7 Professional : Excel 2003)
シートに作ったコンボ・ボックスとオートフィルタの連動
投稿日時: 20/08/06 01:01:10
投稿者: amiami

こんばんは
例題サイトの構文を用いて
 http://www1.plala.or.jp/happyday/sample/s2/s2_3.html
下記のマクロを作成しました
フィルタをかけたい列は年月日ですが
実行するとすべて非表示になります
年月日でない場合は正常に動作します
原因を教えて下さい。
Sub フィルタ()
Application.ScreenUpdating = False
Dim 選択項目 As Date
Dim 実行シート名 As Variant
実行シート名 = ActiveSheet.Name
Sheets("コンボボックスリスト").Select
選択項目 = Cells(1, 3)
If 選択項目 = enpty Then
Sheets(コンボボックスリスト).Select
Exit Sub
End If
Sheets(実行シート名).Select
ActiveSheet.AutoFilterMode = False
Rows("6:38").Select
Selection.AutoFilter
Selection.AutoFilter Field:=3, Criteria1:=選択項目
Range("A1").Select
End Sub
以上です

回答
投稿日時: 20/08/06 08:20:44
投稿者: simple

要するに、"日付を使用したオートフィルタが機能しない"という話ですね。
それなら、こちらの記事を参考にしてください。
「日付で絞り込む」
http://officetanaka.net/excel/vba/tips/tips151.htm
 
(別法として、セルのTextプロパティで得られる文字列を、
Criteria1にセットするという方法でもOKかもしれません。)

回答
投稿日時: 20/08/06 09:28:41
投稿者: WinArrow
投稿者のウェブサイトに移動

選択項目をのデータ型を「String」に変更し
 
>選択項目 = Cells(1, 3)

選択項目 = Format(Cells(1, 3).Value,"yyyy/mm/dd")
に変更してみたらいかがでしょう?
 
あと、きになるところ
>If 選択項目 = enpty Then
コンパイルエラーになりませんか?
 
掲示板には手入力ではなく、コードペインをコピペしましょう。
 

回答
投稿日時: 20/08/06 09:35:52
投稿者: WinArrow
投稿者のウェブサイトに移動

質問の回答ではありませんが、
シートの切替操作が多いです。
Selectをしない
コードを勉強しましょう。
 
ActiveSheet
を使っていますが、
コード実行時に、別のシートがアクティブになっている可能性もあるので
その辺も対処したほうが無難です。
 

投稿日時: 20/08/06 09:37:03
投稿者: amiami

おはようございます。
 
今からやってみますが不慣れで
しばらく時間が必要ですので
保留中でお願いします。
 
以上

回答
投稿日時: 20/08/06 20:17:30
投稿者: mattuwan44

既出の回答と被るかもしれませんが、
オートフィルターは見かけ上の文字列を評価します。
 
Dim 選択項目 As Date
 
↑は変数の中身は数値です。
 
数値としてデータを評価したい場合は、
検索条件を、「以上」そして「以下」と2つ指定して等しい値を抽出します。
 
また、検索値を文字列として与えることも可能です。
その場合はセルの表示形式に合わせることが必要になってきます。
 
1月1日 → 1/1   ×
 
1月1日 → 令和2年1月1日   ×
 
 

回答
投稿日時: 20/08/06 22:27:03
投稿者: takesi

シリアル値か テキストか どちらにそろえるかの問題??

回答
投稿日時: 20/08/07 07:59:11
投稿者: WinArrow
投稿者のウェブサイトに移動

引用:

選択項目 = Cells(1, 3)
 If 選択項目 = enpty Then
 Sheets(コンボボックスリスト).Select
 Exit Sub
 End If

 
↑の部分について、追加アドバイス
変数:選択項目は「Date型」で定義している前提で
多分、
> If 選択項目 = enpty Then
※「enpty」は「Empty」の入力ミスかな?
で、空白をチェックしていると思います。
しかし、空白だったら、条件は成立しますが、
仮に、セルに「0」が入っている場合も成立します。
以上は、変数がDate型で定義された場合の問題です。
 
確実にセルが空白であるかチェックするならば、
変数に代入する前に、セルそのものでチェックする方がよいでしょう。
幾つかの空白チェック方法
(1) If IsEmpty(Cells(1, 3).Value) Then
(2) If Cells(1, 3).Value = "" Then
(3) If Len(Cells(1, 3).Value) = 0 Then
 
今回のAutoFilterで使用する場合は、文字列で定義したほうが得策です。
 
 
 
  

投稿日時: 20/08/08 19:11:48
投稿者: amiami

こんばんは
皆さん、誠に有難う御座いました。
現在、順調に動いています。
少しずつ理解していけるよに致します。
かしこ