Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


3242 / 13644 ツリー ←次へ | 前へ→

【63322】チェックボックス もっち 09/10/27(火) 11:44 質問[未読]
【63323】Re:チェックボックス seg 09/10/27(火) 12:15 発言[未読]
【63324】Re:チェックボックス もっち 09/10/27(火) 13:43 質問[未読]
【63325】Re:チェックボックス seg 09/10/27(火) 13:57 発言[未読]
【63326】Re:チェックボックス もっち 09/10/27(火) 15:42 質問[未読]
【63337】Re:チェックボックス SS 09/10/28(水) 14:46 発言[未読]
【63327】Re:チェックボックス もっち 09/10/27(火) 15:52 質問[未読]
【63329】Re:チェックボックス seg 09/10/27(火) 17:07 発言[未読]
【63330】Re:チェックボックス もっち 09/10/27(火) 17:16 お礼[未読]
【63332】Re:チェックボックス seg 09/10/28(水) 9:10 発言[未読]

【63322】チェックボックス
質問  もっち  - 09/10/27(火) 11:44 -

引用なし
パスワード
   Excel2003を使用しております。

異常 正常
□  □

とあったとします。

どちらか一方しかチェックできないようにしたいのですが、
どのようにマクロを書けば実現できますでしょうか?

【63323】Re:チェックボックス
発言  seg  - 09/10/27(火) 12:15 -

引用なし
パスワード
   それって、チャックボックスの事ですか?
普通にオプションボタンを使えば良いのでは?
用途に合わせて使ってください。

どうしても、チェックボックスが良いなら
Private Sub CheckBox1_Click()
  CheckBox2.Value = False
End Sub

Private Sub CheckBox2_Click()
  CheckBox1.Value = False
End Sub
こんな感じでしょうか。

【63324】Re:チェックボックス
質問  もっち  - 09/10/27(火) 13:43 -

引用なし
パスワード
   ▼seg さん:
>それって、チャックボックスの事ですか?
チャックボックスとはどのように使うのでしょうか?

>普通にオプションボタンを使えば良いのでは?
普通とはどういうことでしょうか?

>用途に合わせて使ってください。
はい、今回はチェックボックスを使いたいのですが・・・。

>どうしても、チェックボックスが良いなら
>Private Sub CheckBox1_Click()
>  CheckBox2.Value = False
>End Sub
>
>Private Sub CheckBox2_Click()
>  CheckBox1.Value = False
>End Sub
>こんな感じでしょうか。
オブジェクトがありません。とエラーになります。


私のやり方は、Excelのシートにチェックボックスを配置します。
配置したチェックボックスのメニューより、マクロの登録を選択します。
すると、以下のようになります。
Sub チェック109_Click()
  
End Sub

上記を
Private Sub CheckBox1_Click()
  CheckBox2.Value = False
End Sub
するのでしょうか?

すると、エラーがでて実行できませんでした。

どうしたらよいのでしょうか?

【63325】Re:チェックボックス
発言  seg  - 09/10/27(火) 13:57 -

引用なし
パスワード
   ▼もっち さん:

>チャックボックスとはどのように使うのでしょうか?
複数の項目から、複数選択するものです。
複数の項目の中から、該当する項目を1つ以上選択できます。
例:
好きなフルーツを選んでください。
りんご ばなな ぶどう
上記の場合、チェックは1つ以上選択可能ですよね。

>>普通にオプションボタンを使えば良いのでは?
>普通とはどういうことでしょうか?
オプションボタンは、排他的です。
選択項目の中から、必ず1つしか選択できません。(厳密には違う)
例:
住んでいる都道府県を選んでください。
北海道 〜 沖縄
上記の場合、チェックするのは1つですよね。

>>用途に合わせて使ってください。
>はい、今回はチェックボックスを使いたいのですが・・・。
上記を踏まえると、オプションボタンになるのでは?

>オブジェクトがありません。とエラーになります。
これは、当然なのです。。。

Excelを開き、メニューの[表示]から
[ツールバー]⇒[VisualBasic]を押すとツールバーが表示されます。
既に表示されている場合は、必要ありません。
そのツールバーの、"コントロールツールボックス"を押して
次に"オプションボタン"を押して、シート上に貼り付けてください。
その後、そのオプションボタンをダブルクリックすると、VBE(エディタ)
が立ち上がるので、そこにしたい事を書いて行きましょう。

【63326】Re:チェックボックス
質問  もっち  - 09/10/27(火) 15:42 -

引用なし
パスワード
   ▼seg さん:
>Excelを開き、メニューの[表示]から
>[ツールバー]⇒[VisualBasic]を押すとツールバーが表示されます。
>既に表示されている場合は、必要ありません。
>そのツールバーの、"コントロールツールボックス"を押して
>次に"オプションボタン"を押して、シート上に貼り付けてください。
>その後、そのオプションボタンをダブルクリックすると、VBE(エディタ)
>が立ち上がるので、そこにしたい事を書いて行きましょう。

ご丁寧にありがとうございます。
実現できるようになりました。
ただ、右にチェックが入ってるとします。
左はチェックがはいってません。
上記の状態で、左のチェックボックスをクリックすると、
確かに右のチェックボックスからチェックは消えますが、
左のチェックボックスにはチェックされておりません。
2度クリックしないといけないのです。
右のチェックボックスのチェックが消えたと同時に左のチェックボックスに
チェックが入るようにしたいのですが、どのようにすればいいのでしょうか?
質問ばかりで申し訳ありません。

追伸
チェックボックスを選んだ理由は見た目が□だったからです。
例えば、オプションボタンの形を〇から□に変更できるのでしょうか?

【63327】Re:チェックボックス
質問  もっち  - 09/10/27(火) 15:52 -

引用なし
パスワード
   ▼もっち さん:
>Excel2003を使用しております。
>
>異常 正常
> □  □
>
>とあったとします。
>
>どちらか一方しかチェックできないようにしたいのですが、
>どのようにマクロを書けば実現できますでしょうか?

すいません。
異常 正常
□  □
□  □



としたに続くのです。

Private Sub CheckBox1_Click()
  CheckBox2.Value = False
End Sub

Private Sub CheckBox2_Click()
  CheckBox1.Value = False
End Sub

では一番上のチェックボックスにしか適用されません。
単純に下へコピーしていけば、全てに反映されると思っていたのですが、
そうではないようですので、下へチェックボックスが続く場合、
どのように記述すればよいのでしょうか?

Private Sub CheckBox3_Click()
  CheckBox4.Value = False
End Sub

Private Sub CheckBox4_Click()
  CheckBox3.Value = False
End Sub




と書いていく必要があるのでしょうか?
ご教示の程宜しくお願い致します。

【63329】Re:チェックボックス
発言  seg  - 09/10/27(火) 17:07 -

引用なし
パスワード
   ▼もっち さん:
そもそも、チェックボックスは複数で、オプションボタンは排他で
それらは、この世界では当たり前の事でそれを変えるのは、お勧めしません。

しかし、どうしてもやりたいなら出来ない事もないです

下記の例が、全てのチェックボックスに対しての例なんだけど
ごめんなさい、もうすぐ仕事が終わるので作成しきれません・・・

  For Each ashp In ActiveSheet.Shapes
    If ((ashp.Type = 12) And (InStr(ashp.Name, "CheckBox") > 0)) Then

    End If
  Next

他にも様々な方法があるので、他に解る方がいたらヘルプ願います^^;

【63330】Re:チェックボックス
お礼  もっち  - 09/10/27(火) 17:16 -

引用なし
パスワード
   seg様

丁寧なご回答ありがとうございます。
頂いたプログラムを参考にし、自己解決致します。

ありがとうございました。

【63332】Re:チェックボックス
発言  seg  - 09/10/28(水) 9:10 -

引用なし
パスワード
   ▼もっち さん:

お早うございます。

以下を条件にして、作成しました。
1.チェックボックスはフォーム上に配置
2.チェックボックスの配置並びは以下である
 異常 正常
  1  2
  3  4
  5  6
3.チェックボックスの名前は『CheckBox』&1〜

Private Sub CheckBox1_Click()
  Call chk_ChkBoxValue(0)
End Sub

Private Sub CheckBox2_Click()
  Call chk_ChkBoxValue(1)
End Sub
以下続く


Sub chk_ChkBoxValue(ctlID As Integer)
  
  ' 呼び出し元のチェックボックスはチェックされている
  If (Me.Controls(ctlID).Value = True) Then
    ' 呼び出し元は異常である
    If (CInt(Mid(Me.Controls(ctlID).Name, 9)) Mod 2 = 1) Then
      Me.Controls(ctlID + 1).Value = False
    ' 呼び出し元は正常である
    Else
      Me.Controls(ctlID - 1).Value = False
    End If
  End If

End Sub

上記で、異常がチェックされた時に対応する正常のチェックが外されます。
私の知識では上記が限界で、どうしてもそれぞれのチェックボックスに
Call chk_ChkBoxValue(1)と設定しなければなりません。
デリゲートが使えればもっと美しいかとは思うんだけど;

【63337】Re:チェックボックス
発言  SS  - 09/10/28(水) 14:46 -

引用なし
パスワード
   ▼もっち さん:
チェックボックスを使わず、A列を異常 B列を正常として
A列又はB列をダブルクリックすることで同様のことが
できるのではないでしょうか。
後々の処理を考えるとこちらの方が楽なのでは?
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, _
                    Cancel As Boolean)
  Dim i As Long
  Cancel = False
  i = Target.Row
  If Target.Row = 1 Then
    Exit Sub
  ElseIf Target.Column = 1 Then
    Target.Value = "○"
    If Cells(i, 2).Value = "○" Then Cells(i, 2).Value = ""
  ElseIf Target.Column = 2 Then
    Target.Value = "○"
    If Cells(i, 1).Value = "○" Then Cells(i, 1).Value = ""
  End If
  Cancel = True
End Sub

3242 / 13644 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free