5倍速!メールマガジン
外部アカウントで登録
受講生の声
新着の講座投稿
新着の講座コメント
新着のノート投稿
投稿一覧へ新着のノートコメント
表示できる投稿はありません。
サイト運営者紹介
小川 慶一講師/教材/システム開発者紹介
この学習サイトの教材制作、サポート、システム開発をすべてやっています。
表示できる投稿はありません。
この学習サイトの教材制作、サポート、システム開発をすべてやっています。
受講生さんの投稿
(投稿ID: 3629)
対象となるブックファイルにはたくさんのシートがある。今後必要なのは
最初の4シートだけなので、それ以外のシートをすべて削除したい。
ブック内のシート数を求める.countプロパティを利用し、
Worksheets(Worksheets.Count) .delete
とすれば、、一番右側のシートが削除されます。
これを繰り返し行っていき、
Worksheets(Worksheets.Count) = 4 となったら、
シート削除をやめる。
カウント変数がなくても、worksheets.count は、
シート削除を実行するたびに一つずつ減っていきますから、
これをloop構文に使えないだろうかと思ったのですが
自分で書こうとすると、うまくいきませんでした;
gooska
小川 慶一さんのコメント
(コメントID: 5136)
発展編1の講座本編で言うと、以下ですね。
発展1講座第4章 - For Each構文 伝票作成マクロ解説
https://forum.pc5bai.com/lesson/page/214
For Next構文で削除すべきシートを見つけて削除していく場合は、後ろにあるものから削除対象かどうかを調べていくのがセオリーです。
シートを1枚削除するごとに、削除したシート以降のシートのインデックス番号が変わるからです。
ハマったとしたら、そこでしょうか。
基礎編演習でも、「所定の条件に一致しない行を削除する」というものがありました。
これも、後ろの行から処理していきます。
理由はシート削除のときと同じ。削除した行以降の行の行番号が変わるからです。
なお、この手のハマりをする人にありがちなNG例をついでに示しておくと、「前から調べていって、削除処理をしたあとはカウンター変数の値をループ内で自分で変更する」みたいなマクロを書く人がいますが、これは典型的なダメ例です。
For Next構文のカウンター変数は、ループ内で自分で値を変更したりしないのが大原則です。それをするならDoLoopで。
いずれにしても、通勤時間を使ってでも何としてでも、動画はひととおり見られてしまうことをお勧めします。