2012-01-13 3 views
0

У меня только что появилось следующее: я могу как-то изменить следующий фрагмент, чтобы включить .End(xlToRight) вместо определения L6 (результат тот же)..End (xlToRight) в пределах диапазона

Sub Test() 
Dim LastCol As String 

With Worksheets("Sheet1") 
    LastCol = .Cells(5, .Columns.Count).End(xlToLeft).Address 
    .Range(Range("A5"), LastCol).Copy  

    .Range("B5:L5", Range("B5:L5").Offset(LastRow - FirstRow, 0)).PasteSpecial xlPasteFormulas 

    .Range("B6", .Cells.SpecialCells(xlCellTypeLastCell)).Copy 
    .Range("B6").PasteSpecial xlPasteValues 
End With 
End Sub 

Большое спасибо за любую помощь :)

EDIT: обновленный PDW TonyDallimore (см ответ ниже)

Тони, приведенный выше код является суммой того, что я имею пытался работать. В инструкции with я хочу скопировать содержимое строки 5 и вставить их в n-ю строку, которая определяется списком, уже присутствующим в столбце A. Последняя строка в вашем совете будет затем вставлять значения всех, кроме верхней строки (r5), чтобы сохранить прозрачность для пользователя, при этом минимизируя размер файла. Средний бит - это оставшаяся «работа», так как L5 не обязательно является столбцом farmost.

ответ

4

Оба вопроса

.End(xxx) такое же, как Ctrl+Arrow с клавиатуры и останавливается на первой ячейке, которая отличается от текущей ячейки. Поэтому, если вы начинаете с ячейки со значением, она останавливается в ячейке без значения или наоборот.

Проблема с стартом влево и с использованием xlDown и xlToRight заключается в том, что он остановится в пустой ячейке посередине вашего стола. Хорошо, если вы абсолютно не можете иметь пустую ячейку посередине, но XlUp или xlToLeft снизу справа безопаснее.

Вопрос 1

Является ли ваша проблемой, что .End(xxx).Column возвратит 12, и вы не знаете, как включить его в букву «L»?

Есть так, есть много вариантов. Я думаю, что проще всего помнить, что

.Cells(6,Columns.Count).End(xlToLeft).Address

вернется "$ L $ 6".

Вопрос 2

Представляет ли .Cells(1000, ColRange) нижнюю правую ячейку?

.Cells.SpecialCells(xlCellTypeLastCell) может быть проще.

+0

Спасибо Тони. Вопрос (1) относится ко мне просто не зная, как включить xlToRight в фрагмент кода (очень простой, я знаю, но я просто не могу понять это и тратить слишком много времени на попытки!). Ваше предложение ко второму вопросу - это как всегда :) – heavyarms

+0

Чтобы привести пример, здесь была моя первая попытка: Range («B6», Range («B6»). End (xlToRight), Range («B6», Диапазон («B6»). Конец (xlToRight)). Смещение (LastRow - FirstRow, 0)). Копия – heavyarms

+0

В Excel предлагается полдюжины различных способов достижения одной и той же задачи. Мы все используем способы, которые кажутся нам самыми легкими, и вы используете синтаксис, который я почти никогда не использую. Мне кажется, что вы пытаетесь вставить диапазон B6 в нижнее правое над собой, чтобы заменить формулы со значениями. Если да, я бы пошел на что-то вроде: 'With Sheets (" xxx ")' '.Range («B6», .Cells.SpecialCells (xlCellTypeLastCell)). Копировать' .Range («B6»). PasteSpecial xlPasteValues''Свернуть с помощью –

Смежные вопросы