Excelでフォーム入力をしたいと考えております。 下の画像はレッスンクラスの出欠確認票を表しています。 D列やF列などに各レッスン生の出欠状況・振替済かなどの情報を 入力しているます。

画像

Excel | Visual Basic332閲覧xmlns="http://www.w3.org/2000/svg">500

ベストアンサー

0

有難うございます。 表が一つの場合ならば何も問題無いのですが、 添付画像のように一つのタブに 複数のクラスがあり、表を使っています。 その場合、 右はTarget.Column <> 4 を増やしたり、 下はIf Target.Row < 8 Orとf Target.Row > 19 Or If Target.Row < 31 Orとf Target.Row > 42 Or で対応させたのですが、その場合 UserForm1を描くクラスごとに作らないとだめなのでしょうか? 宜しくお願いいたします。

画像

ThanksImg質問者からのお礼コメント

こちらからの回答がなかなかできず、申し訳ありませんでした。 私の方が質問に答えるのに時間がかかってしまい、 解決までできませんでしたが、改めて質問させていただきますので よろしければ、よろしくお願いいたします。

お礼日時:6/23 19:14

その他の回答(1件)

0

こんな感じです。 ※フォームについては添付図を参照してください。 機能:①「ジュニアクラス」シートのB列又はD列の8行目以降のセルをダブルクリックすると、関係するデータがフォームに取得されます。 ②フォームのデータに間違いがないかを確認し、問題がなければ「入力」ボタンを押して「出欠」シートの該当位置に転記します。 ■フォーム構成 TextBox1:クラス名 TextBox2:レッスン日 TextBox3:レッスン科目 TextBox4:出欠・振替状況 TextBox5:氏名 TextBox6:講師名 CommandButton1:入力 CommandButton2:終了(キャンセル) ■「ジュニアクラス」シートのBeforeDoubleClickイベント Private Sub Worksheet_BeforeDoubleClick(ByVal target As Range, Cancel As Boolean) If Intersect(target, Range("B:B", "D:D")) Is Nothing Then Exit Sub Else If target.Count > 1 Then Exit Sub Else Application.EnableEvents = False If target.Row > 7 Then Select Case target.Column Case 2 Call FormGet(2, target) Case 4 Call FormGet(4, target) End Select End If Application.EnableEvents = True End If End If End Sub Sub FormGet(ByVal x As Long, ByVal target As Range) With UserForm1 .TextBox1.Value = Replace(Cells(3, 2), "クラス", "") 'クラス名 .TextBox2.Value = Cells(5, x) 'レッスン日 .TextBox3.Value = Cells(6, x) 'レッスン科目 .TextBox4.Value = target.Offset(, 1).Value '出欠・振替状況 .TextBox5.Value = target.Value '氏名 jname = target.Value .TextBox6.Value = Cells(7, x) '講師名 End With UserForm1.Show End Sub ■フォームモジュール Option Explicit '入力 Private Sub CommandButton1_Click() Dim i As Long, r As Long Worksheets("出欠").Select With Worksheets("出欠") r = .Cells(Rows.Count, 1).End(xlUp).Row + 1 For i = 2 To r If .Cells(i, "C") = jname And .Cells(i, "D") = "" Then .Cells(i, "D") = UserForm1.TextBox1.Value .Cells(i, "E") = UserForm1.TextBox3.Value .Cells(i, "F") = UserForm1.TextBox6.Value .Cells(i, "G") = UserForm1.TextBox4.Value End If Next i End With Unload UserForm1 End Sub '終了 Private Sub CommandButton2_Click() Unload UserForm1 End Sub

画像