[[20040908212835]] 『特定の行以降でマクロが機能するようにしたい』(すがやっち) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『特定の行以降でマクロが機能するようにしたい』(すがやっち)

早速質問させていただきます。

まずは以下のマクロをご覧ください。

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行目(全体)には、上記のマクロを実行しても影響がないようしたいと思っていますが、どのような記述をプラスすればよいでしょうか?

よろしくお願いします。


すいません、追加で質問です。影響の出ないようにする範囲を分ける事は出来ますでしょうか?具体的には、2行目から5行目と、10行目から12行目の範囲は、マクロの影響がないようにする・・・といった感じです。


 >With Cells
 の範囲を、処理したい範囲ごとに分けて指定すればよいのでは?

  (INA)


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
 (川野鮎太郎)


ありがとうございました。最初の式と全然変わってしまうのですね・・・。マクロってなかなか難しいです。でも、勉強のしがいがありますね。


川野さん、もし出来ればで構わないんですが、
マクロが、シートの11行目以降で機能するという条件を、一番最初の記述に、あまり当初の記述の内容を変えることなく加えていただきたいのですが、難しいでしょうか?川野さんに教えていただいた記述の内容では、私には少々わかりかねました(どのあたりが当初の記述と異なるのかが、私には難しかったです)。解説も少々いただきたいです。

ちょっと違ってしまうと、途端にわからなくなってしまうのは、初心者だという証拠ですかね・・・汗。まだまだこれからですね。


 解説・・・ (◎_◎;) ドキッ!!
 逆にすがやっちさんの、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.