dポイントプレゼントキャンペーン実施中!

vbaのコードについて教えて下さい。
以下のようなリストがあります。
「Aグループ 全て」にチェックをいれると 4行目から7行目にある「Aグループ」の文字列を含む全てにチェックがつく、
同じように、「Bグループ 全て」にチェックをいれると 9行目から12行目にある「Bグループ」の文字列を含む全てにチェックがつくコードを書きたいです。

どなたかご教示いただけますでしょうか?
よろしくお願いいたします。

「vbaコードについて」の質問画像

A 回答 (2件)

こんにちは



シチュエーションがはっきりしませんけれど、以下は「エクセルのシート上」での話と仮定した場合の内容です。

チェックボックスの種類がわからない上に、セルの位置も不明なため、具体的なコードは書けませんので、考え方と方法のみになります。
また、チェックボックスの種類によってVBAでの扱いがかわりますので、種類に応じたコードにする必要があります。
面倒なのは、混在している場合で、両方に対応できるコードを作成することが必要になりますが、そんなことをするよりも、チェックボックスをどちらかに統一してしまった方が賢明かと思います。


事前に、チェックボックスのリンクセルを同じ行の一定列に設定しておけば、処理はかなり簡略化できます。
「○〇全て」がチェックされたときに、項目名の列から「○〇」を検索して、その行のリンクセルの列にTrueを設定するだけで良くなります。
「○〇全て」のチェックボックスの数が少なければ、個別にマクロを登録しておけば良いでしょう。
数が多い場合は、全部に同じものを登録(=コピペで作成するなど)してしまえばよいでしょう。
この場合は、最初にチェック状態と項目名をチェックして、「○〇全て」かつチェック状態の時にだけ、処理を行うようにしておけば良いでしょう。


リンクセルの設定を行なわない場合は、チェックボックスと行の関係をチェックする処理を上記に追加して作成する必要があります。
基本的に、チェックボックスとセルの位置は無関係なので、チェックボックスの名前や順番と行数とは無関係と考えなければならないからです。
チェックボックスのTopLeftCell属性でチェックボックスの左上のセルを取得できます。
これをそのまま対象行と想定してうまくいく可能性はありますが、確実を期するなら、チェックボックスの高さの中央が位置する行を探して、その行を対象行としておくほうが安全であろうと考えられます。

上記の処理を組み込むのが面倒であれば、同様の考えを利用して、「同じ行の固定列にリンクセルを設定する」マクロを作成して、一度だけ実行しておくことで、全体の処理は最初に述べた「簡略化した」処理でまかなうことができるようになることでしょう。
    • good
    • 1
この回答へのお礼

つたない説明だったにも関わらず
分かりやすくご教示いただきありがとうございます。
やってみます。

お礼日時:2020/12/03 20:47

『全て』が出来ているのなら、その方法と同じかもしれませんよ。


ただしそれぞれで選ぶべきチェックボックスの番号が変わるでしょうけど。
    • good
    • 1
この回答へのお礼

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

お礼日時:2020/12/03 20:47

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!