電子書籍の厳選無料作品が豊富!

お世話になっております。
ご教授お願い致します。
ユーザーフォームに1~20のチェックボックスがあり
一つでもチェックボックスがONの場合は登録
チェックボックスがすべてOFFの場合は登録しないと言うもの作成したいのですが
うまく行きません。

Dim cb As CheckBox
For Each cb In ActiveSheet.CheckBoxes
If cb.Value = xlOff Then
MsgBox "選択してください"
Else
MsgBox "登録"
End If
Next cb

宜しくお願い致します。

質問者からの補足コメント

  • つらい・・・

    with userform1

    If myFlag Then
    MsgBox "選択してください"
    ElseIf .Label4.Caption = "残業" And .TextBox5.Value = "" Then
    MsgBox "時間外勤務時間の入力がありません。"
    else
    登録実行
      end if
    end with
    上記のように複数条件で切り分けなのですが、うまく行きません。

      補足日時:2021/10/14 10:49
  • つらい・・・

    Qchan1962さん回答ありがとうございます。
    For i = 1 To 20
    If Me.Controls("CheckBox" & i) = false Then
    MsgBox "選択してください"
    Exit Sub
    Next
    ElseIf .TextBox11.Value = "" Then
    MsgBox "事由/業務内容の入力がありません。"
    else
    MsgBox "登録"
    End If
    forに対するNextがありませんとなります。

    No.3の回答に寄せられた補足コメントです。 補足日時:2021/10/14 11:07
  • つらい・・・

    mygoonicknameさん、回答有難う御座います
    If myFlag Then
     MsgBox "選択してください"
    ElseIf .Label4.Caption = "残業" And .TextBox5.Value = "" Then
     MsgBox "時間外勤務時間の入力がありません。"
    Else
    登録実行
    End if
    上記のように複数条件で切り分けなのですが、うまく行きません。

    No.2の回答に寄せられた補足コメントです。 補足日時:2021/10/14 11:10
  • つらい・・・

    mygoonickname さん、ご回答有難うございます。
    For Each cb In ActiveSheet.CheckBoxes
    こちらは、アクティブシートですが
    ユーザーフォームにする場合はどうすればよいでしょうか?

    No.1の回答に寄せられた補足コメントです。 補足日時:2021/10/14 12:49
  • へこむわー

    mygoonicknameさん 
    回答有難う御座います。
    お返事遅くなりました。
    ①1つでもonの時は、1回だけ登録をする。全てonでも登録は1回だけ。
    が希望です。
    宜しくお願い致します。

    No.7の回答に寄せられた補足コメントです。 補足日時:2021/10/15 14:36

A 回答 (7件)

ElseIf .TextBox11.Value = "" Then は


If Me.Controls("CheckBox" & i) = false Then にかかっています

なので
For i = 1 To 20
If Me.Controls("CheckBox" & i) = false Then
MsgBox "選択してください"
Exit Sub
End If
Next
If .TextBox11.Value = "" Then
か、Next位置を条件外にする必要がありますが
条件外に出す場合、ループの意味する目的に差異が生じ合理的なループではなくなります。まぁ、、動くけれども。

複数条件があるようでしたら、準じチェックを行って 該当外が生じた段階でループなどを抜けMsgBox を出し終了するのが良いと思います。

更に、userformのコントロールにはイベントがありますので
グローバル変数やStatic変数を活用して入力、チェック動作を行った時に
フラグを建てる方法なども考えられますね。

>質問を整理して再度、伺います
との事なのでタイミングが合えばよろしくお願いします。
    • good
    • 0
この回答へのお礼

一旦この質問は閉じます。
有難う御座いました。

お礼日時:2021/10/19 11:10

こんにちは。



ユーザーフォームだと、No.6さんの回答と同じ様に、なるかと思います。

因みに、
すべてのチェックボックスがoffの場合はメッセージを、は良いですが、
そうでない場合の登録について、下記のどちらなのでしょうか?
 ①1つでもonの時は、1回だけ登録をする。全てonでも登録は1回だけ。
 ②それぞれがonの時に、その都度、登録をする。1~20回のどれか。
私の場合は、①だと思って回答したのですが、質問者さんは②が希望?
この回答への補足あり
    • good
    • 0

補足文に対して


Next
ElseIf .TextBox11.Value = "" Then
おかしいかと、、

当初のご質問と違う要件があるようですね。
ご質問を整理して再質問を建ててみたらいかがでしょう。
    • good
    • 0
この回答へのお礼

ElseIf .TextBox11.Value = "" Thenについては複数の条件分岐の一つです
ElseIfが10個続きます。
別の回答者のmyflagを載せてしまいました。
すみません。
質問を整理して再度、伺います。有難う御座いました。

お礼日時:2021/10/14 11:23

#3です


myflag? userform1ですよね。
.Label4.Caption = "残業" And .TextBox5.Value = "" この条件は限定条件なので最初に振り分ければ良いかと、、
私的にはすぐ抜ける書き方をしますが、、
Dim i As Integer
With UserForm1
If .Label4.Caption = "残業" And .TextBox5.Value = "" Then
MsgBox "時間外勤務時間の入力がありません。"
Exit Sub
End If
For i = 1 To 20
If .Controls("CheckBox" & i) = True Then
登録実行
Exit Sub
End If
Next
MsgBox "選択してください"
End With

的違いをしているかも知れませんのでここ迄で
    • good
    • 0
この回答へのお礼

Qchan1962さん

Exit Sub が使用したことがなかったので。If~ElseIF~としていました。
Exit Subを勉強してみます。
有難う御座います

お礼日時:2021/10/14 11:19

こんにちは


ユーザーフォームで良いですか?
コントロールオブジェクト名を変更していないのなら
簡単な方法での一例です

Dim i As Integer
For i = 1 To 20
If Me.Controls("CheckBox" & i) = True Then
MsgBox "登録"
Exit Sub
End If
Next
MsgBox "選択してください"

こんな感じで、
この回答への補足あり
    • good
    • 0

No.1の者です。



メッセージを忘れていました。

if myflag then
MsgBox "登録"
else
MsgBox "選択してください"
end if
この回答への補足あり
    • good
    • 0

おはようございます。



例えば下記の様に、全てチェックした後に、判定して処理でしょうか?

Dim cb As CheckBox,myFlag as Boolean
myFlag = False
For Each cb In ActiveSheet.CheckBoxes
If cb.Value = xlOff Then
Else
myFlag = True
End If
Next cb

if myflag then
MsgBox "登録"
end if
この回答への補足あり
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!