Vba最終行取得がズレる理由とは?プロ直伝の鉄板コード徹底解明
Vba最終行取得がズレる理由とは?プロ直伝の鉄板コード徹底解明の真相について、専門知識を詳しくお届けします。
実務で頻発する最も厄介な事態が「VBA最終行取得非表示行の扱い」です。ユーザーが作業用のフィルタをかけたままマクロを実行した場合、End(xlUp)は非表示状態のセルを通過し、その直上にある「可視セル」を取得してしまう挙動を示します。
例えば、100行目までデータが存在するリストにおいて、フィルタによって90〜100行目が非表示になっているケースを想定してください。この状態でA1048576からEnd(xlUp)を実行すると、VBAは89行目を最終行として認識します。その結果、マクロが「90行目(新規行)」と誤認して書き込み処理を行うと、既存の非表示データが上書きされ、永久に消滅する事故に発展します。フィルタが想定されるシートでは、処理の冒頭でws.AutoFilterMode = Falseを実行してフィルタを解除するか、前述のFindメソッドを用いて非表示セルを含めた走査を実行することが、リスクマネジメント上の鉄則となります。