ROWS("10:10").selectを実行すると、複数の行が選択される現象について。

Anonymous
2023-03-22T04:50:03+00:00

エクセルVBAで10行目・1行を選択するために

ROWS("10:10").selectを実行すると、

複数の行(例:10行目~15行目)が選択されでしまいます。

マクロの記録で10行目を選択する動作を記録すると

ROWS("10:10").selectと記録されたので、これを参考にしました。

マクロの参考書を見てROWS(10).selectにしてみましたが、同様です。

やりたいことは10行目を選択して改ページを追加したい

ので、テストすると複数行(例:10行目~15行目)が

選択された状態でも10行目の上(前)に改ページが

追加(挿入)されるので問題ありませんが、

複数行選択されるのが正直・気持ち悪いと感じます。

なお、テストはVBエディターでF8押下で1STEPずつ実行した

時の現象です。 ちなみに対象シートはウインドウ枠の固定を設定して

上部3行くらいを固定しています。

どなたか同様な現象をご存じの方、解消方法をご存じの方が

いらっしゃいましたら、理由と解決方法をご教示頂きたいです。

※追記します。

 ひょっとして...シートは下記の通りB列を縦に結合しています。

 マウスの操作では、下記の通り9行目を選択すると9行目のみが

 選択されますが、VBAでRows("9:9").SelectでもRows(9).Selectでも

 9行目~16行目が選択されます。B列を縦に結合しているのが

 原因でしょうか?

開発者テクノロジ | Visual Basic for Applications

ロックされた質問。 この質問は、Microsoft サポート コミュニティから移行されました。 役に立つかどうかに投票することはできますが、コメントの追加、質問への返信やフォローはできません。

0 件のコメント コメントはありません
質問作成者が受け入れた回答
Anonymous
2023-03-22T06:22:53+00:00

>VBAでRows("9:9").SelectでもRows(9).Selectでも

 9行目~16行目が選択されます。B列を縦に結合しているのが

 原因でしょうか?

私のPCでもそうなりました。

セル結合を解除してから実行したら、9行目だけ選択されるようになりました。

なので、

B列を縦に結合しているのが原因でしょう。

この回答は役に立ちましたか?

1 人がこの回答が役に立ったと思いました。
0 件のコメント コメントはありません

3 件の追加の回答

並べ替え方法: 最も役に立つ
  1. Anonymous
    2023-04-03T08:55:15+00:00

    清洲 様、

    ・アドバイスありがとうございます。

     いろいろイジッてテストを繰り返して気付いて、

     今は下記の記述で実行しています。

    **** 今のロジック

    For ROW_CNT = 1 To 1000 Step 10

    ActiveWindow.SelectedSheets.HPageBreaks.Add Before:=Range("A" & ROW\_CNT) 
    

    Next

    ##### 以前のロジック

    For ROW_CNT = 1 To 1000 Step 10

    range("A" & ROW\_CNT).select 
    
    ActiveWindow.SelectedSheets.HPageBreaks.Add Before:=ActiveCell 
    

    Next

    ご指摘の通り、私もVBAでマクロを作る時は、極力ActiveやSelectを使いません。

    遅いからです。マクロの記録だと、やたらとActiveやSelectが記録され、

    すぐ後のコマンドが前述の以前のロジックのように

    「Add Before:=ActiveCell」と、なります。

    これを鵜吞みにしてしまい「ActiveCell」指定=事前のselectが必要と

    誤解してしまいました。

    いつもはネットで調べる前に、インプレス社発行の「できる大事典」で調べて

    テスト/確認をするのですが、今回はマクロの記録を鵜呑みにしてしまいました。

    (あとで できる大事典を見て「Before:=Range("A1")」と例題が記載されて

     いたのを見て、やっちゃったーと深く後悔しました)

    例えば、セルを横に1つずつ移動(A1~A20)させながらセルの内容を調べて

    セルの内容に合わせて処理をする、な~んてロジックを組んで実行し、

    実際に画面上でセルが1つずつ移動する様子を見ていると「えええぇ~!」と

    感じるほど遅いです。インタプリターゆえ? いやいや、セルを横に

    1つずつ移動=画面の書き換え=何らかの更新がその都度発生しているわけですから、

    遅くて当たり前。同じ理由で「Application.ScreenUpdating = False」に

    しても効果が薄い(このケースなら効果なし)のも当たり前。

    上記のような操作が必要なら、A1~A20のセル範囲をマクロ内のテーブルに取り込み

    処理したほうが圧倒的に早いです。(そりゃそうだろうなぁ~と実感しました)

    マクロの記録のActiveやSelectは参考程度にして、要するにオブジェクトを

    キチンと指定すればいいんだなぁ~と感じています。

    (もちろんコマンドの仕様によりますが)

    この回答は役に立ちましたか?

    0 件のコメント コメントはありません
  2. simo-k 98,300 評価のポイント ボランティア モデレーター
    2023-03-22T12:03:46+00:00

    Selectで選択するから、結合に悪さされて範囲を拡張されているだけです。

    試しに下記コードを入力して、ステップ実行にて 変数(aaa,bbb)の内容をウォッチしてみて下さい。

    デバッグなどの観点にて、Selectを使いたい面は理解出来ますがシート上で選択という動作が伴ないますので

    処理の為のリソースも使いますし、マクロの高速化は図りづらいです。

    必要に応じてSelectの利用は減らした方がベターです。

    Dim aaa, bbb 
    
    Rows("9:9").Select 
    
    aaa = Selection 
    
    bbb = Rows("9:9") 
    

    > 改ページを追加したい

    改ページするだけなら、リソースを沢山使う行選択ではなくセル指定でいいのでは?

    ActiveWindow.SelectedSheets.HPageBreaks.Add Before:=Range("A9")

    この回答は役に立ちましたか?

    0 件のコメント コメントはありません
  3. Anonymous
    2023-03-22T06:34:11+00:00

    清洲 様、

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

     一旦投稿して、ひょっとしてと感じての追記でした。

     理由と解決方法は理解しましたが、であれば、マウスの

     操作時にも同じ現象になれば混乱しなくてすんだよなぁ~

     と、感じてしまいます。ご回答ありがとうございました。

    この回答は役に立ちましたか?

    0 件のコメント コメントはありません