解決法教えてください!a1というチェックboxで表示を変えたい

このQ&Aのポイント
  • a1というチェックboxを使って表示を変える方法を教えてください
  • a1_Change()というサブルーチンでa1というチェックboxの値を取得し、それに応じて表示を変えましょう
  • forループを使ってazとFrame181のVisibleプロパティをa1の値に合わせて変えましょう
回答を見る
  • ベストアンサー

visible

いつもお世話になってます。 a1というチェックboxによって、表示を変えたいのですが、上手くいきません。ご教授ください。 Private Sub a1_Change() Dim z As Integer For z = 23 To 38 az .Visible = a1.Value Next Dim x As Integer For x = 42 To 57 az .Visible = a1.Value Next Frame181.Visible = a1.Value End Sub

noname#40795
noname#40795

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

  • ベストアンサー
  • josyo_m
  • ベストアンサー率63% (28/44)
回答No.2

お疲れ様です。 通常、「az」として現されているものが同じコントロールであれば コントロール配列を使用します。 コントロール配列を用いた場合の書き方は、 Private Sub a1_Click()   Dim z As Integer   For z = 23 To 38     a(z).Visible = a1.Value   Next z   For z = 42 To 57     a(z).Visible = a1.Value   Next z   Frame181.Visible = a1.Value End Sub と、なります。 もし、同じコントロールでは無い、その他の理由でコントロール配列に 出来ない場合の書き方は、 Private Sub a1_Click()   Dim z As Integer   For z = 23 To 38     Me.Controls("a" & CStr(z)).Visible = a1.Value   Next z   For z = 42 To 57     Me.Controls("a" & CStr(z)).Visible = a1.Value   Next z   Frame181.Visible = a1.Value End Sub と、なります。 間違っていたらごめんなさい。

noname#40795
質問者

補足

完璧に出来ました!(ちなみに下の方で。) 有り難うございます。     Me.Controls("a" & CStr(z)).Visible = a1.Value の意味、特にme.controlsの部分、もし宜しかったら意味もご教授いただけますでしょうか?

その他の回答 (2)

  • josyo_m
  • ベストアンサー率63% (28/44)
回答No.3

お疲れ様です。 うまくいって良かったですね^^ほっとしました^^ 補足の件を説明いたします。 「Me」は、プログラムソースを記述しているFormオブジェクト自身を指します。 「Controls」は、そのオブジェクトに属しているコントロールのコレクションです。 「Me.Controls」で、Formオブジェクトに属しているコントロールを参照することが出来ます。 Meを使わずにForm名を使っても良いです。(Form1.Controls等でもOK) 「Me.Controls(コントロール名)」でコントロールを参照できます。 なので、例にあげたソースで、z = 32の時に、 Me.Controls("a" & CStr(z)).Visible = a1.Value は、 Me.Controls(a32).Visible = a1.Value となり、 a32.Visible = a1.Value と同じ扱いになります。 ただし、通常VBではこのような使い方は滅多にしません。(自分の経験上) コントロール配列を使用することの方が多いと思われます。 間違っていたらごめんなさい。

noname#40795
質問者

お礼

解りやすい説明ありがとうございました! とっても勉強になります! コントロール配列・・・よくわからないのでこれも勉強してみます!

noname#3241
noname#3241
回答No.1

Visibleプロパティは『True』か『False』で値を返すので、 表示したいときは az .Visible = True 非表示の場合は az .Visible = False をセットすれば良いと思うのですが。もしやりたいことが見当外れでしたら申し訳ありません。

関連するQ&A

  • VBAで縦一列に数字を入力したい

    Private Sub CommandButton1_Click() Dim n As Integer Dim i As Integer Dim x As Integer For i = 1 To n x = i + 3 n = InputBox("層数の値を入力してください") Cells(3, 1).Value = ("基板") Cells(x, 1).Value = i x = x + 1 Next End Sub 上記のようなマクロを組んだのですが、4行目に1が入ってとまってしまいました。 これを完成させるにはどうしたらいいでしょうか?

  • EXCEL VBA 多種のコンボボックス操作

    こんばんは。 現在ユーザーフォーム上に10個のコンボボックスを配置しています。 1-8は共通リストを、9と10は別々のリストを表示させたいのですが・・ Private Sub UserForm_Initialize() Dim X, No, Y As Integer With UserForm2 For No = 1 To 8 For X = 0 To 7 .Controls("ComboBox" & No).AddItem Worksheets("Letter").Cells(X + 1, 10).Value Next Next For Y = 0 To 7 .ComboBox9.AddItem Worksheets("Letter").Cells(Y + 1, 11).Value .ComboBox10.AddItem Worksheets("Letter").Cells(Y + 1,12).Value Next End With End Sub 上記のコードですが、エラーが出てどうにも行き詰っています。 Private Sub UserForm_Initialize() Dim X, No As Integer For No = 1 To 8 For X = 0 To 7 UserForm2.Controls("ComboBox" & No).AddItem Worksheets("Letter").Cells(X + 1, 10).Value Next Next End Sub ↑だと1-8まで問題なく動くのですが・・・ すみませんが、アドバイスお願いいたします。

  • Excel VBA のFor Each ・・・ Next について

    配列に数字(特段数字でなくても)入れたいのですが、以下のように書きました。 Sub test() Dim x As Variant Dim m(1 To 10) As Integer For Each x In m x.Value = 100 Next Stop End Sub Stopでとめてmを確認するとすべて0です。どうしてなのでしょうか。 配列ではなく Sub test() Dim x As Variant For Each x In range("a1:a10") x.Value = 100 Next End Sub とするとA1:A10には100が入ります。 この差がいまいちわからなくて、 もちろんFor ・・・ Nextで簡単に入れられるのは承知しています。 補足ですが また最初はx.valueの.valueをつけていなかったのでセルにも反映されませんでしたが.valueをつけると入りました。

  • エクセルのマクロについて

    お手数ですが誰か教えてください! BのデーターをAに集計するマクロを作ったのですが 処理速度とっても遅いのです。 高速で処理する方法はありませんでしょうか? 私が作ったマクロ Sub 集計() Dim Z As Integer Dim i As Integer Dim X As Integer For Z = 2 To 2000 For i = 2 To 2000 For X = 3 To 20 If Worksheets("A").cells(Z, 1) = Worksheets("B").cells(i, 1) And       Worksheets("A").cells(1, X) = Worksheets("B").cells(i, 14) Then Worksheets("A").cells(Z, X) = Worksheets("B").cells(i, 16) End If Next X Next i Next Z End Sub       どこかが間違っている気がしますがマクロ初心者のため       先に進めません。       どうかご教授よろしくお願い致します。

  • エクセル VBA Call

    VBA初心者です。 callというのを知ったのですが、 ------------------------------- sub aaa() Dim z As Integer For z = 1 To 30 Step 1 Dim y As String y = Cells(2 + z, 3).Value Dim x As String x = Cells(2 + z, 2).Value ・ ・ call m1 call m2 call m3 call m4 ・ ・ next z end sub という記載があって呼び出し元に sub m1 sheet(y).select と書きたいです。この y とか x を先に記載した内容と同じ 認識にするにはどうしたら良いですか。 ど素人に分かるようにお願いします。教えてエクセル大先生。

  • 擬似マインスイーパー

    任意の地雷を設置するというプログラムです。 この中で地雷を*に、安全地帯を空白にしたいのですがやり方がわからないので、わかる方お願いします。 Sub mine() Dim minefield(11, 13) As Integer Dim i As Integer, a As Integer, b As Integer Dim c As Integer c = InputBox("地雷の数を決めます") Randomize For i = 1 To c a = Int(Rnd * 10) + 1 b = Int(Rnd * 12) + 1 If minefield(a, b) = 9 Then i = i - 1 minefield(a, b) = 9 Next i countMine minefield, 10, 12 showInt minefield, 10, 12 ' show minefield, 10, 12 End Sub Sub countMine(f() As Integer, h As Integer, w As Integer) Dim i As Integer, j As Integer Dim a As Integer, b As Integer Dim x As Integer For a = 1 To 10 For b = 1 To 12 If f(a, b) < 9 Then x = 0 If f(a, b - 1) = 9 Then x = x + 1 '左に地雷があるか If f(a, b + 1) = 9 Then x = x + 1 '右に地雷があるか ' ... この部分に追加したいのだが ... f(a, b) = x End If Next b Next a End Sub Sub showInt(f() As Integer, h As Integer, w As Integer) Dim i As Integer Const a As Integer = 7 Const b As Integer = 3 Do While h > 0 For i = 1 To w Cells(a + h, b + i) = f(h, i) Next i h = h - 1 Loop End Sub

  • たすけて下さい

    質問します ちょっと躓いて先に進めないでいます。 どなたか教えてください。 Option Explicit Sub zzz() Dim hoge(3) As Variant Dim hogehoge As Byte Dim z As Byte For z = 1 To 3 For hogehoge = 1 To 3 hoge(z) = Range("A" & hogehoge).Value Next hogehoge Next z End Sub 上のようなコードで、zとhogehogeを同時に インクリメントすることは可能でしょうか?

  • エクセルのVBAでFor文がわかりません。

    エクセルのマクロでとりあえずデータを 始めは6、7行のデータをクリアし 次は6+7、7+7のデータをクリア その次は6+7*2、7+7*2のデータをクリア とうぐあいにFor文を作りたいのですが 以下のように作るとRowsの部分でデバックが出ます。 どのように修正すればよいのでしょうか? ご教授お願いいたします。 Sub Macro1() Sheets("Sheet1").Select Dim x As Integer Dim y As Integer Dim z As Integer For x = 1 To 304 y = 7 * (x - 1) + 6 z = 7 * (x - 1) + 7 Rows("y:z").Select'この行でデバックとなる Selection.ClearContents Next x End Sub

  • Excel VBAで検索(Win2000 Excel2000)

    現在、下記のようなコードを書いています。データテーブルの縦と横の検索値を探してその列数と行数を返したいのですが、下記の Sub検索1 と Sub検索2 を1つのSubで実行させるにはどうしたらよいのでしょうか?よろしくお願い致します。 ----------------------------------------- Sub 検索1() Worksheets("Data").Activate Dim x As Integer For x = 3 To 22 If Cells(2, x).Value >= 12 Then MsgBox x Exit Sub End If Next MsgBox "見つかりません" End Sub --------------------------------------------- Sub 検索2() Worksheets("Data").Activate Dim i As Integer For i = 4 To 42 If Cells(i, 2).Value = "A" Then MsgBox i Exit Sub End If Next MsgBox "見つかりません" End Sub

  • 値渡しについて

    UserForm1で以下のように求めた値「R」を UserForm2に渡すにはどのようにすればよいのでしょうか。 **************************************** <UserForm1(コード)> Public R As Integer ----------------------------------- Private Sub CommandButton1_Click()    Dim N As Integer        :    N = TextBox1.Text    R= N * 2 + 3        : End Sub **************************************** <UserForm2(コード)> Private Sub CommandButton1_Click()   Dim i As Integer       :   For i = 4 To R       :   Next i       : End Sub **************************************** どなたか教えて下さい。

専門家に質問してみよう