Заполнение серийных номеров на другом листе

У меня есть макрос для копирования всех используемых строк с одного листа Excel (ExcelA) на другой (ExcelB):

Sub CopyFromOneXL()
Dim myBook As Workbook, newBook As Workbook

Set myBook = ThisWorkbook
Set lRowMyBook = Range("A1").SpecialCells(xlCellTypeLastCell)
Set newBook = Workbooks.Open("C:\Users\user\Desktop\EXCEL\ExcelB.xlsx")

newBook.Activate

Set lRowNewBook = Sheets("Sheet1").Range("A1").SpecialCells(xlCellTypeLastCell)
lastRowNewBook = lRowNewBook.Row
lastRowMyBook = lRowMyBook.Row
lastRowNewBook = lastRowNewBook + 1

    With newBook
    myBook.Sheets("Sheet1").Rows("1:" & lastRowMyBook).Copy .Sheets("Sheet1").Rows(lastRowNewBook)
    .Close savechanges:=True
    End With
End Sub

ExcelB уже использует десять строк (порядковые номера от 1 до 10), и я использую приведенный выше макрос, чтобы добавить еще три строки данных (которые находятся в ExcelA). Есть ли способ добавить серийные номера в ExcelB для трех новых добавленных строк, начиная с 11?

Количество строк на обоих листах может различаться, но в конечном итоге я хочу добавить серийные номера в ExcelB, начиная с того места, где он остановился.


person Pheww    schedule 10.09.2013    source источник
comment
Спасибо, @pnuts.=Row() работает, когда я даю его внутри цикла For. Мне было интересно, есть ли другой способ без использования цикла For, потому что это занимает слишком много времени, если есть 1000 строк. Просто любопытно.   -  person Pheww    schedule 11.09.2013
comment
@pnuts: Большое спасибо. Я никогда не думал что-то подобное. Я попробовал это сейчас, и это прекрасно работает. Я могу поставить =ROW() в исходный файл. Я думал, что он скопирует только значение, а не формулу.   -  person Pheww    schedule 11.09.2013


Ответы (2)


OP хотел индексировать добавочные записи, где для удобства номера индексов соответствовали номерам строк для записей, скопированных с кодом из другого рабочего листа. Вместо того, чтобы добавлять такой индекс с циклом в код для копирования приращений, было практично добавить для него формулу (=ROW()) в исходный лист, которая затем автоматически копировалась бы с существующим кодом.

person pnuts    schedule 11.09.2013

Когда я добавил приведенный ниже код, он сработал.

With newBook
myBook.Sheets("Sheet1").Rows("1:" & lastRowMyBook).Copy .Sheets("Sheet1").Rows(lastRowNewBook)
    Set newLRowNewBook = Sheets("Sheet1").Range("A1").SpecialCells(xlCellTypeLastCell)
newLastRowNB = newLRowNewBook.Row
'MsgBox newLastRowNB
For i = lastRowNewBook To newLastRowNB
    Cells(i, 1).Formula = "=Row()"
Next
.Close savechanges:=True
End With

Хотя макросу требуется некоторое время для запуска, если есть 1000 строк. Просто интересно, есть ли другой способ добиться этого без использования цикла For.

Спасибо.

person Pheww    schedule 11.09.2013