Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


10723 / 76734 ←次へ | 前へ→

【71556】Re:空白列の削除
発言  UO3  - 12/3/16(金) 20:50 -

引用なし
パスワード
   ▼はる さん:

こんばんは

コードを拝見しました。

まず、コードの先頭のほうに記述されている、On Error Resume Next。
これは、記述してはいけません。
かなり、エキスパートの方の投稿で、このように記述しておられるのを見かけることがあります。
その人が言うには、「これはお約束です」。実際に、SIベンダーにいるプロのプログラマーにも
(古い人に多いのですが)顧客に納めるプログラムに、このような記述をしている人もいます。
昔々、「何らかの事情」で、こう欠かざるを得なかったようですが、今はそんなことはありません。
明確に、エラーが発生する可能性があることを認識した上で、そこを、あえて回避させる場合にのみ
記述すべきですし、その場合でも、用が終われば、すみやかにリセット(On Error GoTo 0)すべきです。

次に、変数は、コードの最中に記述してもいいのですが、可読性がそこなわれます。
プロシジャの先頭にまとめましょう。また、「すべてを」記述しましょう。
アップされた例では変数BBBの記述がありません。
モジュールの先頭に、Option Explict と記述しましょう。そうすると変数宣言が必須になり、
宣言がないとコンパイラーが教えてくれます。いちいち書くのは面倒でしょうから、VBE画面の
ツール->オプション の編集タブで、変数の宣言を必須にするにチェックしておきますと、自動的に
セットされます。

細かなことですが、 If ActiveCell.Value = Empty Then
数値の0もeMPTYとみなされます。認識した上でお使いなら、それでいいのですが。
空白かどうかということなら、If Len(ActiveCell.value) = 0 Then が安全ですね。

その、ActiveCell ですが、特定セルをSelect したうえで、ActiveCellとして処理するのは
実は、あまり感心しません。なぜかということを話し出すと、長くなりますので割愛しますが。
本件の場合は、処理するセルの場所を変化させていく、そのためにループの最後で
Offsetを使ってSelectしている、その工夫は、多としますが、ActiveCellを使わず、セルを特定する
別の方法がありますので、それを、早めに身につけられたらよろしいかと。
(ところで ActiveCell.Offset(-1, 1).Select これは 最初A2だったアクティブセルを、左下、左下と
 動かしているんですが、その認識ですか?)

Set yyy = bbb.Address
yyy というオブジェクト変数に、格納するのは「オブジェクト」です。
BBB.Address は、BBBというオブジェクト(Range)のアドレスを表す文字列ですので、エラーになります。
yyy に bbb をいれるなら Set yyy = bbb です。

そのyyyですが、  Set r1 = Application.ActiveSheet.Range("yyy") このような記述があります。
まず、Application.は、通常つけませんん。まぁ、それはいいとして
この意味は、名前定義で "yyy" と名付けられたセル(またはセル領域)ということなんですよ。
本当は、オブジェクト変数 yyy を指定したかったのではありませんか?
であれば Set r1 = yyy です。

で、実は、アップされたコードの一番の問題点は「インデントがつけられていない」ということです。
すべてのコードが同じ桁から記述開始されていますね。これは、中で、どんな単位の処理がされているか、
パットみただけでは把握しにくい記述方式です。インデントについては、たとえば私がアップしたコードを
参照願います。

さて、私のコードにもコメントをつけましたが、行を削除したり、列を削除する場合の「鉄則」は
最後から逆に処理していくということです。
(「最終列から左に向かって処理、あるいは最終行から上に向かって)

以上のことを参考にして、そちらのコードをブラッシュアップしてみませんか。

6 hits

【71549】空白列の削除 はる 12/3/16(金) 10:54 質問
【71553】Re:空白列の削除 UO3 12/3/16(金) 19:53 回答
【71587】Re:空白列の削除 はる 12/3/21(水) 9:13 お礼
【71556】Re:空白列の削除 UO3 12/3/16(金) 20:50 発言
【71592】Re:空白列の削除 はる 12/3/21(水) 17:00 質問
【71599】Re:空白列の削除 UO3 12/3/22(木) 11:56 発言
【71600】Re:空白列の削除 はる 12/3/22(木) 13:07 お礼
【71572】Re:空白列の削除 12/3/18(日) 18:37 回答
【71588】Re:空白列の削除 はる 12/3/21(水) 9:21 お礼
【71591】Re:空白列の削除 はる 12/3/21(水) 16:59 質問

10723 / 76734 ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free