質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

解決済

1回答

1038閲覧

シートとユーザーフォームの連携

milk1218

総合スコア20

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

0クリップ

投稿2021/10/10 15:15

シートのセルに入っている値をユーザーフォームのテキストボックスに表示させたいです。

月毎のシートがあり、ユーザーフォームから勤怠登録するアプリを作成しています。
出勤時間、退勤時間、休憩時間、備考をユーザーフォームのテキストボックスに
入力して、該当の月のセルへ値を入れるものです。
(※まだ、ユーザーフォームからセルへ値を登録するプロシージャは作成していません)

イメージ説明

例えば、上記のように10月をユーザーフォームでプルダウンで選択したら
セル上に入っている数値や文字(備考)がそれぞれのテキストボックスに表示されるよう
にしたいです(時間修正なども後々加えるため)

恐らくループ文を使うのだと自分では考えていますが、まだいまいち書き方を
理解していないのでご教授頂けると幸いです。

エラーメッセージ

該当のソースコード

Private Sub UserForm_Initialize() '年を設定 cmbYear.AddItem "2021" cmbYear.AddItem "2022" '当年を初期設定←とりあえず先頭 cmbYear.ListIndex = 0 '月を設定 cmbMonth.AddItem "1" cmbMonth.AddItem "2" cmbMonth.AddItem "3"   '以下省略 '当月を初期設定←とりあえず先頭 cmbMonth.ListIndex = 0 ' Dim j As Integer                 '←自分で考えているところ。 'For i = 1 To 31 ' Me.Controls("txtStarttime" & i) = Cells(j, i) 'Next i End Sub Private Sub cmbYear_Change() SetWeekLabel End Sub Private Sub cmbMonth_Change() SetWeekLabel End Sub Private Sub SetWeekLabel()             '年月選択した際に曜日の表示を変える Dim intDay As Integer '日付用の変数 For intDay = 1 To 31 If IsDate(cmbYear.Text & "/" & cmbMonth.Text & "/" & Format(intDay)) Then Me.Controls("lblWeek" & Format(intDay)).Caption = _ Format(CDate(cmbYear.Text & "/" & cmbMonth.Text & "/" & Format(intDay)), "aaa") '日付型 (Date) に変換 Else Me.Controls("lblWeek" & Format(intDay)).Caption = "" End If Next End Sub

試したこと

ここに問題に対して試したことを記載してください。

補足情報(FW/ツールのバージョンなど)

txtStarttime1 = 始業時刻(1日月曜日の部分) 2,3,4,5・・・と31まであります。下記のものたちも同様です。
txtEndtime1 = 終業時刻
txtBreakstart1 = 休憩時間のはじめ
txtBreakend1 = 休憩時間の終わり
txtWorktime1 = 実働時間
txtNote1 = 備考

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hatena19

2021/10/10 16:14

月はシート名ということは画像から分かりますが、 年はどのように分けているのでしょうか。 年毎にブックを作成しているのでしょうか。 2021.xlsx, 2022.xlsx というように。 だとするとユーザーフォームがあるマクロブックは別に必要ですね。 その辺の設計がどうなっているのかの説明を追記してもらえますか。
milk1218

2021/10/11 01:40

ご質問ありがとうございます! 年毎にブック分けはまだ出来ていません・・! この辺りをどのように設計したら使いやすいかまだ模索中です。
guest

回答1

0

ベストアンサー

修正依頼にコメントしましたが、年の区別に関しては無視して、
データのあるシートにユーザーフォームマクロもあるとして、
回答しておきます。

例えば、上記のように10月をユーザーフォームでプルダウンで選択したら

セル上に入っている数値や文字(備考)がそれぞれのテキストボックスに表示されるよう
にしたいです(時間修正なども後々加えるため)

まず、コンボボックスで月を選択したときに、その月のシートのデータを表示したいということなので、月コンボボックスのClickイベントかChangeイベントがいいでしょう。

Changeイベントから既に SetWeekLabel を呼び出しているので、同様に関数にして呼び出すといいでしょう。

vba

1Private Sub cmbYear_Change() 2 SetWeekLabel 3 SetData 4End Sub 5 6Private Sub cmbMonth_Change() 7 SetWeekLabel 8 SetData 9End Sub 10 11 12Public Sub SetData() 13 With Sheets(Me.cmbMonth.Value) 14 .Select '月コンボボックスで選択した月のシートをアクティブに 15 16 Dim lastDay As Long 17 lastDay = DateSerial(cmbYear.Value, cmbMonth.Value + 1, 0) '月末日 18 19 Dim intDay As Long 20 For intDay = 1 To 31 21 If i <= lastDay Then 22 Me.Controls("txtStarttime" & i).Value = Foramt(Cells(i, 3).Value, "nn:dd") 23 Me.Controls("txtEndtime" & i).Value = Foramt(Cells(i, 4).Value, "nn:dd") 24 Me.Controls("txtBreakstart" & i).Value = Foramt(Cells(i, 5).Value, "nn:dd") 25 Me.Controls("txtBreakend" & i).Value = Foramt(Cells(i, 6).Value, "nn:dd") 26 Me.Controls("txtWorktime" & i).Value = Foramt(Cells(i, 7).Value, "nn:dd") 27 Me.Controls("txtNote" & i).Value = Cells(i, 8).Value 28 Else 29 Me.Controls("txtStarttime" & i).Value = "" 30 Me.Controls("txtEndtime" & i).Value = "" 31 Me.Controls("txtBreakstart" & i).Value = "" 32 Me.Controls("txtBreakend" & i).Value = "" 33 Me.Controls("txtWorktime" & i).Value = "" 34 Me.Controls("txtNote" & i).Value = "" 35 End If 36 Next 37 End With 38End Sub

投稿2021/10/10 16:51

hatena19

総合スコア33795

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

milk1218

2021/10/11 01:42

ご丁寧にありがとうございます・・! 無知で申し訳ないのですが、Publicの箇所を標準モジュールに記載したところ コンパイルエラー: Me キーワードの使用方法が不正です。 というエラーメッセージが出てくるのは何が原因なのでしょうか・・?
hatena19

2021/10/11 01:44

ユーザーフォームモジュールに記述して下さい。
milk1218

2021/10/11 08:57

ありがとうございます・・・! With Sheets(Me.cmbMonth.Value) の部分がインデックスが有効な範囲にありませんと出るのですが コンボボックスとシートの連携が出来ていないからでしょうか・・? お手すきの際にもし解りそうであれば教えていただけると幸いです。
hatena19

2021/10/11 11:50

cmbMonth.Value の値は、シート名になってますか。 つまりコンボボックスで選択している月のシートは存在していますか。
milk1218

2021/10/12 06:54

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問