VBA技術解説
マクロ作成後に、表位置がずれた場合の対処

ExcelマクロVBAの問題点と解決策、エクセルVBAの技術的解説
最終更新日:2013-02-18

マクロ作成後に、表位置がずれた場合の対処


マクロの最も不便なところは、セル参照が自動で変更されない事ですね。


どういう事かと言うと、


ワークシート関数なら、セル位置をずらしても、計算式が自動で変更されます。


しかし、マクロの記述は、自動で変更されません。


まあ、その可能性がある事が、最初から解っていれば、そのように記述することも可能ですけど。


要所位置を、名前定義しておくことで、レイアウトをずらしても、自動で対応できるようになります。


しかし、そのような対処をすることなく作成したマクロで、


完成後に、1行目は余白行にしたいとか、A列は空いていた方が見やすいとか・・・


そうなると、マクロの修正が大変なことがあります。


Cells(i, j)


これ全部修正しますか?


まあ、列数は、ConstやEnumにしてあったとしても、その部分の修正は必要です。


と言う事で、単純に、表全体がずれた場合の、ちょっとずるい対処方法です。



A1から作成されている表に対する処理として、



With Worksheets("Sheet1")

  LastRow = .Cells(Rows.Count, 1).End(xlUp).Row
  For i = 2 To LastRow

    .Cells(i, 2) = ""
    ・・・いろいろな処理・・・
  Next i
End With


まあ、こんなコードがあったとして、


1行目を空けたい、ついでに、A列も空けたい。


そんな場合は、どうしますか?


普通なら、

With Worksheets("Sheet1")
  LastRow = .Cells(Rows.Count, 2).End(xlUp).Row
  For i = 3 To LastRow

    .Cells(i, 3) = ""
    ・・・いろいろな処理・・・
  Next i
End With


上の赤太字が、修正対象部分になりますね。


たったこれだけのコードでも、3箇所も修正する必要があります。


もちろん、「・・・いろいろな処理・・・」この中が大量に修正が必要になります。


そこで、以下のような修正方法をとります。



With Worksheets("Sheet1").Cells(2, 2)

  LastRow = .Cells(Rows.Count - 1, 1).End(xlUp).Row
  For i = 2 To LastRow - 1

    .Cells(i, 2) = ""
    ・・・いろいろな処理・・・
  Next i
End With



この方法なら、「・・・いろいろな処理・・・」


の部分は、一切手を付けなくて済みます、当然コード内容によりますよ。


かなり無理やりではありますが、なぜ、こんな修正方法で良いのか・・・


理解できますか?


まあ、あまり良い方法とは言えませんが、修正ミスによる誤動作よりは良いですね。



もちろん、最初から、表位置が変更になる事を考慮して、


コーディングしておけば問題ないのですが、なかなか毎回そのようにはいかないです。


いざと言う時の、裏ワザとして、覚えておくとよいでしょう。




同じテーマ「VBA技術解説」の記事

マクロ作成後に、表位置がずれた場合の対処
ExecuteExcel4Macroについて
再帰呼出しについて(再帰プロシージャー)
文字列でのセル参照と文字列の計算式について(Evaluate,INDIRECT)
リボンを非表示、2003以前ならメニューを非表示
印刷ページ設定の余白をセンチで指定する(CentimetersToPoints)
文字列としてのプロシージャー名を起動する方法(Run,OnTime)
ドキュメントの作成者を取得(GetObject,BuiltinDocumentProperties)
画像サイズ(横x縦)の取得について
文字種(ひらがな、全半角カタカナ、半角英大文字等々)の判定
オブジェクトとプロパティの真実


新着記事NEW ・・・新着記事一覧を見る

SQL関数と演算子|SQL入門(12月1日)
データの取得:集約集計、並べ替え(DISTINKT,GROUP BY,ORDER BY)|SQL入門(11月30日)
データの取得:条件指定(SELECT,WHERE)|SQL入門(11月29日)
データの挿入:バルクインサート|SQL入門(11月28日)
データの挿入(INSERT)と全削除|SQL入門(11月26日)
テーブル名変更と列追加(ALTER TABLE)とテーブル自動作成|SQL入門(11月25日)
テーブルの作成/削除(CREATE TABLE,DROP TABLE)|SQL入門(11月24日)
データベースに接続/切断|SQL入門(11月23日)
SQLiteのインストール|SQL入門(11月22日)
SQL入門:VBAでデータベースを使う|エクセルの神髄(11月22日)


アクセスランキング ・・・ ランキング一覧を見る

1.最終行の取得(End,Rows.Count)|VBA入門
2.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
3.RangeとCellsの使い方|VBA入門
4.Range以外の指定方法(Cells,Rows,Columns)|VBA入門
5.変数宣言のDimとデータ型|VBA入門
6.繰り返し処理(For Next)|VBA入門
7.マクロって何?VBAって何?|VBA入門
8.セルに文字を入れるとは(Range,Value)|VBA入門
9.空白セルを正しく判定する方法(IsEmpty,IsError,HasFormula)|VBA技術解説
10.ひらがな⇔カタカナの変換|エクセル基本操作



  • >
  • >
  • >
  • マクロ作成後に、表位置がずれた場合の対処

  • このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。


    記述には細心の注意をしたつもりですが、
    間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
    掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。
    掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。



    このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。
    本文下部へ