[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『VBA:CheckBoxのTrueを検出する方法』(masabou5)
シート上にCheckBoxが500個ほど配置されていて、A列に名簿が表にしてあります。 CheckBoxにチェックが付いているものだけを検出し、B列に表示させたいと思っています。 素人的には、
If CheckBox1 Then Range("B1") = Range("A1") If CheckBox2 Then Range("B2") = Range("A2")
などのように500個作ればいいと思いますが、これもなかなか大変なので、 もっとよい方法はありませんでしようか? もし、ありましたらお教え下さい。よろしくお願いします。
ループさせてはいかがでしょう?
Option Explicit
Sub chk() Dim obj As OLEObject Dim i As Long For Each obj In Worksheets(1).OLEObjects i = i + 1 If TypeOf obj.Object Is MSForms.CheckBox Then If obj.Object.Value = True Then 処理 End If Next End Sub (MARBIN)
なお、↑はコントロールツールボックスのチェックボックスである、という 前提です。 (MARBIN)
MARBINさん、ありがとうございました。 処理の仕方が今ひとつですが、もう少し研究してみます。(masabou5)
「処理」の方は、 Offset を使うとうまくいくかもしれませんね。 (MARBIN)
いろいろ研究してみましたが、処理のところがどうしても出来ませんでした。 すみません、一例を教えていだけませんか? 尚、i=i+1のところも分かりませんでした。(masabou5)
"処理"はこんなかんじです。
ActiveSheet.Range("B1").Offset(i).Value = ActiveSheet.Range("A1").Offset(i).Value
>尚、i=i+1のところも分かりませんでした。 今回は不要でした。削除忘れです。 失礼しました。 (MARBIN)
MARBINさん、早速ありがとうございました。 しかし、次のようにしてみましたが、CheckBoxのTrue、Falseにかかわらず、 すべての名簿が出てきました。 どうしてでしようか?すみません、もう一度教えて下さい。(masabou5)
Dim obj As OLEObject
Dim i As Long
For Each obj In Worksheets(2).OLEObjects
For i = 1 To 500 If TypeOf obj.Object Is MSForms.CheckBox Then If obj.Object.Value = True Then
Range("B1").Offset(i).Value = Range("A1").Offset(i).Value
End If
End If Next Next
For Eachループの中にFor Nextループを入れていてはそうでしょう。 MARBINさん忘れものを取り戻して来ますた。 (ROUGE) '---- Dim obj As OLEObject Dim i As Long i = 0 For Each obj In Worksheets(2).OLEObjects If TypeOf obj.Object Is MSForms.CheckBox Then If obj.Object.Value = True Then Range("B1").Offset(i).Value = Range("A1").Offset(i).Value End If End If
ROUGEさん、フォローありがとうございます。 masabou5さん、ごめんなさい。 どうも最近ボケボケです。 春のせいかな? 私はどこ?ここはだれ? (MARBIN)
ROUGEさん、ありがとうございました。 完璧に出来るようになりました。もう少しOffsetの使い方を勉強します。
>masabou5さん、ごめんなさい。 そうおっしゃらないで下さい。お世話になりました。感謝いたします。 エクセルの学校の回答者の先生方の素晴らしさがよく分かります。 「エクセルの学校」バンザイ!・・・管理者のkazuさん、ありがとうございます。
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.