• ベストアンサー

Excel VBA checkboxのリンク

Excel VBA内でcheckboxを作り、 checkboxからcheckbox2を表示させたいのですが 分かりません。 どのように、checkboxからcheckbox2を表示しますか? 分かる方いましたら、教えてください。 教えて頂けると助かります。 よろしくお願いします。 ちなみに、Excelの環境は2007です。

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

  • ベストアンサー
  • mitarashi
  • ベストアンサー率59% (574/965)
回答No.4

#1です。骨組みとしてはこういうことでしょうか。ご参考まで。 ☆標準モジュール Sub test() UserForm1.Show vbModeless End Sub ☆UserForm1モジュール Private Sub CommandButton1_Click() UserForm2.Show vbModeless Me.Hide End Sub ☆UserForm2モジュール Dim checkBoxCount As Long Private Sub UserForm_Initialize() Dim myControl As MSForms.Control For Each myControl In Me.Controls If myControl.Name Like "CheckBox*" Then checkBoxCount = checkBoxCount + 1 Next myControl If UserForm1.CheckBox1 = True Then Me.CheckBox1.Visible = True Me.CheckBox2.Visible = True Else Me.CheckBox1.Visible = False Me.CheckBox2.Visible = False End If If UserForm1.CheckBox2 = True Then Me.CheckBox3.Visible = True Me.CheckBox4.Visible = True Else Me.CheckBox3.Visible = False Me.CheckBox4.Visible = False End If End Sub Private Sub CommandButton1_Click() Dim i As Long For i = 1 To checkBoxCount Sheets(1).Cells(i, 1).Value = Me.Controls("CheckBox" & i).Value Next i End Sub Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer) Unload UserForm1 End Sub

mai5891
質問者

お礼

回答ありがとうございます。 確認ですが、Falseが表示。Trueが非表示ですか? Ifで18個の処理を一つづつ書くと長くなってしまうので、switchとかで書けないですか? よろしくお願いします。

その他の回答 (6)

  • mitarashi
  • ベストアンサー率59% (574/965)
回答No.7

#1&4です。 1.Visible(見える)=true なら見えるです。手を動かしてみる事をお勧めします。 2.当方の提示させていただいたのは骨組みであり、肉付けするのは質問者様にお任せします。 当方にはどのチェックボックスが、どれに対応しているのか分かりませんので。 コード短縮の一例を回答させていただきます。#4のUserForm2モジュールのInitializeと同等の事を行っています。 以上、ご参考まで。 Private Sub UserForm_Initialize() Dim myControl As MSForms.Control Dim array1 As Variant Dim array2 As Variant Dim i As Long array1 = Array(1, 2) 'UserForm1のCheckBox1に対応して表示する、Form2のCheckBoxのNoを列挙 array2 = Array(3, 4) 'UserForm1のCheckBox2に対応、以下同様。Array(3,4,5,6,8,9,10,11,18)てな感じで指定可 For Each myControl In Me.Controls If myControl.Name Like "CheckBox*" Then checkBoxCount = checkBoxCount + 1 myControl.Visible = False End If Next myControl If UserForm1.CheckBox1 = True Then For i = LBound(array1) To UBound(array1) Me.Controls("CheckBox" & array1(i)).Visible = True Next i End If If UserForm1.CheckBox2 = True Then For i = LBound(array2) To UBound(array2) Me.Controls("CheckBox" & array2(i)).Visible = True Next i End If End Sub

mai5891
質問者

お礼

回答ありがとうございました。 ・・・中学3年というワークシートへジャンプし、 Foam1・2のチェックしたのを中学3年という 文字をワークシートのA1へ出すという 処理できました。 本当にありがとうございました。

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

教えろ、教えろといっているが、質問の内容の説明がまずくて、伝えるべきことが読者に判らないのだと思う。 プログラム云々の前に仕様を明確に出来ることが必要な能力だ。 ーー フォームは2つ(質問者のFoamは間違い。Formが正しい。基礎的なことですよ)考えるようだ。 ーー 各フォームにはChekBoxが複数個貼り付けられているようだ。 Form1のチェックボックスの個数と持たせた意味は固定しているようだ。しかし、そのキャプションで現す事項(働きとか意味)を全く質問に書かず、抽象的に質問するから判りにくい。仕事内容を少し出すことになるが、質問する以上やむをえないだろう。イヤなら、別のタイプの例で置き換えるとか。 ーーー Form2はForm1のチェックボックスのチェック情況によって、Form2のチェックボックスの出現を左右するのでは無いのか? そこがはっきりしない。 ーー たとえで言うと Form1に首都圏の都県のチェックボックスがある ○東京都 ○神奈川県 ○千葉県 ○埼玉県 ーー ここで神奈川県をチェックすると、Form2には ○横浜市 ○川崎市 ○相模原市 ○藤沢市 ・・・ というチェックボックスを出したいのではないか。Form1は非表示にするとしても。 こういうイメージなのか? こういう風に説明すればわかりやすいのではないか。県と市などの有様(包含関係など)が類推を助けるのだ。 ただ上記の場合だと県と所属の市名の対応データが必要で、その扱いのほうがプログラム的に扱いが難しいと思うが。 (フォームを表示したり、連動して消したりすることよりも) 上記が見当ハズレなら無視してください。当たっている面があれば補足しては。

mai5891
質問者

お礼

回答ありがとうございます。 的確に私のやりたいことが当たっていて、少し怖くなってしまいました・・・。 フォームを表示したり、連動して消したりする事は出来ました。 質問ばっかりで申し訳ありませんが、 Form1のcheckboxを選択すると、 例えば ○社会人 ○大学生 ○高校生 ○中学生 ○小学生 とあり 中学生を選択すると ○1年 ○2年 ○3年 とあり、 3年を選ぶ  (ここまでは、完了。)と、 ここから、どのように行いますか? 分かる方いましたら、ご指導よろしくお願いします。 中学3年というワークシートへジャンプし、 Foam1・2のチェックしたのを中学3年という 文字をワークシートのA1へ出すという いわゆるデータベースを作りたいのです。

mai5891
質問者

補足

下記でデータベースを作りたいと書いてしまいましたが、 データベースを教えてほしいのではなく、 ・・・ 例えば中学3年というワークシートへジャンプし、 Foam1・2のチェックしたのを中学3年という 文字をワークシートのA1へ出すという 処理が分かりません。 ずうずうしいと思いますが、分かる方いましたら、 ヒントでも構いません。 よろしくお願いします。

  • nag0720
  • ベストアンサー率58% (1093/1860)
回答No.5

#3です。 なんか、まだやりたいことがはっきりしませんねえ。 Myform2のチェックボックスの状態をMyform1と同じにさせたいなら、 Myform1のPrivate Sub CommandButton1_Click()の中で、 For i = 1 To 11   Myform2.Controls("CheckBox" & i).Value = Me.Controls("CheckBox" & i).Value Next i を実行します。 ただし、"チェックが入っています"のメッセージを表示した直後にチェックボックスの値をFalseにクリアしているので、その前に上記の命令を実行する必要があります。 どれかのチェックボックスがチェックされているときに、 ボタンのクリックでMyform1を非表示にしてMyform2を表示したいなら、 前半で作成したMyFlgを利用して、 If myFlg = True Then   Me.Hide   Myform2.Show End If を実行すればOKです。

  • nag0720
  • ベストアンサー率58% (1093/1860)
回答No.3

>具体的には、ユーザーフォーム(myfoam1)にcheckを入れ、ボタンを押すと、 >別のユーザーフォーム(myfoam2)に移り、checkboxの一覧が現れる。 ユーザーフォームにcheckを入れるとはどういう意味でしょうか? フォームの中のチェックボックスではなくて? フォームを指定する場合は、Meは不要です。 フォームの表示はShow、非表示はHideメソッドを使ってください。 あと、フォームの表示は通常はモーダル表示(別のフォームは操作できない)なので、フォームをどういう状態しておくかによって、LoadやUnload手続きも使用する必要があります。 checkがない場合は、Myform2を非表示にしたいようですが、非表示にするためには表示されていなければなりません。 Myform1とMyform2の表示状況(遷移状況)を明確にしておかないとプログラムは組めませんよ。

mai5891
質問者

お礼

回答ありがとうございます。 フォームの中のcheckboxのことでした。 フォームの表示状態は、 フォームの中のチェックボックスでは (1)ユーザーフォーム(myfoam1)フォームの中のチェックボックス(この時、myfoam2は非表示)、ボタンを押すと、 別のユーザーフォーム(myfoam2)に移り、フォームの中のチェックボックスの一覧が現れる。(この時、myfoam1は非表示に) (2)myfoam1のcheckboxを押すと、myfoam2のcheckboxがチェックした項目を関連付けて、表示させたり、非表示にさせたいんです。 (3)myfoam2のcheckboxの値を最終的には、ワークシートへ値を表示させたいと思っています。 この3つを表示させるには、どのように行いますか? その前に、やりたいことは分かりましたか? 教えて頂けると、助かります。 よろしくお願いします。

  • nag0720
  • ベストアンサー率58% (1093/1860)
回答No.2

ソースを見ましたがやりたいことが分かりません。 myfoamとはMyformのことでしょうか。 で、Myformとは何なんでしょう? 「myfoam1のソースです」とあるし、myformという名前からユーザーフォームのようですが、 Me.Myform1とあるので、フォーム上のコントロールのような感じもしますし。 「checkを入れるとmyfoamへリンクする」という意味も分かりません。 具体的に何をしたいんでしょうか?

mai5891
質問者

お礼

回答ありがとうございました。 myfoamとは、ユーザーフォームの事です。 具体的には、ユーザーフォーム(myfoam1)にcheckを入れ、ボタンを押すと、 別のユーザーフォーム(myfoam2)に移り、checkboxの一覧が現れる。 という処理をさせたいと考えています。 至らないところがあり、申し訳ありません。 上記の処理をするには、どのようにしますか? よろしくお願いします。

  • mitarashi
  • ベストアンサー率59% (574/965)
回答No.1

どの様な事をなさりたいかが読み取れないので、回答がつかないのだと存じます。 ワークシート上のコントロールの操作については、下記をご覧ください。 コードからのコントロールの設置法も載っています。 http://www.happy2-island.com/excelsmile/smile03/capter00716.shtml 下記#3で回答しておりますが、数を減らせばxl2010でも動作しました。 http://okwave.jp/qa/q5146795.html 実用上は、あらかじめ設置しておいて、Visibleを操作する方が良いと思います。 配置等で頭を悩ませないですみますので。 Meを付けているのは、インテリセンスが効いて入力が楽だからです。 Private Sub CheckBox1_Change() If Me.CheckBox1.Value = True Then Me.CheckBox2.Visible = True Else Me.CheckBox2.Visible = False End If End Sub

mai5891
質問者

お礼

回答ありがとうございます。 mitarashiさんような事がしたいのでありません、、、 やりたいことは、 checkbox1のmyfoam1からmyfoam2へ checkを入れるとmyfoamへリンクするという 処理がさせたいのです。 漠然としていて分かりにくいと思うので、 以下、プログラムソースを載せます。 分かる方いましたら、教えてください。 教えて頂けると、助かります。 よろしくお願いします。 ___ここから____myfoam1のソースです。 Private Sub CommandButton1_Click() Dim myMSG As String Dim myFlg As Boolean, i As Integer myFlg = False For i = 1 To 11 If Me.Controls("CheckBox" & i).Value = True Then myMSG = myMSG & Me.Controls("CheckBox" & i).Caption & vbCrLf myFlg = True End If Next i If myFlg = True Then myMSG = myMSG & "にチェックが入っています" Else myMSG = "いずれにもチェックが入っていません" End If MsgBox myMSG For i = 1 To 11 Me.Controls("CheckBox" & i).Value = False Next i For i = 1 To 11 'オプションボタンの左にキャプションが配置 Me.Controls("CheckBox" & i).Alignment = fmAlignmentLeft Next i For i = 1 To 11 'サイズがキャプションの幅に自動調整 Me.Controls("CheckBox" & i).Alignment = fmAlignmentLeft Me.Controls("CheckBox" & i).AutoSize = True Next i For i = 1 To 11 '色を指定 Me.Controls("CheckBox" & i).BackColor = RGB(153, 255, 153) Next i If Me.myForm1.Value = True Then Me.myForm2.Visible = True Else Me.myForm2.Visible = False End If End Sub ___ここまで___ コンパイルエラー: myfoam1 メゾッドまたは、データメンバが見つかりません。 と表示されます。

関連するQ&A

  • Excel VBAで CheckBox を印刷する時タイムラグが発生

    Windows2000,Excel2000(SP3) です。 Excelで表を印刷しようとしています。 Sheet1 に印刷するレイアウトを作成し CheckBoxを配置 してあります。 Sheet2 にデータが入っており VBAでそのデータを Sheet1 に展開して印刷するプログラムを書きました。 (もちろんCheckBoxにも値を設定してます) 最初のページはちゃんと出力されるのに、2ページ目から CheckBox のチェックが1ページ目と同じものが印刷され てしまいます。 VBA が終了した時点では、CheckBoxのチェックは正しいの ですが(画面上で確認)プリントアウトは1ページ目と同じものです。 Application.ScreenUpdating=True(画面再描画)とか Calculate とかやって見ましたがダメでした。 オブジェクトの表示が正しく印刷されるようにするにはどうしたら良いか教えてもらえないでしょうか?

  • EXCEL VBA CHECKBOXの表示名セット

    いつもお世話なっています。 久しぶりに質問させて下さい。 EXCEL2000で、業務上での原紙ファイルを作成し、 複数の部署に配布を予定しています。 そして、部署毎に、配布するファイルのシートに入れておく、 CHECKBOXの約30個に対し、 その表示名(CAPTION)を、部署毎に変更したいので、 マクロにそれを記述しておきたいのです。 (複数の部署毎に、CAPTOINを変えたいからです。 それと毎回内容も変えたいのです。) いろいろとネットを見てて、 VBAマクロに記述をすることで可能のようですが、 ちょうどいい参考になる例がなかったので、 教えて下さい。 よろしくお願い致します。

  • エクセル VBA CheckBox名に変数を使用

    エクセル VBA CheckBoxのオブジェクト名に変数を使用して 値を取得したいのですが・・・ If ActiveSheet.OLEObjects(TempName).Object.Value = True Then          (処理) Else          (処理) End If 「実行時エラー '1004': OLEObject クラスのオブジェクトのプロパティを取得できません。」 というエラーがでてしまいます。 何が原因なのかわかる方是非ご教授ねがいます。

  • Excel VBA CheckBoxの漏れ防止

    CheckBoxのチェック漏れ防止方法で現在以下のコードで実行しています。 CheckBox1~7つあり、1つも選択していない場合は、メッセージを出す仕組みです。 Private Sub CommandButton1_Click() If CheckBox1 = True Or CheckBox2 = True Or CheckBox3 = True Or CheckBox4 = True Or _ CheckBox5 = True Or CheckBox6 = True Or CheckBox7 = True Then MsgBox "OK" Else MsgBox "必ず一つ以上選択してください。" End If End Sub 今は、CheckBoxが7つだけなのですが、今後20個ぐらいに増える予定です。 For~Nextで試してみたのですが、メッセージがチェックした分だけ表示を繰り返してしまいました。 今まで通り、Orでつなげても良いのすが、もう少しコードをコンパクトにする方法を探しているのですが、なかなか見つかりません。 ご教授をお願いします。

  • エクセルVBAで

    お世話になります。 エクセルVBAで簡易プログラムを作成しています。 その中でユーザーフォームを作り、チェックボックスで 6項目からどれか一つ選択する様な仕組みを作っています。 利用者が二つ以上選択(チェック)出来ない様にしたいの ですが、どの様にすれば良いでしょうか。 ちなみに今の記述は下記の様になります。 ご教授下さいます様、宜しくお願い致します。         記 If CheckBox1 = False Then If CheckBox2 = False Then If CheckBox3 = False Then If CheckBox4 = False Then If CheckBox5 = False Then If CheckBox6 = False Then MsgBox "どれか選択して下さい!" GoTo err_jmp Else: mytoki = "3年前から" End If Else: mytoki = "2年前から" End If Else: mytoki = "1年前から" End If Else: mytoki = "半年前から" End If Else: mytoki = "1週間前から" End If Else: mytoki = "昨日から" End If

  • CheckBoxの配列化

    Excel2000のVBAで以下のような処理をしたいのでご教示願います。 Userform1にCheckBox1~CheckBox10の10個のチェックボックスがあったとして以下のようにFor文でまとめて処理したいのですがうまくいきません。  For I = 1 to 10   UserForm1.CheckBox(I).value = True  NEXT

  • checkboxについて

    初心者で簡単なことだと思われますがわかりません。 以下のようなcheckboxで「表示部分」をJavascriptで変更したい場合はどのように書いたらよいでしょうか。 <INPUT type="checkbox" name="IN1" value="表示">表示部分</INPUT> よろしくお願いいたします。

    • ベストアンサー
    • Java
  • Checkboxの数え方

    完全な素人です 1つのGroupBox内にある複数のCheckboxの中から チェックされているCheckboxの数を数えたいのですが どうしたらいいのでしょうか? ちなみにGroupBoxも複数あります どなたか教えてください、宜しくお願いします。

  • Excel VBAでCheckboxの名前を変数にとって値を調べたい

    Excel VBAでCheckboxの名前を変数にとって値を調べたいのです. シートにCheckboxがたくさん貼ってあり名前とOn,Offを調べたいのですが下記では名前は調べられてもOn,Offが確認できないのですが On,Offを別変数にとる場合タイプはなににすればいいでしょうか。 たとえば dim i as integer dim checkname() dim checvalue() as ???? i=0 for i=1 to 2 If Mid(ActiveSheet.Shapes(i).Name, 1, 5) = "Check" Then i=i+1 redim preserve checkname(i) checkname(i)=ActiveSheet.Shapes(i).Name redim preserve checvalue(i) checvalue(i)=ActiveSheet.Shapes(i).value <---これではエラー end if next i

  • EXCEL VBAのフォームについて

    EXCEL VBAでフォームを表示したときに、最小化ボタンを表示させることは出来ないのでしょうか。 通常、フォームを表示させると、右上にXのボタンのみ表示されますが、通常のWindowsの画面の最小化ボタンを表示させる方法が、判りません。 この機能は、EXCEL VBAには実装されていないのでしょうか。また、最小化ボタンでなくてもかまいません。要は、やりたいことは、表示されているフォームを一時的に最小化する為に、その機能を実装したいと言うことです。ご存じのかたおりましたら、教えて下さい。 当方の環境はwindows-xp excel-2000です。