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

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

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

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

Q&A

解決済

3回答

1195閲覧

リストボックスでシートの複数選択と時間表記

milk1218

総合スコア20

VBA

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

0グッド

0クリップ

投稿2021/09/29 01:17

編集2021/09/29 14:18

以前質問しました、年月日と時間の上書きについてと内容が似ていますが
コードの形式を変えたので再度質問致します。
前回とは異なり、今回はリストボックスを使うことにしました。

・一つのリストボックスで複数のシートを選択するのは可能なのか
・編集フォームのテキストボックスで時間が小数点表記になってしまう

以上の二点が問題点、疑問点として挙がっています。

発生している問題・エラーメッセージ

該当のソースコード

Private Sub cb_touroku_Click() '日付出勤登録ボタン Dim tgtRow As Long tgtRow = Cells(32, 1).End(xlUp).Row tgtRow = tgtRow + 1 For i = 2 To 32 For Each SH In ActiveWorkbook.Worksheets With ActiveSheet .Cells(tgtRow, 1).Value = DateSerial(Me.cb1.Value, Me.cb2.Value, Me.cb3.Value) .Cells(tgtRow, 2).Value = TimeSerial(Me.TextBox1.Value, Me.TextBox2.Value, 0) '出勤時刻 End With Next Next i MsgBox "登録しました" End Sub Private Sub cb_touroku2_Click() '退勤・休憩登録ボタン Dim tgtRow As Long tgtRow = Cells(32, 1).End(xlUp).Row For r = 2 To 32 For Each SH In ActiveWorkbook.Worksheets With ActiveSheet .Cells(tgtRow, 3).Value = TimeSerial(Me.TextBox3.Value, Me.TextBox4.Value, 0) '退勤時刻 .Cells(tgtRow, 4).Value = TimeSerial(Me.TextBox5.Value, Me.TextBox6.Value, 0) '休憩開始時刻 .Cells(tgtRow, 5).Value = TimeSerial(Me.TextBox7.Value, Me.TextBox8.Value, 0) '休憩終了時刻 End With Next Next r MsgBox "登録しました" End Sub Private Sub UserForm_Initialize() '年月日選択プルダウン With cb1 .AddItem "2021" End With With cb2 .AddItem "1" .AddItem "2" .AddItem "3" .AddItem "4" .AddItem "5" .AddItem "6" .AddItem "7" .AddItem "8" .AddItem "9" .AddItem "10" .AddItem "11" .AddItem "12" End With With cb3 .AddItem "1" .AddItem "2" .AddItem "3" .AddItem "4" .AddItem "5" .AddItem "6" .AddItem "7" .AddItem "8" .AddItem "9" .AddItem "10" .AddItem "11" .AddItem "12" .AddItem "13" .AddItem "14" .AddItem "15" .AddItem "16" .AddItem "17" .AddItem "18" .AddItem "19" .AddItem "20" .AddItem "21" .AddItem "22" .AddItem "23" .AddItem "24" .AddItem "25" .AddItem "26" .AddItem "27" .AddItem "28" .AddItem "29" .AddItem "30" .AddItem "31" End With End Sub Private Sub UserForm_Initialize() 'リストボックスのユーザーフォーム Dim lastrow As Long Sheets("10", "11", "12").Select         With ListBox1 .ColumnHeads = True .ColumnCount = 5 .ColumnWidths = "70;50;50" .RowSource = "10!" & Range("A2", "E2" & lastrow).Address    End With Private Sub cbform5go_Click() '修正ボタン Dim tgtRow As Long tgtRow =                          With Sheet2 .Cells(tgtRow, 2).Value = Me.tx2.Value      '出勤時間 .Cells(tgtRow, 3).Value = Me.tx3.Value     '退勤時間 End With End Sub Private Sub UserForm_Initialize()        'テキストボックスで修正するユーザーフォーム Dim tgtRow As Long tgtRow =    With Sheet2 Me.tx2.Value = .Cells(tgtRow, 2).Value         '出勤時間 Me.tx3.Value = .Cells(tgtRow, 3).Value           '退勤時間 End With

試したこと

DATE型を使用。

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

シートの「出勤時間」と「退勤時間」のセルは「10:00」のような時間表記になるように設定

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

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

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

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

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

hatena19

2021/09/29 14:10 編集

私の回答で解決したので、質問内容を変更したのですね。 これだと、後から見た人が私の回答が意味不明なものになってしまっています。 できれば、最初の質問の状態に戻してもらえませんか。 そのうえで、この質問は解決済みにして、追加の質問は別に新規にしなおししてください。 最初の質問に戻すには、質問のタイトルのしたの 編集 2021/09/29 21:26 の部分をクリックすると編集履歴を見ることができますので、その最初の履歴をコピーして貼り付ければ戻せます。
milk1218

2021/09/29 14:11

畏まりました……! 大変失礼致しました!修正して新規で再投稿します。
guest

回答3

0

引用テキスト一つのリストボックスに複数のシートのリストを表記させること

2つのシートの値を組み合わせて一つのリストボックスに表示したいということであれば
配列の作り方次第だと思います。
下記コードのようにすると
00 01 02 03 04 05
10
20
30
40



100      105
というリストボックスができます。
カラム0からカラム2は、シートAの値
カラム3からカラム5は、シートBの値という具合にセットすればよいのではと思います。

dim A(10,5) As String dim I As Long dim J As Long For I = 0 To Ubound(A,1) For J = 0 To Ubound(A,2) A(I, J) = I & J Next J Next I Me.ListBox1.List = A

投稿2021/09/29 15:08

ryusora

総合スコア26

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

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

milk1218

2021/09/30 02:13

ありがとうございます!!! 参考にさせていただきます・・・!!
guest

0

<一つのリストボックスに複数のシートのリストを表記させることは可能なのでしょうか?>
テストしてみました。
左側の画像は最初のUserFormを設定したシート「入力」です。
シート「入力」をコピーしたシート「入力(2)]が右側の画像です。
「Form呼び出し」ボタンを 両方とも、押した結果の画像です。イメージ説明
不可能でした。

投稿2021/09/29 12:00

syousuke.33

総合スコア312

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

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

milk1218

2021/09/29 12:13

ありがとうございます! リストのシートの複数選択は無理なんですね・・。助かりました!!
guest

0

ベストアンサー

セルには時刻はシリアル値で格納されています。
シリアル値は1899年12月30日を起点とした経過日数です。
それをセルの書式設定で日付書式で表示してます。
書式設定によって西暦や和暦などお好みの書式に変更できます。

VBAで扱う場合は、適切な書式に変換するのは自前でする必要かあります。

vba

1 2Private Sub UserForm_Initialize()        'テキストボックスで修正するユーザーフォーム 3 Dim tgtRow As Long 4 tgtRow = 2 5 With Sheet2 6 Me.tx2.Value = Format(.Cells(tgtRow, 2).Value,"hh:mm") 7 Me.tx3.Value = Format(.Cells(tgtRow, 3).Value,"hh:mm") 8 End With 9End Sub

投稿2021/09/29 01:35

編集2021/09/29 02:12
hatena19

総合スコア34075

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

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

milk1218

2021/09/29 02:06

データ型云々ではなく、自分で設定しなければならなかったのですね・・!!初めて知りました・・・。 hh:mmで設定したら時刻表記出来ました・・!!ありがとうございました・・・!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問