Вы уверены, что диапазоны, с которыми вы работали, были идентичны?Вы не должны получать другие результаты, используя свойство End в Excel 2007 по сравнению с 2003.
Просмотр вашего кода:
.Range("A1").Select
.Cells(.Rows.Count, "A").End(xlUp).Select
.Cells(.Rows.Count, "A").End(xlUp).Select
Каждая из этих строк кода оказывает абсолютно нулевое влияние друг на друга,Невозможно дать честное объяснение тому, почему свойство End дает вам разные результаты в зависимости от предоставленного вами кода.Из того, что написано, вы должны получать одинаковые результаты каждый раз.(Предполагается, что вы работаете с одинаковыми диапазонами.) Я бы с подозрением относился к любому другому исполняемому коду.Я могу предложить несколько общих советов: если вы используете End, начинающийся с пустой ячейки, он остановится на первой непустой ячейке.Если вы начнете с непустой ячейки, верно обратное.Глядя на скриншот ниже:
Range("B13").End(xlUp).Select 'selects B12
Range("B12").End(xlUp).Select 'selects B2
Range("A12").End(xlUp).Select 'selects A6

Поэтому вопрос о том, является ли ваш список непрерывным, является вопросом.Кроме того, нет необходимости выбирать диапазон, прежде чем что-то с ним делать.Указание Excel выбрать ячейку A1 не влияет на ее выполнение .Cells(.Rows.Count, "A").End(xlUp).Select
.Предполагая, что эта строка находится внутри блока With, который ссылается на лист, эта строка кода аналогична переходу к ячейке A65536 (или A1048576 в Excel 2007) и нажатию Ctrl + Up.Предполагая, что ячейка пуста, Excel будет перемещаться вверх, пока не найдет первую непустую ячейку в столбце A. Если ваш блок With ссылается на объект диапазона, то эта строка кода перейдет к первому столбцу, нижней строке этого диапазонаи перемещайтесь вверх, пока не дойдете до первой пустой или непустой ячейки.