• 締切済み

エクセルVBA チェックボックスで;;

下記のような表を作っているんです・・・     A   B   C    D    1  日付  名前  評価   2  1日   あ   A   □ 3  2日   い   B   □ 4  2日   う   A   □ 5  4日   え   D   □ というような感じです(まだ右と下は項目いっぱいあります) Dのセルにチェックボックスをつけてチェックが入った物のみを別なシートにコピーしてそのページを印刷させ印刷し終わったら印刷した行の色を変えたいのです。 色々試してみたのですが、チェックボックスのON OFF判断もままならない状況でした;; どなたか宜しくお願いいたします。

みんなの回答

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

間違っているかも知れませんが、このチェックボックスを 各行に関連付ける方法は、難しい面を抱えていると思います。 (1)チェックボックス集団をどれでもチェックすると反応してくれるイベントがない。 かつその集合の中でどれかを知らせてくれないといけない がそれもない。 (2)VBAではコントロール配列が使えない。 20行あるとして、チェックボックスの数だけイベントのコードを書けば出来るのでしょうが、やりたくない。 (3)コントロールのグループ化も出来るが使えなさそう。 (4)#2でも出ている、LinkedCellを各チェックボックスに設定してみたが、シートのChangeイベントやSelectionChangeイベントに反応 しなかった。 (例データ) (2)の解決はあきらめて、泥臭くやって見ました。 チェックボックス4つの例です。 Sheet3のA1:C5に 日付  名前  評価   2004/8/1 山本 A 2004/8/2 木村 B 2004/8/2 吉井 B 2004/8/3 近藤 C D列のD2、D3、D4、D5にCheckBox1、2、3、4をそれぞれ貼りつけ。 E2はワークセルで使う。 (コード) Private Sub CheckBox1_Click() Cells(2, 5) = 1 End Sub Private Sub CheckBox2_Click() Cells(2, 5) = 2 End Sub Private Sub CheckBox3_Click() Cells(2, 5) = 3 End Sub Private Sub CheckBox4_Click() Cells(2, 5) = 4 End Sub -------- Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address = "$E$2" Then i = Worksheets("sheet3").Cells(2, 5) ' MsgBox i Worksheets("sheet2").Cells(10, "A") = Worksheets("sheet3").Cells(i + 1, "A") Worksheets("sheet2").Cells(10, "B") = Worksheets("sheet3").Cells(i + 1, "B") Worksheets("sheet2").Cells(10, "C") = Worksheets("sheet3").Cells(i + 1, "c") Worksheets("sheet3").Range(Cells(i + 1, "A"), Cells(i + 1, "C")).Interior.ColorIndex = 6 End If End Sub Sheet3でCheckBox1をクリックすると Sheet2のA10が 2004/8/3 近藤 C となり、Sheet3のA2:C2が黄色になる。 Cells(i + 1, "C")).Interior.ColorIndex = 6 の下に Worksheets("sheet3").Range(Cells(i + 1, "A"), Cells(i + 1, "C")).Interior.ColorIndex = 6 の下に Worksheets("sheet2").Range(Cells(10, "A"), Cells(10, "C")).PrintOut をいれると、この行を印刷します。 後は推測で、手直ししてください。

nanny
質問者

お礼

そうですか・・・ なかなか厳しい感じですね・・・;; 上記を参考にさせていただき、もうちょっとがんばってみます。 泥臭くやるのは、得意なので^^ というか泥臭くしか作れないので^^がんばってみます ありがとうございました

  • web2525
  • ベストアンサー率42% (1219/2850)
回答No.3

VBAでの処理ではなくマクロで同じ動作を行う方法を記録して、マクロの中身研究されては? 取りあえずチェックボックスとリンクするセルの指定はされていますか? リンクされたセルにはチェックを入れると[TRUE]が入りますので(チェックない場合は[FALSE]です)フィルターオプションでチェックされた行のみ抽出しコピペ&印刷&行の色変更、その後〔全て表示〕で希望の処理が終了するはずです。 マクロでの記録ではなくどうしてもVBAで一から組みたいと仰るのなら、そのマクロの内容を参考になされて自分なりに組み替えられては?

  • papayuka
  • ベストアンサー率45% (1388/3066)
回答No.2

コントロールツールボックスのCheckBoxだと、簡単なのはプロパティのLinkedCellを「D1」のようにセルアドレスで指定してそれを見るって感じでしょうか。

  • aa109
  • ベストアンサー率11% (36/310)
回答No.1

ワタシだったら 下記のようにします SelectionChangeイベントを利用して Activecells.value=”v” で選択セルにチェック、 印刷する時には オートフィルターでチェックがある行を抽出し 色をつけます そして印刷・・

関連するQ&A

専門家に質問してみよう