• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:EXCEL VBA チェックボックスについて)

Excel VBAチェックボックスについて

このQ&Aのポイント
  • Excel VBAを使用してユーザーフォームにチェックボックスを作成し、セルに転記する方法について教えてください。
  • チェックボックスがオンの場合にはセルに「有」と表示し、オフの場合には「無」と表示したいです。
  • 初心者ですので、どのようなコードを使うのかがわかりません。具体的な方法を教えていただけると助かります。

質問者が選んだベストアンサー

  • ベストアンサー
  • hana-hana3
  • ベストアンサー率31% (4940/15541)
回答No.2

>Cells(GYO, 25).Value = (.CheckBox1.Value) 'チェックボックス* 単純には、 If .CheckBox1.Value Then Cells(GYO, 25).Value = "有" Else Cells(GYO, 25).Value = "無" End If のようにIF文で判断して記入するだけです。 「15個のチェックボックス」と書かれていましたが、個別に値を参照して記入するのでしょうか? それとも、15個のうち1個でもチェックが付いて居れば・・・と判断するのでしょうか? Private Sub CheckBox1_Click() End Sub のプロシージャは削除してかまいません。 チェックボックスがクリックされた時に何らかの処理が必要な場合を除いて通常は使う事はありません。 複数のコントロールをまとめて処理する方法があります。 http://itpro.nikkeibp.co.jp/article/COLUMN/20070511/270730/ -------ざっと修正(予想も含めて)して見ました。 不具合等はご自身で修正してください。 Public g_swOK As Byte ' フォームで登録が押されたかを判定するスイッチ ' ユーザー情報の登録処理 Public Sub TOUROKU(GYO As Long) Dim i As Integer ' 現在選択行を取得 GYO = ActiveCell.Row ' ユーザー情報の登録のフォームを表示 Load UserForm2 With UserForm2 If ((GYO = 1) Or (Cells(GYO, 1).Value = "")) Then ' 見出しか未登録行の場合は新規登録と判断 GYO = 0 For i = 1 To 25 .Controls("TextBox" & i).Text = "" Next Else ' 既存行の場合は修正と判断 For i = 1 To 35 If i <= 3 Then .Controls("TextBox" & i).Value = Cells(GYO, i).Value ElseIf i <= 8 Then .Controls("TextBox" & i).Value = Cells(GYO, i + 1).Value ElseIf i <= 24 Then .Controls("TextBox" & i).Value = Cells(GYO, i + 2).Value Else .Controls("TextBox" & i).Value = Cells(GYO, i + 16).Value End If Next For i = 1 To 15 If Cells(GYO, 25).Value = "有" Then .Controls("CheckBox" & i).Value = True Else .Controls("CheckBox" & i).Value = False End If .ComboBox1.Text = Cells(GYO, 4).Value .ComboBox2.Text = Cells(GYO, 9).Value End If ' フォームを表示 g_swOK = 0 .Show ' 登録ボタンが押されていない場合は以降の処理はしない If g_swOK <> 1 Then GoTo TOUROKU_EXIT ' 新規登録の場合は未登録行を探す If GYO = 0 Then GYO = 2 ' 氏名列未登録を判定 Do While Cells(GYO, 1).Value <> "" GYO = GYO + 1 Loop End If ' シート上に登録 ActiveSheet.Unprotect For i = 1 To 35 If i <= 3 Then Cells(GYO, i).Value = Trim(.Controls("TextBox" & i).Value) ElseIf i <= 8 Then Cells(GYO, i + 1).Value = Trim(.Controls("TextBox" & i).Value) ElseIf i <= 24 Then Cells(GYO, i + 2).Value = Trim(.Controls("TextBox" & i).Value) Else Cells(GYO, i + 16).Value = Trim(.Controls("TextBox" & i).Value) End If Next For i = 1 To 15 If .Controls("CheckBox" & i).Value Then Cells(GYO, i + 25).Value = "有" Else Cells(GYO, i + 25).Value = "無" End If Next Cells(GYO, 4).Value = Trim(.ComboBox1.Text) Cells(GYO, 9).Value = Trim(.ComboBox2.Text) ActiveSheet.Protect End With ' オブジェクト廃棄のための行ラベル TOUROKU_EXIT: ' FRM_USERをアンロードしオブジェクトを解放 Unload UserForm2 Set UserForm2 = Nothing End Sub

naoki1223
質問者

お礼

検証させて頂いた結果、思った通りの内容が得られました。ご丁寧にいろいろ教えて下さり、大変感謝しております。また何か質問させて頂くこともあるかもしれませんが、その際はよろしくお願い致します。

すると、全ての回答が全文表示されます。

その他の回答 (2)

  • hana-hana3
  • ベストアンサー率31% (4940/15541)
回答No.3

間違えました ----------------- For i = 1 To 15 If .Controls("CheckBox" & i).Value Then Cells(GYO, i + 25).Value = "有" Else Cells(GYO, i + 25).Value = "無" End If Next ---------------- を For i = 1 To 15 If .Controls("CheckBox" & i).Value Then Cells(GYO, i + 24).Value = "有" Else Cells(GYO, i + 24).Value = "無" End If Next --------------- For i = 1 To 15 If .Controls("CheckBox" & i).Value Then Cells(GYO, i + 25).Value = "有" Else Cells(GYO, i + 25).Value = "無" End If Next ------------------ を For i = 1 To 15 If .Controls("CheckBox" & i).Value Then Cells(GYO, i + 24).Value = "有" Else Cells(GYO, i + 24).Value = "無" End If Next としてください。 ([25]を[24]とするだけ)

naoki1223
質問者

お礼

ご丁寧にありがとうございます。 検証後に再度ご連絡いたします。

すると、全ての回答が全文表示されます。
  • hana-hana3
  • ベストアンサー率31% (4940/15541)
回答No.1

>現状はTRUEといった表示はされるところまではいったのですが、その先がどうしてもできません。 だいたいの想像は出来ますが、コードを提示して頂く方がよりよい回答を得られると思います。 Teue/False をIF文で判断して、"有"/"無"の文字としてセルに記入するのが通常かと思います。

naoki1223
質問者

補足

Option Explicit Public g_swOK As Byte ' フォームで登録が押されたかを判定するスイッチ ' ユーザー情報の登録処理 Public Sub TOUROKU(GYO As Long) ' 現在選択行を取得 GYO = ActiveCell.Row ' ユーザー情報の登録のフォームを表示 Load UserForm2 With UserForm2 If ((GYO = 1) Or (Cells(GYO, 1).Value = "")) Then ' 見出しか未登録行の場合は新規登録と判断 GYO = 0 .TextBox1.Text = "" .TextBox2.Text = "" .TextBox3.Text = ""     -中略- .TextBox23.Text = "" .TextBox24.Text = "" .TextBox25.Text = "" Else ' 既存行の場合は修正と判断 .TextBox1.Text = Cells(GYO, 1).Value ' 氏名 .TextBox2.Text = Cells(GYO, 2).Value ' 社員No. .TextBox3.Text = Cells(GYO, 3).Value ' 部署 .TextBox4.Text = Cells(GYO, 5).Value .TextBox5.Text = Cells(GYO, 6).Value       -中略- .TextBox27.Text = Cells(GYO, 43).Value .TextBox28.Text = Cells(GYO, 44).Value .TextBox29.Text = Cells(GYO, 47).Value .TextBox33.Text = Cells(GYO, 45).Value .TextBox34.Text = Cells(GYO, 50).Value .TextBox35.Text = Cells(GYO, 52).Value .CheckBox1.Value = Cells(GYO, 25).Value .ComboBox1.Text = Cells(GYO, 4).Value .ComboBox2.Text = Cells(GYO, 9).Value End If ' フォームを表示 g_swOK = 0 .Show ' 登録ボタンが押されていない場合は以降の処理はしない If g_swOK <> 1 Then GoTo TOUROKU_EXIT ' 新規登録の場合は未登録行を探す If GYO = 0 Then GYO = 2 ' 氏名列未登録を判定 Do While Cells(GYO, 1).Value <> "" GYO = GYO + 1 Loop End If ' シート上に登録 ActiveSheet.Unprotect Cells(GYO, 1).Value = Trim$(.TextBox1.Text) ' Cells(GYO, 2).Value = Trim$(.TextBox2.Text) ' Cells(GYO, 3).Value = Trim$(.TextBox3.Text) ' Cells(GYO, 5).Value = Trim$(.TextBox4.Text) Cells(GYO, 6).Value = Trim$(.TextBox5.Text)         -中略- Cells(GYO, 43).Value = Trim$(.TextBox27.Text) Cells(GYO, 44).Value = Trim$(.TextBox28.Text) Cells(GYO, 47).Value = Trim$(.TextBox29.Text) Cells(GYO, 45).Value = Trim$(.TextBox33.Text) Cells(GYO, 50).Value = Trim$(.TextBox34.Text) Cells(GYO, 52).Value = Trim$(.TextBox35.Text) Cells(GYO, 25).Value = (.CheckBox1.Value) 'チェックボックス* Cells(GYO, 4).Value = Trim$(.ComboBox1.Text) Cells(GYO, 9).Value = Trim$(.ComboBox2.Text) ActiveSheet.Protect End With ' オブジェクト廃棄のための行ラベル TOUROKU_EXIT: ' FRM_USERをアンロードしオブジェクトを解放 Unload UserForm2 Set UserForm2 = Nothing End Sub これがモジュール1の内容です。チェックボックス1がTrueの場合にgyo,25に"有"と入れたいです。 これでわかりますでしょうか・・。 ちなみにチェックボックスは下記のように空白になっています。 何を入れてもエラーがでてしまうので・・。 Private Sub CheckBox1_Click() End Sub

すると、全ての回答が全文表示されます。

関連するQ&A