仕事上システムを作り始めたVBA初心者です。すみませんが、ご享受下さい。
ユーザーフォームにてチェックボックスを作成後、セルへ転載するものを作っております。
その中でチェックボックスが15個ほどあり、onの場合にはその行の25列目に"有"、OFFの場合は"無"と表示させたいのです。
現状はTRUEといった表示はされるところまではいったのですが、その先がどうしてもできません。
見よう見まねで始めた初心者ですので、コードもどこが必要かもあまりわからないのが現状です。お答え頂く上で必要であればアップしますので、よろしくお願い致します。尚、作ろうとしてるのはデータベースで設備項目に有、無をつける予定です。
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/20070 …
-------ざっと修正(予想も含めて)して見ました。
不具合等はご自身で修正してください。
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
検証させて頂いた結果、思った通りの内容が得られました。ご丁寧にいろいろ教えて下さり、大変感謝しております。また何か質問させて頂くこともあるかもしれませんが、その際はよろしくお願い致します。
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]とするだけ)
No.1
- 回答日時:
>現状はTRUEといった表示はされるところまではいったのですが、その先がどうしてもできません。
だいたいの想像は出来ますが、コードを提示して頂く方がよりよい回答を得られると思います。
Teue/False をIF文で判断して、"有"/"無"の文字としてセルに記入するのが通常かと思います。
この回答への補足
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が見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Access(アクセス) Accessで予定表を作成しようとしてます。 テーブル フィールド名 連番 オートナンバー型 年月日 2 2023/07/23 11:40
- Excel(エクセル) エクセルで”入力シート”の文字書式の変更を”出力シート”で同じ文字書式で印刷したいです。VBA希望 4 2023/04/24 11:07
- Excel(エクセル) 【Excel】指定のセル内容を基に別シートのセルを検索して選択する【VBA】 1 2022/06/16 16:16
- その他(データベース) Accessフォームからパラメーターで表示したレコードを指定のExcelのセルへ転送する方法について 2 2022/08/22 18:04
- Excel(エクセル) 表内で、Enterキーで横→行の最後入力したら次の行の先頭に移動するマクロを作りたい 3 2022/05/01 21:19
- その他(IT・Webサービス) google サイトの目次表示について 1 2023/06/17 23:24
- Excel(エクセル) エクセルVBAでチェックボックスにチェックを入れる 1 2022/09/14 00:52
- Excel(エクセル) 【エクセル」 特定のセルで条件抽出した列を、別シートに上から詰めて表示したい。 8 2022/04/08 16:00
- Visual Basic(VBA) 【VBA】データを入力後に,同一シート内に履歴として転記するVBAコードを教えていただきたいです。 3 2022/11/16 01:37
- Excel(エクセル) エクセル VBAでBook モジュールのプロシージァ(コード)に除外シートを設定したい 1 2023/01/11 15:53
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
絶対にいけるWindowsXPsp3の無...
-
WindowsXPを最近のパソコンに...
-
Windows XP SP3のインストール...
-
シムズ4(PS4版) マイライブラリ...
-
パソコン起動時に謎のエラー画...
-
最近、パソコンを起動するとこ...
-
HDDがフォーマット出来なくなった
-
WindowsVISTAが起動しない。
-
パソコンについて教えていただ...
-
アウトルックを「タスクバー」...
-
Windows xpにWindows10を無理や...
-
ソフトのインストールトラブル
-
WindowsXPのプロダクトキーを紛...
-
メモリ、SSD、HDDの違いを教え...
-
やっぱり現代のPCにWindowsXPを...
-
プロダクトキー
-
今現在xpから10に無償アッ...
-
条件付き書式の結果につて
-
windows 終了時にプログラムを...
-
電源ボタンでスリープするよう...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ページングが大量発生する原因...
-
パワーポイント 円グラフにつ...
-
EXCEL VBA チェックボックスに...
-
regeditで環境変数を展開させな...
-
ビジュアルベーシック2008、変...
-
データー使用状況
-
コネクション・セッション・ト...
-
Accessの画面更新を一時的に停...
-
画面遷移が不正ですと表示されます
-
c# 文字列の最後から1文字削除...
-
HTMLボタンの文字色を変え...
-
DataGridViewのチェックボック...
-
VBAで一時中断したプログラムの...
-
複数選択のListBoxでClickイベ...
-
Eclipseでクリーンが出来ない
-
チャレンジタッチの画面にスマ...
-
エクセルVBAで画面の大きさを取...
-
ブラウザの×ボタン(閉じるボタ...
-
ACCESS2010 WEBブラウザーコン...
-
asp.NET初心者です。「 ’Contex...
おすすめ情報