Microsoft 製品に組み込まれている Visual Basic の実装。
>VBAでRows("9:9").SelectでもRows(9).Selectでも
9行目~16行目が選択されます。B列を縦に結合しているのが
原因でしょうか?
私のPCでもそうなりました。
セル結合を解除してから実行したら、9行目だけ選択されるようになりました。
なので、
B列を縦に結合しているのが原因でしょう。
このブラウザーはサポートされなくなりました。
Microsoft Edge にアップグレードすると、最新の機能、セキュリティ更新プログラム、およびテクニカル サポートを利用できます。
エクセル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列を縦に結合しているのが
原因でしょうか?
Microsoft 製品に組み込まれている Visual Basic の実装。
ロックされた質問。 この質問は、Microsoft サポート コミュニティから移行されました。 役に立つかどうかに投票することはできますが、コメントの追加、質問への返信やフォローはできません。
>VBAでRows("9:9").SelectでもRows(9).Selectでも
9行目~16行目が選択されます。B列を縦に結合しているのが
原因でしょうか?
私のPCでもそうなりました。
セル結合を解除してから実行したら、9行目だけ選択されるようになりました。
なので、
B列を縦に結合しているのが原因でしょう。
清洲 様、
・アドバイスありがとうございます。
いろいろイジッてテストを繰り返して気付いて、
今は下記の記述で実行しています。
**** 今のロジック
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は参考程度にして、要するにオブジェクトを
キチンと指定すればいいんだなぁ~と感じています。
(もちろんコマンドの仕様によりますが)
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")
清洲 様、
・ご回答ありがとうございます。
一旦投稿して、ひょっとしてと感じての追記でした。
理由と解決方法は理解しましたが、であれば、マウスの
操作時にも同じ現象になれば混乱しなくてすんだよなぁ~
と、感じてしまいます。ご回答ありがとうございました。