Excelマクロ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 ・・・新着記事一覧を見る

VBAコードの全プロシージャー・プロパィ一覧を取得|VBAサンプル集(10月12日)
VBAでエラー行番号を取得できるErl関数|VBA技術解説(10月12日)
手動計算時の注意点と再計算方法|ExcelマクロVBA技術解説(10月9日)
引数の数を可変にできるパラメーター配列(ParamArray)|VBA入門(10月7日)
VBEの使い方:デバッグ|ExcelマクロVBA入門(10月6日)
VBAにおける配列やコレクションの起点について|VBA技術解説(10月5日)
VBEの使い方:オブジェクト ブラウザー|VBA入門(10月5日)
VBEの使い方:ウォッチ ウィンドウ|VBA入門(10月4日)
VBEの使い方:ローカル ウィンドウ|VBA入門(10月3日)
VBEの使い方:イミディエイト ウィンドウ|VBA入門(10月2日)


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

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



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

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


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




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