• ベストアンサー

vba初心者

VBA初心者ですが、ご質問があります。 以下の処理内容で困っております。 1.チェックボックスは全部で四つありエクセルのシート上にあります。 <例> checkbox1 checkbox2 checkbox3 checkbox4 ←四つあります。 ここでいうチェックボックスは、マクロの「コントロールツールボックス」のチェックボックスになります。 2.チェックボックスはチェックを入れるとセルA1にそれぞれの値を出力。 <例> checkbox1にチェックをいれたらセルA1にaと出力。 checkbox2にチェックをいれたらセルA1にbと出力。 checkbox3にチェックをいれたらセルA1にcと出力。 checkbox4にチェックをいれたらセルA1にdと出力。 3.1と2は問題なく3から困っております。 <御教授いただきたい内容>  チェックボックスを使用して、checbox1にチェックをいれたらセルA1にaと出力しcheckbox2にチェックをいれたらセルA1にコンマをつけて出力。 <例> checkbox1と2をチェックしているのでセルA1の出力は、「a、b」となる。 同様にチェックをつけたらつけただけ出力。 <例> checkbox1から4全部つけた場合、セルA1の出力は、「a、b、c、d」となる。 初心者でかなり困っております。 どなた様か御教授をお願い致します。

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

  • ベストアンサー
  • tom11
  • ベストアンサー率53% (134/251)
回答No.3

こんにちは、 Public Sub f() Dim cc As String Dim i As Integer Dim c As String cc = "" c = "" If Sheet1.CheckBox1 = True Then cc = cc + "a" End If If Sheet1.CheckBox2.Value = True Then cc = cc + "b" End If If Sheet1.CheckBox3.Value = True Then cc = cc + "c" End If If Sheet1.CheckBox4.Value = True Then cc = cc + "d" End If If Len(cc) = 0 Then Sheet1.Range("a1") = "" Exit Sub End If If Len(cc) = 1 Then Sheet1.Range("a1").Value = cc Exit Sub End If For i = 1 To Len(cc) c = c + Mid$(cc, i, 1) + "," Next c = Left$(c, Len(c) - 1) Sheet1.Range("a1").Value = c End Sub Private Sub CheckBox1_Click() f End Sub Private Sub CheckBox2_Click() f End Sub Private Sub CheckBox3_Click() f End Sub Private Sub CheckBox4_Click() f End Sub こんな感じかな

hanyu01
質問者

お礼

ありがとうございます。 完璧すぎるご回答感謝致します!!! 構文まで作っていただいてありがとうございました。 ほんと助かりました!!!!!!

その他の回答 (3)

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.4

質問の意図がよくわからないが、 もう1つコマンドボタンが必要では。そして チェックボックス1-4の状態が確定したときにボタンをクリックする。すると下記クリックイベントプロが走る。 A1セルに、例えば、a,cなどが状態に応じて入る。 Private Sub CommandButton1_Click() Dim s(4) If CheckBox1 = True Then s(1) = "a" End If If CheckBox2 = True Then s(2) = "b" End If If CheckBox3 = True Then s(3) = "c" End If If CheckBox4 = True Then s(4) = "d" End If ss = "" For i = 1 To 4 If s(i) <> "" Then ss = ss & s(i) & "," End If Next i If Right(ss, 1) = "," Then Cells(1, 1) = Left(ss, Len(ss) - 1) Else Cells(1, 1) = s End If End Sub 質問の意図を誤解してたらすみません。

回答No.2

ベタな方法ですがこれを応用して出来ないでしょうか・・・。 Private Sub CheckBox1_Click() If CheckBox1.Value = True Then hensuu = "a" End If If CheckBox2.Value = True Then If hensuu = "" Then hensuu = "b" Else hensuu = hensuu & ",b" End If End If MsgBox hensuu End Sub

hanyu01
質問者

お礼

ありがとうございます。 応用してやってみたいと思います。

noname#39970
noname#39970
回答No.1

2の演習によってどのようにしたらセルA1に書き込みができるか判ったと思う。 その書き込みする方法の中で各checkを調べる方法が出ていたと思われる。 3では、その各checkの状態を確認できる方法を確立しなければならない。 今回はcheckが押されたらその専用処理をするのではなく 共通した処理を作成し、どれが押されているのかを確認して押されている物をA1へ出力するという形になる。 まずはカンマ無しで押されている物に対応する文字列を作成できるようにしたら良い →check1と3がcheckedなら「ac」 これができるようになったらカンマを挟む方法を考える

hanyu01
質問者

お礼

ありがとうございます。 さっそく考えてみます。

関連するQ&A