ExcelマクロVBA技術解説 | マクロ作成後に、表位置がずれた場合の対処 | Excelマクロの問題点と解決策、エクセル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



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


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


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


理解できますか?


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



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


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


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





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

値渡し、参照渡しについて(ByVal,ByRef)
実は奥が深いIfステートメント
最終行・最終列の取得方法(End,CurrentRegion,SpecialCells,UsedRange)
ユーザー定義関数の作り方
セルの値について(Value,Value2,Text)
文字列でのセル参照と文字列の計算式について(Evaluate,INDIRECT)
文字列置換の基本と応用(Replace)

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

ファイルの一覧取得・削除(File)|Google Apps Script入門(1月24日)
フォルダの一覧取得・作成・削除(Folder)|Google Apps Script入門(1月24日)
フォルダとファイルを扱う(DriveApp)|Google Apps Script入門(1月24日)
スプレッドシートが非常に遅い、高速化するには|Google Apps Script入門(1月17日)
画像のトリミング(PictureFormat,Crop)|ExcelマクロVBAサンプル集(12月27日)
シート保護|Google Apps Script入門(12月24日)
表示の固定|Google Apps Script入門(12月24日)
グラフ|Google Apps Script入門(12月21日)
入力規則|Google Apps Script入門(12月13日)
並べ替え|Google Apps Script入門(12月12日)

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

1.RangeとCellsの使い方|ExcelマクロVBA入門
2.最終行の取得(End,Rows.Count)|ExcelマクロVBA入門
3.徹底解説(VLOOKUP,MATCH,INDEX,OFFSET)|エクセル関数超技
4.Range以外の指定方法(Cells,Rows,Columns)|ExcelマクロVBA入門
5.セルの参照範囲を可変にする(OFFSET,COUNTA,MATCH)|エクセル関数超技
6.セルのコピー&値の貼り付け(PasteSpecial)|ExcelマクロVBA入門
7.ひらがな⇔カタカナの変換|エクセル基本操作
8.CSVの読み込み方法|ExcelマクロVBAサンプル集
9.変数とデータ型(Dim)|ExcelマクロVBA入門
10.VBAのFindメソッドの使い方には注意が必要です|ExcelマクロVBA技術解説



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

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


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

    ↑ PAGE TOP