電子書籍の厳選無料作品が豊富!

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

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

宜しくお願い致します。

A 回答 (3件)

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



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

あとは、その変数に格納されている日付データを
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")
    • good
    • 0
この回答へのお礼

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

お礼日時:2004/05/07 12:35

質問と違い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でなく)にある関数です。
    • good
    • 0
この回答へのお礼

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

お礼日時:2004/05/07 12:35

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



ComboBox3 のchangeイベント発生時に

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

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

というのはどうでしょうか?
    • good
    • 0
この回答へのお礼

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

お礼日時:2004/05/07 12:34

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