前提・実現したいこと
暗記・出力についてです。
現在暗記が上手くいっていません。
現状、画像のように時間はシート上でセルが空の場合「0:00:00」表示になっており、実働時間・備考は「0」となっています。
シートのセルの書式設定は時刻は全て「文字列」、実働時間は時間計算がしたいので「時刻」備考は「標準」です。
この場合でのFormat関数の記述の仕方もよく解らず、解決策があれば教えて頂きたいです・・・。
【解決したいこと】
・「0:00:00」表記ではなく、24時間制の「00:00」表記にしたい
・空白のテキストボックスに数字を入力、或いは数字を書き換えて更新押しても、セルへ保存されない
・備考は入力がない場合のデフォルトは空白(0はいらない)
発生している問題・エラーメッセージ
エラーメッセージ
該当のソースコード
'標準フォーム Option Explicit Type attendance starttime As Date '始業時刻 endtime As Date '終業時刻 breakstart As Date '休憩時間のはじめ breakend As Date '休憩時間のおわり worktime As Single '実働時間 note As Single '備考 End Type '以下ユーザーフォーム Private monthly() As attendance '構造体の配列を宣言 Private Sub CommandButton1_Click() '更新ボタン Call AttendanceSave 'Call SetAttendance 'ボタン押すたびに「0:00:00」と「0」に上書きされてしまうため、今は無効状態 End Sub Public Sub AttendanceSave() '勤怠保存 ReDim monthly(1 To 31) Dim i As Long For i = 1 To 31 monthly(i).starttime = Cells(i + 1, 3) monthly(i).endtime = Cells(i + 1, 4) monthly(i).breakstart = Cells(i + 1, 5) monthly(i).breakend = Cells(i + 1, 6) ' monthly(i).worktime = Cells(i + 1, 7) '自動計算されるようにしたいため入力は無し monthly(i).note = Cells(i + 1, 8) Next i End Sub Public Sub SetAttendance() '勤怠出力 Dim i As Long Sheets(cmbMonth.Value).Activate For i = LBound(monthly) To UBound(monthly) Me.Controls("txtStarttime" & i).Value = monthly(i).starttime Me.Controls("txtEndtime" & i).Value = monthly(i).endtime Me.Controls("txtBreakstart" & i).Value = monthly(i).breakstart Me.Controls("txtBreakend" & i).Value = monthly(i).breakend Me.Controls("txtWorktime" & i).Value = monthly(i).worktime Me.Controls("txtNote" & i).Value = monthly(i).note Next i End Sub Private Sub UserForm_Initialize() Dim i As Integer '当年、来年の西暦をリストに設定 For i = 0 To 1 cmbYear.AddItem Year(Date) + i Next cmbYear.Value = Year(Date) '当年を初期値に For i = 1 To 12 'シートは1から12まで cmbMonth.AddItem i Next cmbMonth.Value = Month(Date) '当月を初期値に '初期値を設定することで cmbMonth_Change が呼び出される 'フォームを画面センターに表示 Me.StartUpPosition = 2 '当年を初期設定←とりあえず先頭 cmbYear.ListIndex = 0 End Sub Private Sub cmbYear_Change() '年選択プルダウン SetWeekLabel 'SetData End Sub Private Sub cmbMonth_Change() '月選択プルダウン Debug.Print cmbMonth.Value Worksheets(cmbMonth.Value).Select '先に月シートを選択してから '曜日設定やテキストへの転記をする SetWeekLabel '曜日設定 Call AttendanceSave '選択したシートデータを構造体配列へ Call SetAttendance '構造体配列からテキストへ End Sub
試したこと
ここに問題に対して試したことを記載してください。
補足情報(FW/ツールのバージョンなど)
・構造体を使用してデータを格納しています
・正規表現を使って24時間制にしています。朝の8時や深夜2時などは「08」、「02」です。
・備考はシート側で「12345」などの数字を入力した場合、出力されます。
「テスト」などの文字はエラーになってしまいます。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/10/19 04:43
2021/10/19 05:59
2021/10/19 08:15
2021/10/21 09:01
2021/10/22 05:09