[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『特定の行以降でマクロが機能するようにしたい』(すがやっち)
早速質問させていただきます。
まずは以下のマクロをご覧ください。
Sub DeleteBlankRows()
Application.ScreenUpdating = False On Error Resume Next With Cells .SpecialCells(xlCellTypeConstants).EntireRow.Hidden = True .SpecialCells(xlCellTypeFormulas).EntireRow.Hidden = True .SpecialCells(xlCellTypeComments).EntireRow.Hidden = True .SpecialCells(xlCellTypeVisible).EntireRow.Delete .EntireRow.Hidden = False End With Application.ScreenUpdating = True End Sub
上のマクロの記述は、何もデータ、数式、コメントが入っていない行を削除するという意味です。セルの1行目から10行目(全体)には、上記のマクロを実行しても影響がないようしたいと思っていますが、どのような記述をプラスすればよいでしょうか?
よろしくお願いします。
>With Cells の範囲を、処理したい範囲ごとに分けて指定すればよいのでは?
(INA)
例えば、セルの1行目から10行目には上記のマクロを実行しても影響がないようにするのは、つまり11行目以下の行からマクロが反応するようにするということだと思います。
どのように記述したらよろしいでしょうか?よろしくお願いします。
範囲の指定方法ならば、マクロの記録が参考になると思いますが、 使ったことはありませんか?
Range("A1:B10") とか Rows("3:10") とか・・
(INA)
だいぶお悩みのようなので・・・
こんなんなりました。
Sub DeleteBlankRows() Application.ScreenUpdating = False On Error Resume Next Rows("11:11").Select Range(Selection, ActiveCell.SpecialCells(xlLastCell)).Select Selection.SpecialCells(xlCellTypeConstants).EntireRow.Hidden = True Selection.SpecialCells(xlCellTypeVisible).Select Selection.Delete Shift:=xlUp Cells.EntireRow.Hidden = False Application.ScreenUpdating = True End Sub (川野鮎太郎)
ちょっと違ってしまうと、途端にわからなくなってしまうのは、初心者だという証拠ですかね・・・汗。まだまだこれからですね。
解説・・・ (◎_◎;) ドキッ!! 逆にすがやっちさんの、With Cells・・・・・がどうやって出たのか知りたいぐらいです(^_^A; 私はINAさんの言われるように、一つ一つをマクロの記録でやったのを書いたに過ぎませんから_/ ̄|○ il||li まず、なぜ最初のマクロで10行目より上も削除されていたのかを、ステップインしながら確認しました。 With Cells .SpecialCells(xlCellTypeConstants).EntireRow.Hidden = True・・・(1) .SpecialCells(xlCellTypeFormulas).EntireRow.Hidden = True ・・・(2) .SpecialCells(xlCellTypeComments).EntireRow.Hidden = True ・・・(3) .SpecialCells(xlCellTypeVisible).EntireRow.Delete ・・・(4) (1)で、値が入っている行の非表示 (2)は、(1)で全部非表示されているので必要なくなった (3)も(2)と同様の理由で必要なくなった。 (4)が、全ての可視セル行の削除(これが原因で10行目までも削除されているのが判ったわけです。 そこで、マクロの記録で順番に操作したのが、 (1)11行目の選択・・・Rows("11:11").Select (2)11行目以降の入力済み最終セルの選択(Shift+Ctrl+Endキー)・・・ ・・Range(Selection, ActiveCell.SpecialCells(xlLastCell)).Select (3)は(2)で選択した部分の値が入っている行の非表示・・・ ・・Selection.SpecialCells(xlCellTypeConstants).EntireRow.Hidden = True (4)ここで行削除をすると、11行目以降の非表示になっている行も削除されるので、 編集−ジャンプ−セル選択−可視セルとしたのが、・・・ ・・Selection.SpecialCells(xlCellTypeVisible).Select (5)ここでやっと行削除しても条件どうりで削除できるので、単純に右クリックで行削除・・・ ・・Selection.Delete Shift:=xlUp となりました。 少しは判りましたでしょうか。(^_^A; 私もまだまだマクロの記録がメインでやってますし、慣れないうちは構文の見栄えや、 Selectの省略は考えずに、とりあえず希望の結果が得られるようにしています。 それで動くようになったものを、無駄な動きは無いかな・・・どこか省略できるかな? って考えて直すようにしています。 ここで回答されている先生方(マクロの達人)も、最初のうちはそんなもんですよ。(多分)( ̄ー ̄;A アセアセ・・・ごめんなさい・・m(_ _)m これからも一緒に勉強していきましょう^^v (川野鮎太郎)
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.