- ベストアンサー
EXCEL(2003) VBAでyyyy/mm/ddのセルがAutoFilterにかからない問題の解決方法について
- EXCEL(2003) VBAを使用して、セルの書式設定をユーザー定義のyyyy/mm/ddにした場合、AutoFilterでmmが機能しない問題が発生します。
- 例えば、*/08/*のように検索しても結果が表示されません。しかし、特定の日付を完全一致検索したり、別の列で関連する情報を検索することは可能です。
- 質問者は、yyyy/mm/ddで先頭一致検索や*/08/*のコーディングができる方法を知りたいとしています。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
No.2です! たびたびごめんなさい。 質問文をよく読まずに投稿してしまいました。 VBAでのオートフィルタですね! 前回の画像の配置でのコードになりますが・・・ ↓のコードを操作したいSheet見出し上で右クリック → コードの表示 を選択し、コピー&ペーストしてマクロを実行してみたください。 Sub test() Dim i As Long For i = 2 To Cells(Rows.Count, 1).End(xlUp).Row With Cells(i, 4) .Value = Cells(i, 2).Value .NumberFormatLocal = "m" End With Next i Range("A1:D1").Select Selection.AutoFilter Selection.AutoFilter field:=4, Criteria1:=Cells(1, 6) End Sub 前回同様、F1セルにフィルタ条件の月の数値を入力してのマクロ実行になります。 特定の日付限定や同年度の月のでのオートフィルタならもう少し簡単だと思いますが、 複数年の中で、「月」でのフィルタだとこの程度しか思いつきませんでした。 VBAでもD列を作業用の列として使ってしまいました。 他に良い方法があれば読み流してくださいね。m(__)m
その他の回答 (2)
- tom04
- ベストアンサー率49% (2537/5117)
こんばんは! 外していたらごめんなさい。 たぶんですが・・・ 元データの表示形式をユーザー定義で変えても、見た目だけの問題で あくまでシリアル値が入っています。 という訳で「8月」のような検索条件ではフィルタはかけれないと思います。 (もし出来るのであれば当方の認識不足ですので、ごめんなさい。) という訳で無理やりって感じの方法ですが、↓の画像のような感じではどうでしょうか? 別列に検索したい月(数値のみ)を入力するとそのデータを別列に表示される方法です。 作業用の列を1列設けています。 作業列D2セルに =IF(A2="","",IF(MONTH(B2)=$F$1,ROW(),"")) という数式をいれ、フィルハンドルの(+)マークでダブルクリック、またはオートフィルで下へコピーします。 そして結果のF4セルに =IF(COUNT($D:$D)<ROW(A1),"",INDEX(A:A,SMALL($D:$D,ROW(A1)))) という数式をいれ、H4セルまでオートフィルでコピーします。 最後にF4~H4セルを範囲指定し、H4セルのフィルハンドルで下へコピーすると 画像のような感じになります。 尚、生年月日の列はシリアル値で表示されますので、 ユーザー定義から表示形式を変更する必要があります。 以上、この程度ですが 参考になれば幸いです。 他に良い方法があれば読み流してくださいね。m(__)m
- aokii
- ベストアンサー率23% (5210/22062)
8月生まれを検索なら */8/*でしょうか。
補足
早速有難うございます。桁数を揃えるため 1935/08/07 のようにしていますので それと1935* でも検索できなかったのですが ?
お礼
tom04 さん 有難うございました。 yyyy/mm/dd ではAutoFilter にかからず これを基にした 別の列で 昭和10年 8月 7日 の *8月*(注含む検索) では、かかったので不思議に思っていました。ご指摘のとおり他のソフトとから csvで変換したデータです。ただ、何故か Mid関数が使えたのでこれを使って 文字列に変換し、無事目的を果たせました。 tom04 さんはじめ皆さん有難うございました。(Mid がきいてAutoFilter が きかない疑問は残りましたが)