プロが教える店舗&オフィスのセキュリティ対策術

会員管理表を作っています。
集計シートと入金管理シートがあり、入金管理シートに入金日を
入力させ集計シート上でオートフィルターを実行し、表示された
データだけを入金管理シートに抽出し印刷するというマクロを
作っています。

問題は、入金管理シートに"2007/4/27"と入力し、このセルを
Stringで宣言した変数に格納すると値が"2007/04/27"となります。
オートフィルタでこの変数を使用すると、当然2007/04/27で検索され
ますが、集計シートの日付は"2007/4/27"と表示されていてヒット
しません。月や日付の04や05の0が入らないように変数にセット
する方法はありますか?ちなみにどちらの書式設定は、日付で
yyyy/m/dを指定しています。教えてください。

集計シートはこんな感じです。入金日でフィルタをかけてます
 A    B   C    D
会員番号 会員名 入金日   入金額
0001   ぐうた 2007/4/27 1,000
0002   ぐうこ 2007/5/1  500

管理シートはこんな感じです。入力時には04と入力せず4と入力
しています。
【2007/4/27】入金データ
A     B   C
会員番号 会員名 入金額
0001   ぐうた 1,000

A 回答 (4件)

こんにちは。

#1 のWendy02です。

こちらは、以下のようにすれば通るのですが、どうも、バグっぽい感じがまだ残っていますね。
私は、Excel 2003 + XP で行っているから出来るともいえます。

>"4/27/2007"となってしまいました。
と見えるものは、関係ありません。それは、Date型のリテラル値です。もちろん、文字で比較するわけではありません。しかし、最初に書いたように、Excelのバージョンで反応が変わってくるはずです。

>オートフィルタでヒットする日付は”2007/4/27”だけで”2007/04/27”では返ってきません。オートフィルタではシリアル値で検索していないのでしょうか?

ワークシートからは、Enter キーを入れることによって、代入値の型の自動変換がありますが、ワークシートでは型の自動変換はありません。

それは、ともかく、以下でうまく行かないのでしたら、Excelのバージョンを示してくださらないと、オートフィルタにはバージョンによって、まったく出来ないバグがあるのですから、分からないのです。

書式の一致は関係ありません。

Sub testSort()
Dim nyu_day As Date
nyu_day = Cells(3, "C").Value
Selection.AutoFilter Field:=8, Criteria1:=nyu_day, Operator:=xlAnd
End Sub

なお、うまく行かない簡単な対処法としては、隠し列を作って、そこにシリアル値に変換した数値をいれておき、次に、セルから取った検索値を、Long型の変数に入れて、検索するという方法があります。

この回答への補足

バージョン情報ですが、EXCELは2002です。XPはSP2です。

上記でテストしてみましたが結果変わらずでした。
うまくいかない場合の対処をやってみます。

補足日時:2007/04/27 14:41
    • good
    • 0
この回答へのお礼

いまくいかない対処法で回避できました。
いろいろとありがとうございました。
当面EXCEL2002を使っていくので、オートフィルタで日付を使った
抽出をするときは、シリアル変換された値で見ることにします。
とても助かりました。

お礼日時:2007/04/27 15:15

#02です。

試してみました。
A列に 2007/4/1、2007/4/2 … という日付
B1に 2007/4/8 ←絞り込みたい日付(書式を標準にすると39180)
を入力して

Sub Macro3()
Dim b
 b = Range("B1").Value
 Columns("A:A").AutoFilter Field:=1, Criteria1:=b
End Sub

を実行したらちゃんと絞り込みができましたよ。
ステップ実行してbの値をみると 2007/04/08 となります。

コントロールパネルの「地域と言語の設定」で日付の形式を色々と変更してみましたが、それでも動きます。何か問題が違うように感じますが… また【】も少し気になります・・

一度上のデータを入力して、このマクロが動くか教えていただけませんか? なお私の環境はXP SP2+Office2003です

この回答への補足

試してみました。確かに上記記述はうまくいきましたが
オートフィルタでオプションに入力されている値を確認しOKを
押したら表示されなくなってしまいました。

上記マクロではうまくいったので、変数を指定せず
nyu_day = Range("C3")とセットしてやってみましたが、やはり
結果は同じでした。
フィルタオプションでセットされていたのは、どちらの場合も
”4/27/2007”でした。

私の環境はEXCEL2002なのですが、バグなのでしょうか?

補足日時:2007/04/27 14:43
    • good
    • 0
この回答へのお礼

初期情報が足りず、ご迷惑をおかけしました。
紹介いただいた内容だとうまくいきましたが、応用がきかない
ようです。バージョンのせいでしょうか。

どうもありがとうございました。

お礼日時:2007/04/27 15:17

どのようなメソッド、ワークシート関数で絞り込み検索しているか書かれていませんが、日付(2007/4/27)はExcel内部では39199という数値データです。

これと"2007/04/27"の文字列を比較しても合致しません。

>Stringで宣言した変数に格納すると値が"2007/04/27"となります
なぜString型を使用するのですか? 日付を格納するなら変数をVariant型にしておけば良いのではないでしょうか。

この回答への補足

No1さんにも補足しましたが、Date型やVariant型にすると
オートフィルタにセットすると、4/27/2007とセットされてしまい
もとの集計シートの入金日で表示されている2007/4/27とあわずに
ヒットしません。

オートフィルタでヒットする日付は”2007/4/27”だけで
”2007/04/27”では返ってきません。オートフィルタではシリアル値で
検索していないのでしょうか?

補足日時:2007/04/27 13:22
    • good
    • 0

こんにちは。



Excelのバージョンにもよりますが、確か、Excel2000では、そのあたりで検索できないというバグがあります。その場合の方法はあります。

>入金管理シートに"2007/4/27"と入力し、このセルをStringで宣言した変数に格納すると値が"2007/04/27"となります。

>集計シートの日付は"2007/4/27"と表示されていてヒットしません。

String型でヒットするほうが不思議です。ワークシート上のデータは、シリアル値であるはずですから、どのような表示であれ、Date型のはずです。(つまり中身は変わらないということ)実際問題として、シートのセルに文字列日付を入れるのは不自然かもしれません。

文字型で入力されているなら、一旦、日付型に変更してあげなくてはなりません。

例:
myDate = CDate(Range("B1").Value)

ただし、動かない場合は、Excelバージョンとコードを見せてください。文章だけでは限界があります。

この回答への補足

実は、変数の型をDateで宣言して作ったのですがフィルタに
かけると"4/27/2007"となってしまいました。
そこで、いろいろ試してStringで変数をきりました。
2007/04/27も2007/4/27もシリアル値は同じである事は認識して
いるのですが、VBAでオートフィルタを使用する際にどのように
セットしたら、フィルタでヒットするかわからないでいます。

ちなみに今の記述は、以下のとおりです。(C3に入金日を入力する)
Dim nyu_day As String
nyu_day = Cells(3, "C")
Selection.AutoFilter Field:=8, Criteria1:=nyu_day, Operator:=xlAnd
これで、入金日の入力は2007/4/27と入力していますが
nyu_dayで取得すると2007/04/27となっています。
Date以外で使える変数は、どれがいいのでしょうか?

補足日時:2007/04/27 13:19
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!