Excel VBA質問箱 IV

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

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


5893 / 13646 ツリー ←次へ | 前へ→

【48342】範囲内にあるチェックボックス削除 kanae 07/4/13(金) 14:15 質問[未読]
【48343】Re:範囲内にあるチェックボックス削除 Kein 07/4/13(金) 14:31 発言[未読]
【48345】Re:範囲内にあるチェックボックス削除 kanae 07/4/13(金) 14:53 発言[未読]
【48346】Re:範囲内にあるチェックボックス削除 Kein 07/4/13(金) 15:18 発言[未読]
【48348】Re:範囲内にあるチェックボックス削除 kanae 07/4/13(金) 15:34 発言[未読]
【48350】Re:範囲内にあるチェックボックス削除 Kein 07/4/13(金) 16:32 回答[未読]
【48351】Re:範囲内にあるチェックボックス削除 kanae 07/4/13(金) 16:58 お礼[未読]

【48342】範囲内にあるチェックボックス削除
質問  kanae  - 07/4/13(金) 14:15 -

引用なし
パスワード
   いつもお世話になります。
日頃より、いろいろ質問に回答いただきホントに感謝しております。

今回は、チェックボックスについて分からない事があり、ご教授願いたいのですが、
よろしくお願いします。

まず、やりたい事は、条件によって行の非表示を行いたいのですが
その行内にチェックボックスがあると、行を非表示にしてもチェックボックスだけ残ってしまいます。

1.このとき、チェックボックスを同じく隠す事は可能でしょうか?
 formsのチェックボックスではなく、Shapesのチェックボックスでお願いします。

2.もしそれが出来ないのであれば、非表示にしたい行の中にあるチェックボックスのみ
 削除する事は可能でしょうか?

よろしくお願いします。

【48343】Re:範囲内にあるチェックボックス削除
発言  Kein  - 07/4/13(金) 14:31 -

引用なし
パスワード
   >Shapesのチェックボックス
とは、フォームツールバーのチェックボックスのことですか ?
こちらでテストしてみたかぎりでは、行の非表示でちゃんと隠れてますが・・。
もしかしたら、チェックボックスの高さが行高より長い場合に、そのような状態に
なるのかも知れませんね。そのシートを開いたまま、以下のマクロを実行して
"行高 > チェックボックスの高さ" にして、行の非表示をテストしてみて下さい。

Sub CkBox()
  Dim CkB As CheckBox

  For Each CkB In ActiveSheet.CheckBoxes
   CkB.Height = ActiveSheet.StandardHeight - 0.1
  Next
End Sub

【48345】Re:範囲内にあるチェックボックス削除
発言  kanae  - 07/4/13(金) 14:53 -

引用なし
パスワード
   ▼Kein さん:

返答ありがとうございます。

>フォームツールバーのチェックボックスのことですか ?

「表示」-「ツールバー」-「フォーム」から作ったチェックボックスです。

>もしかしたら、チェックボックスの高さが行高より長い場合に、そのような状態に
>なるのかも知れませんね。そのシートを開いたまま、以下のマクロを実行して
>"行高 > チェックボックスの高さ" にして、行の非表示をテストしてみて下さい。

 実行してみて、非表示を行いましたが、チェックボックスは残ったままです。
 ですが、私の言う「非表示にした」と言うのはプログラムではなく、
 ただ単に行を選択して非表示にしただけです。
 プログラムで実行したら、非表示になりますか?
 その場合、行の非表示に加えて、チェックボックスの非表示もプログラムに記述するのでしょうか?

言葉足らずですみません。ウマく伝わっているでしょうか?

【48346】Re:範囲内にあるチェックボックス削除
発言  Kein  - 07/4/13(金) 15:18 -

引用なし
パスワード
   >単に行を選択して非表示
手作業でやったのではありません。コードを作って実行した結果です。
しかし普通は、例えば何かの条件に合致したデータがある行を非表示にするなどで、
自由に任意の行を非表示にすることはありませんよね ? もしそうしたいなら
行を非表示にすることをトリガーとするイベントが無いので、何か別のタイミング
でマクロを走らせ、チェックボックスを非表示にするしかありません。
>何かの条件に合致したデータがある行を非表示
とする場合は、セル入力イベントとかシート再計算のイベントなどを使って、
行を非表示とするとともにチェックボックスを非表示にすることが出来ます。
なので、そのへんのところをもう少し詳しく、かつ具体的に説明してみて下さい。

【48348】Re:範囲内にあるチェックボックス削除
発言  kanae  - 07/4/13(金) 15:34 -

引用なし
パスワード
   ▼Kein さん:
説明不足ですみません。

やりたいのは、例えば100行の全てにチェックボックスが付いてあるとして、
入力値が50、85だったら、50行目から85目を非表示に
入力値が70、80だったら70行目から80行目を非表示にすると言う感じのものです。
各行にはそれぞれ異なったレイアウト(罫線とかセル色)があるので、
削除するのではなく非表示で対応したいと思っております。

>>単に行を選択して非表示
を行って、チェックボックスが消えなかったので、コードでやっても消えないのかと
思い込んでいました。
コードでその行にあるチェックボックスを非表示にする方法を教えていただけないでしょうか?
よろしくお願いします。

【48350】Re:範囲内にあるチェックボックス削除
回答  Kein  - 07/4/13(金) 16:32 -

引用なし
パスワード
   >入力値が50、85だったら、50行目から85目を非表示
ということなら以下のマクロを入れて、テスト用の空白シートを開いて
Test_CkBを実行してみて下さい。全行を表示してチェックボックスが
非表示になっているか確認する場合は、手作業でやって下さい。
Del_CkBは、非表示のものも含めてアクティブシート上のチェックボックスを
一括して削除します。

Sub Test_CkB()
  Dim Srw As Long, Erw As Long, Tgr As Long
  Dim Lp As Single, Tp As Single, Hp As Single
  Dim C As Range
  Dim CkB As CheckBox
 
  With Range("B1")
   Lp = .Left: Hp = .Height
  End With
  For Each C In Range("B1:B20")
   ActiveSheet.CheckBoxes.Add Lp, C.Top, Hp, Hp
  Next
  With Application
   Srw = .InputBox("非表示にする開始行を 1〜20 の数値で" & _
   "入力して下さい", Type:=1)
   Erw = .InputBox("非表示にする最終行を 1〜20 の数値で" & _
   "入力して下さい", Type:=1)
  End With
  Select Case True
   Case Srw = False: Exit Sub
   Case Erw = False: Exit Sub
   Case Srw > Erw: Exit Sub
   Case Srw > 20: Exit Sub
   Case Erw > 20: Exit Sub
  End Select
  For Each CkB In ActiveSheet.CheckBoxes
   Tgr = CkB.TopLeftCell.Row
   If Tgr >= Srw And Tgr <= Erw Then
     CkB.Visible = False
     Rows(Tgr).Hidden = True
   End If
  Next
End Sub

Sub Del_CkB()
  With ActiveSheet.CheckBoxes
   MsgBox .Count & " 個を削除します"
   .Delete
  End With
End Sub

以上をヒントにすれば、目的どうりのマクロが組めると思いますが。

【48351】Re:範囲内にあるチェックボックス削除
お礼  kanae  - 07/4/13(金) 16:58 -

引用なし
パスワード
   ▼Kein さん:
ありがとうございます。
このプログラムをヒントにして、あとは自分で試行錯誤してみます。
説明不足でご迷惑をかけてすみませんでした。
本当にありがとうございました。

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