こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

Excel VBA(Win2000、Office2000)

現在、VBAでExcelのシートに書き込むフォームを作っており、日付に関することで困っています。
フォーム上には複数のComboBox、TextBoxが並んでおり、OKボタンをクリックすることで、フォーム上に並んだ、ComboBox、TextBoxの値をセルに書き込むようにしています。
問題の日付に関する質問についてですが・・・
ユーザーフォーム上に
年を入力するComboBox1 → 2004
月を入力するComboBox2 → 5
日を入力するComboBox3 → 7
*いづれも、プルダウンから数字を選択して入力するようにしています。

この3つの入力値を合わせて、2004/05/07と認識させて、TextBox1に"金"と表示させたいのですが、どのようにしたら良いでしょうか?
TextBox1表示されるタイミングは、日を入力するComboBox3が入力された時としたいです。

宜しくお願い致します。

投稿日時 - 2004-05-07 10:00:43

QNo.850755

すぐに回答ほしいです

質問者が選んだベストアンサー

以下のようなパターンでどうでしょうか?

まず日付型の関数を宣言しておいて、
その変数にコンボボックスから選択されてた各値を/付きで結合して、格納。
格納された時点で結合されたテキストは日付として変換して認識されます(日付型として宣言しておくところがミソ)

あとは、その変数に格納されている日付データを
WEEKDAY関数を使って曜日を表すシリアル値を計算。
さらに、ワークシート関数のTEXTを使って、曜日の書式に変換してテキストボックスにセット。

サンプルコード
------------------------------------------------------------------
'変数dを日付型で宣言
Dim d As Date

'変数dにコンボボックスで選択されている各値を結合して格納
d = Me.ComboBox1.Value & "/" & Me.ComboBox2.Value & "/" & Me.ComboBox3.Value

'変数dに格納されている日付データから曜日を計算してTextBox1に値セット
Me.TextBox1.Value = Application.Text(Weekday(d), "aaa")

投稿日時 - 2004-05-07 10:41:55

お礼

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

投稿日時 - 2004-05-07 12:35:37

ANo.2

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.3

質問と違い3つのテキストボックスでやりましたが
Private Sub TextBox3_LostFocus()
d = DateSerial(TextBox1.Text, TextBox2.Text, TextBox3.Text)
Cells(1, "A") = Format(d, "yyyy/mm/dd(aaa)")
Cells(2, "A") = Format(d, "(aaa)")
End Sub
をご参考に。
DareSerial関数とFormat関数がお勧めです。
VBの関数にWeekday関数があるので、WorksheetFunctionは付ける必要ないのではないですか。
DareSerial関数とFormat関数もVB(VBAでなく)にある関数です。

投稿日時 - 2004-05-07 11:16:18

お礼

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

投稿日時 - 2004-05-07 12:35:06

ANo.1

エクセルVBA上のフォーム限定ということで、

ComboBox3 のchangeイベント発生時に

strDate = ComboBox1.Text & "/" & ComboBox2.Text & "/" ComboBox3.Text

TextBox1.Text = Application.WorksheetFunction.Text(strDate, "aaa")

というのはどうでしょうか?

投稿日時 - 2004-05-07 10:40:41

お礼

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

投稿日時 - 2004-05-07 12:34:42

あなたにオススメの質問