アプリ版:「スタンプのみでお礼する」機能のリリースについて

マクロで行削除ボタンを作成し、アクティブセルの行を削除(消去)するように
しています。

コマンド自体が単一行での動作を想定しているため、ifでの分岐で複数行の場合はexitを用いて
動作を停止したいと考えています。


A1セルのみの選択→OK
A1からB1までの選択→OK
A1からA3までの範囲→停止
A1からC3までの範囲→停止

といったような考えです。

ネット上で調べますと、複数範囲という事例はありましたが、当方の動きとは異なる
内容です。
複数行を選択している場合の確認方法はありますでしょうか?

A 回答 (2件)

こんばんは


行の個数を数えれば良いかと思います
If Selection.Rows.Count > 1 Then Exit Sub
とか
If Target.Rows.Count > 1 Then Exit Sub
とか・・
    • good
    • 2
この回答へのお礼

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

お礼日時:2023/05/24 06:20

こんばんは



>アクティブセルの行を削除(消去)するようにしています。
アクティブセルが対象であれば、基本的に1セルだけなので、チェックの必要は無いと思いますが・・

>複数行を選択している場合の確認方法はありますでしょうか?
確実なのは、選択範囲のセルの行(=Row属性)が全部同じかを調べれば良いのでしょうけれど、若干面倒な気もしますので、
 Intersect(Selection.Cells(1).EntireRow, Selection).Cells.Count = Selection.Cells.Count
なんてのでも判定できると思います。

※ Selection が Range であるという前提です。
※ Range であることを、事前にチェックしておく必要があると思います。
※ 上記はセルの個数で判定していますので、特殊な選択(同じセルを2度含む範囲で重複選択するなど)方法で選択している場合には正しく判定できませんけれど。
その他にも様々な複数セルの選択方法がありますが、セルの重複が無ければ正しく判断できます。

普通に素直に1つの範囲だけの選択を想定すれば良いだけなら、No1様の
 Selection.Rows.Count > 1
が、一番簡単でしょう。

複雑な選択方法にも確実に対応するなら、
check = True
For Each c In Selection
If c.Row <> Selection.Cells(1).Row Then check = False: Exit For
Next c
MsgBox check
のような感じでチェックを行えば、判定できるでしょう。
    • good
    • 2
この回答へのお礼

回答ありがとうございました。
No.1様の回答が早かったので、そちらをベストアンサーにさせて
いただきました。

今回は複雑な条件はありませんでしたが、今後の参考と
させていただきます。

お礼日時:2023/05/24 06:21

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