- ベストアンサー
Excel VBA(Win2000、Office2000)
現在、VBAでExcelのシートに書き込むフォームを作っており、日付に関することで困っています。 フォーム上には複数のComboBox、TextBoxが並んでおり、OKボタンをクリックすることで、フォーム上に並んだ、ComboBox、TextBoxの値をセルに書き込むようにしています。 問題の日付に関する質問についてですが・・・ ユーザーフォーム上に 年を入力するComboBox1 → 2004 月を入力するComboBox2 → 5 日を入力するComboBox3 → 7 *いづれも、プルダウンから数字を選択して入力するようにしています。 この3つの入力値を合わせて、2004/05/07と認識させて、TextBox1に"金"と表示させたいのですが、どのようにしたら良いでしょうか? TextBox1表示されるタイミングは、日を入力するComboBox3が入力された時としたいです。 宜しくお願い致します。
- みんなの回答 (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")
その他の回答 (2)
- imogasi
- ベストアンサー率27% (4737/17069)
質問と違い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でなく)にある関数です。
お礼
ありがとうございました。
- ssssssssss
- ベストアンサー率23% (24/103)
エクセルVBA上のフォーム限定ということで、 ComboBox3 のchangeイベント発生時に strDate = ComboBox1.Text & "/" & ComboBox2.Text & "/" ComboBox3.Text TextBox1.Text = Application.WorksheetFunction.Text(strDate, "aaa") というのはどうでしょうか?
お礼
ありがとうございました。
お礼
ありがとうございました。助かりました。