アプリ版:「スタンプのみでお礼する」機能のリリースについて

ComboBox1のIMEModeプロパティが0-fmIME MODE NOControlに設定されています。そして、下記コードを作成しました。
Private Sub ComboBox1_Change()
ComboBox1 = Format(ComboBox1, "m月d日")
End Sub
このコンボボックスに例えば、8/30と入力すると「8月3日0」と表示されてしまいます。
これを8月30日と表示するにはどうすれば良いのでしょうか?
よろしくお願いします。

A 回答 (2件)

私の方が勉強が足りないのかもしれないが


色々書きましたが、結論は、DateValue関数を使えばよいのではないですか。
(1)VBAとあるから、エクセルVBAかアクセスVBAでしょうね
(2)コンボボックスは、設定したアイテムの中から選ぶのが基本だと思うが、本件ではテキスト部へ日付を入力するということですか。
(コンボでアイテムを選択するのは、日付は適さないととおもう。
年、月、日と3段構えになってしまう。質問はそのようには書いてない。)テキストボックスでよいのではと別途疑問は持つ。
(3)フォーマットでm月d日を適用できるのは、エクセルの場合は元が日付セリアル値でなければならないはず。
一方コンボやテキストボックスの返り値は、入力した場合は文字列ではないですか。
これにFormatを適用しても、ダメではないですか。
エクセルでは書式はNumberFormatといい、Numberデータを中心に
書式を設定することが明確に言われている。文字列データへの
書式設定はほとんど無い。
ただエクセルでは、入力した文字列数字データを強制的に数値化したりする力が強いので、わかりにくい例がある。
(4)Cells(2, 1) = DateValue(UserForm1.ComboBox1.Value)
としますと、8/13とコンボのテキスト部に入力したデータが、A1セルに2007/8/13の日付シリアル値で入りました。
これが解決策では無いですか。書式はセルに別途適応する。
Sub test02()
Cells(7, 1).NumberFormat = "m月d日"
End Sub
ーー
エクセルでは、日付を文字列にしてセルにセットするのは、限られた場面で、日付計算・多彩な書式設定に利用できず、有害の方が多い。
ーー
http://park5.wakwak.com/~weblab/refFormat.html
VB.NETでは、Format関数は、文字列を数値に変換しません。
とあるところを見ると、以前は数値化していた?。
すると8/30は30分の8に似られる?
ーー
エクセルVBAで
Cells(3, 1) = Format(8 / 30, "m月d日")
Cells(3, 1) = Format("8 / 30", "m月d日")
はいずれも書式設定(m月d日)した文字列にならない。
書式は別途セルに書式設定しないといけない。
文字列でVBAで入れると、エクセルの強力な日付転換機能が働き
書式なし、または設定済みの日付書式の日付になるよう。
(Cells(3, 1) = Format(8 / 30, "m月d日")は12月30日になるが私には説明できない。)

この回答への補足

ご回答ありがとうございます。
>(1)VBAとあるから、エクセルVBAかアクセスVBAでしょうね
エクセルVBAです。
>(2)コンボボックスは、設定したアイテムの中から選ぶのが基本だと思うが、本件ではテキスト部へ日付を入力するということですか。
はい、そうです。
私の質問の仕方が悪かったようです。
>このコンボボックスに例えば、8/30と入力すると「8月3日0」と表示されてしまいます。
コンボボックス自体の四角の中に「8月3日0」と表示されるということです。

補足日時:2007/08/14 18:42
    • good
    • 0

Changeイベントでの変更よりKeyDownイベントで変更したほうがよくありませんか


Private Sub KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
  if KeyCode = vbKeyReturn then
    ComboBox1.text = Format( ComboBox1.Text, "m月d日")
  end if
End Sub
といった具合で Enterキーが押されたらコンボボックスの内容を変更するようにします

Changeイベントだけでの対応なら
8 を入力すると 1月7日の表示になります
8/30を続けて入力
1月7日部分を選択してDelキーを押す
といった操作をすれば 『8月30日』と表示されます
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
勉強になりました。

お礼日時:2007/08/14 18:41

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

このQ&Aを見た人はこんなQ&Aも見ています