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

Excel 2003 でも Excel 2007 でもかまいません。(OSもXP・Vistaどちらも使っています。)
日付入力はプルダウンメニューから選ばせるとき、どこかのセルに選択肢のリスト(例えば M1:M31に 2008/10/1~2008/10/31)を作っておいて、入力規則を「リスト」にする、という方法はわかりますが、リストを作らないでもっと簡単に選ばせる方法はないでしょうか?

イメージとしては、セルB2に、日付未入力の段階では
「(ここに日付を入力)」
と表示させておいて、▼を押すとプルダウンが現れて、その先頭は今日の日付(=today() ??)で、下に向かって日付が古くなっていく(とりあえず1週間分くらいあれば足ります)という感じです。任意の日付を(2007/4/5など)入力できるとなお良いですが無理は言いません。(私は、入力規則をリストまたは任意日付、とする方法を知らないので。)

セルに値を入力、じゃなくて、何かのコントロールでもかまいません。マクロで日付を読み込めることが必須条件です。
大がかりなマクロを組めば期待するものを実現できるかも知れませんが、なるべくシンプルな方法をご存じの方、いらっしゃいませんでしょうか。実は私自身、Excel 2007 で「(ここに日付を入力)」などを見たことがある気がするのですが、ど忘れしてしまいました。よろしくお願いします。

A 回答 (3件)

> ▼を押すとプルダウンが現れて、その先頭は今日の日付(=today() ??)で、下に向かって日付が古くなっていく(とりあえず1週間分くらいあれば足ります)



> リストを作らないで、という条件付きでお願いします。

自分ではつくらないけどVBAに作らせちゃうというのはだめですか?

Sub 日付リスト作成()
Dim lst As String
Range("B2") = "(ここに日付を入力)"
With Range("B2").Validation
.Delete
For i = 0 To 7
lst = lst & Format(Date - i, ",yyyy/mm/dd")
Next i
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
xlBetween, Formula1:=lst
.IgnoreBlank = True
.InCellDropdown = True
.InputTitle = ""
.ErrorTitle = "指定日"
.InputMessage = ""
.ErrorMessage = "リストの中から選んでね。"
.IMEMode = xlIMEModeNoControl
.ShowInput = True
.ShowError = True
End With
End Sub
    • good
    • 2
この回答へのお礼

なるほど!美しい。

#2のimogasiさんのご回答を見て初めて知ったのですが、VBA上で
Formula1
の部分でプルダウンリストを直接指定できるのですね。シート上にリストのスペースを用意したくない、という目的に合致していて助かります。あとは「マクロの記録」で、コードが出てきますが、
With の中に For 文を入れるとこんな便利なことができる、
というのはとても勉強になりました。(.でしか続けられないと思いこんでいたので。)

ありがとうございます!!

お礼日時:2008/11/01 00:17

リストを使わないで、に拘っているが、使っている人の横で見ただけではその仕組みはわからないでしょう。

どれだけ複雑な知識と技能によって出来上がっているかわからない。
エクセルの普通のやり方では出来ません。
シートのセルにリストの値を持たない、でならできます(入力規則のリストの設定で直接指定)が、いずれ日々が進むと作り直しになります。それを自動で7日先とかにずらして進めていくとすると、VBAの仕組みが必要です。勉強してください。
もう少し先を行く人は、コントロールという仕組みで、小型カレンダーのようなものを表示させ、日付をクリックすると日付をセルにセットできます。年・月も移動させられます。
表面だけ見るウインドウズのGUIもそれなりの仕組みがあって、最低VBA程度は勉強しないと、さらにコントロールの勉強をしないと、エクセル程度だけの勉強では、使えません。
説明例
http://www.atmarkit.co.jp/fwin2k/win2ktips/357ca …
上記に注意事項を加えておくと
Sheet1等のコード表示で出るVBEの画面にイベントのコードを貼り付ける。
コードは上記WEBに載っているが
Private Sub calendar1_Click()
'Cells(1, 1).Value = Calendar1.Value
ActiveCell = Calendar1.Value
End Sub
の方が応用が利くと思う。
これらも「カレンダーコントロール」でGoogle照会すれば
すぐ出てくることだ。そういうのをやったのかな。
    • good
    • 1
この回答へのお礼

ご回答ありがとうございます。

VBAは仕事でけっこう使っていますが、コントロールはからっきし弱いです。自分の身の丈以上のことをやろうとしているからかも知れません。
カレンダーコントロールの名前は初めて聞きました。だいぶイメージに近いです!カレンダーコントロールの存在を知らなかったので(プルダウンばかりイメージしたので「カレンダー」という発想もなかった)「カレンダーコントロール」について調べてもいませんでした。
早速やってみようと思ったら私のエクセル(自宅は2007)でできなかったので、もう少し調べてみます。ACCESSが入っていないから追加コントロール候補にカレンダーが出てこないのかな。

ところで前半部分の、入力規則のリストの設定で直接指定、というのは目からうろこでした。
10/3,10/5-10/10,10/13
という方法ですね。なるほど、「要素」みたいな数列で列記できるんか。便利。VBAでずらす方法はわかります。
ここに、ワイルドカードを入れて、「リストから選ぶ、または任意の日付を入力する」という規則を作れませんか?
10/3,*/*
10/3,?/?
10/3,#/#
など試してみましたがダメでした。もう少し粘って調べて、解決しなければ明日別の質問を立ててみます(人に頼る、という姿勢は良くないですけどね)。ありがとうございました。

お礼日時:2008/10/31 23:24

>その先頭は今日の日付(=today() ??)で、下に向かって日付が古くなっていく


セルを使用しますが
A1 =TODAY()
A2 =A1-1
以下コピィした範囲を指定してではダメなのでしょうか。
目障りなら非表示にしておくとか、シートごと非表示にも出来ますが。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

ただ、リストを作らないで、という条件付きでお願いします。
(見たことがあるので・・・)

お礼日時:2008/10/30 23:45

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