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

エクセル2000です。
以下はG10セルに手作業で「入力規則」を設定するところをマクロの記録で残したものです。
リストは、2008/11/1,2008/11/5,2008/11/30 と yyyy/m/d 形式で手入力しましたが、なぜか記録では 11/1/2008,11/5/2008,11/30/2008 と m/d/yyyy 形式になっています。

手作業で設定した入力規則は正しく作動し、セルに表示されるドロップダウンリストも手入力どおり yyyy/m/d になっています。
ところが、記録したこのマクロをそのまま作動させると、今度はリストは m/d/yyyy になり、しかも日付ではなくなんと文字列になってしまうのです。
マクロを手直しし、
xlBetween, Formula1:="11/1/2008,11/5/2008,11/30/2008"を
xlBetween, Formula1:="2008/11/1,2008/11/5,2008/11/30"にしても同じ結果( m/d/yyyy かつ文字列)となります。
なにがいけないのでしょうか???

Sub Macro4()
'
' Macro4 Macro
' マクロ記録日 : 2008/10/31 ユーザー名 : MerlionXX

Range("G10").Select
With Selection.Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
xlBetween, Formula1:="11/1/2008,11/5/2008,11/30/2008"
.IgnoreBlank = True
.InCellDropdown = True
.InputTitle = ""
.ErrorTitle = "指定日"
.InputMessage = ""
.ErrorMessage = "リストの中から選んでね。"
.IMEMode = xlIMEModeDisable
.ShowInput = True
.ShowError = True
End With
End Sub

A 回答 (3件)

こんにちは^^



Formula1 に指定する文字列の先頭に
ひとつ、","を付け加えると解決する筈です。
(必要なら、セルを.Clearしてから実行してみてください)
(書式の表示形式は標準のままでも既定の日付表示になる筈)
随分前から、そういうものとして身に付いてしまっているので、
何故そうするのか、は、残念ながら、
今となっては私にはわかりません。すみません。
.Modifyでリストだけ変更する場合も同様です。

たぶん、同じ質問について考えたのだと思います(^^;
私はたぶん、スルーです。

では、また
    • good
    • 0
この回答へのお礼

さっそくありがとうございました。
試したところ、おっしゃる通りでした。
でも、なんででしょうね、不思議です。

お礼日時:2008/10/31 12:48

こんばんは。



余計なことかもしれませんが、最近、同じような設置のコードを書いたばかりです。しかし、私は、そのようなコードを考えたことがありません。

VBAの原則として、「ワークシートはワークシートに任せる」というのがあります。
(誰の原則論とか、突っ込みはしないでくださいね。)
VBAとワークシートは完全には一致してきません。

たぶん、Formula1 には、ローカルモードがないのか、セルとの結びつきがないのだと思います。それでは、実用度が低いのではないでしょうか。固定値なら良いのですが、日付の場合は、元々変動しますから、マクロでは、こういう場合、設置しにくいように思うのです。

>日付ではなくなんと文字列になってしまう

それに、おっしゃっているように、その入力規則のセルには、日付認識(シリアル値)をしていません。

ですから、私が最近書いた方法は、

予め、AA1:AA3 に日付を書いておいて、以下のようにします。

=TODAY()
=WORKDAY(TODAY(),10)
=WORKDAY(TODAY(),20)

Formula1:="=" & Range("AA1:AA3").Address

のような数式を入れます。それを入力規則のリストに入れます。
    • good
    • 0
この回答へのお礼

Wendy02さん、いつもありがとうございます。
「ワークシートはワークシートに任せる」という原則ですか。
勉強になります。

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

お礼日時:2008/11/01 14:19

補足です。



Formula1:=",2008/11/1,2008/11/5,2008/11/30"
(既定がyyyy/m/dの場合)

ってことです。失礼。
    • good
    • 0
この回答へのお礼

ご丁寧にありがとうございます。
m/d/yyyyの場合は、
Formula1:=",11/12008,11/5/2008,11/30/2008" ではだめのようです。

不思議です。

お礼日時:2008/10/31 13:09

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