2015-12-06 5 views
0

Newbee здесь и на этом сайте, и на Excel VBA. Я использовал код RichA в нижнем столбце и смог сделать его хорошо работающим для моей цели заполнения/копирования данных на листе (Sheet2) с другого листа.Excel vba копировать и вставлять петлю в цикл - предел диапазона

CODE ССЫЛКА НА ОРИГИНАЛ POST Excel VBA Copy and Paste Loop within Loop

У меня есть вопрос о том, как ограничить диапазон к «именованного диапазона» (С13: Z111), а не «весь столбец» («C») в этом код. Кажется, я не могу ограничить копирование строк, начиная с последней строки с данными и подсчета до первой строки.

У меня есть несколько строк (C1: C12) с заголовками вверху, и данные начинаются с строки 13. Поэтому при копировании значений с одного листа на другой лист также копируются верхние строки. Я хотел бы закончить копирование данных в строке 13.

Благодарим за помощь.

Вот что работает в настоящее время, за исключением того, что я не могу ограничить диапазон.

Sub Generate_Invoice() 

Dim i As Long 
Dim ii As Long 
Dim i3 As Long 
Dim LastRow As Long 
Dim wb As Workbook 
Dim sht1 As Worksheet 
Dim sht2 As Worksheet 

Set wb = ThisWorkbook 
Set sht1 = wb.Sheets("INCENTIVE") 
Set sht2 = wb.Sheets("Sheet2") 

Sheets("Sheet2").Select 
Range("B11:Z200").ClearContents 

'Find the last row (in column C) with data. 
LastRow = sht1.Range("C13:C111").Find("*", searchdirection:=xlPrevious).Row 
ii = 2 

'This is the beginning of the loop >>>This Works BUT BUT BUT goes all the way to the top - REQUESTING HELP WITH CODE ENDS AT ROW 13 AND DOES NOT GO PAST<<< 

For i = 3 To LastRow 
    'First activity 
    sht2.Range("B" & ii) = sht1.Range("C" & i).Value 
    sht2.Range("C" & ii) = sht1.Range("G" & i).Value 
    sht2.Range("D" & ii) = sht1.Range("H" & i).Value 
    sht2.Range("E" & ii) = sht1.Range("P" & i).Value 
    sht2.Range("F" & ii) = sht1.Range("R" & i).Value 
    sht2.Range("G" & ii) = sht1.Range("AD" & i).Value 

    ii = ii + 1 

Next i 

'Return to "Sheet2" 
Sheets("Sheet2").Select 

'Add SUM at bottom of last record in Range"D" 
Dim ws As Worksheet 

    For Each ws In Worksheets 
     With ws.Range("F" & Rows.Count).End(xlUp).Offset(2) 
      .FormulaR1C1 = "=SUM(R11C6:R[-1]C6)" 
      .Offset(, -1).Value = "Total:" 
     End With 
    Next ws 

End Sub 
+0

Изменение 'Для я = 3 в LastRow' к' Для я = 13 в LastRow' или изменения 'II = 2' к«б = 13' ... точно не один, который в момент, потому что я я немного смущен. –

ответ

0

Вам просто нужно выйти из цикла for на основе независимо от ваших желаемых критериев является. Например:

If ii = 13 Then Exit For 
+0

Благодарим вас за рекомендацию. Это изменение останавливается в строке 13, и, таким образом, в объеме кода отображается только одна запись, так как мы копируем в этом диапазоне. –

2

Вы искали последнюю строку, но только просматривали населенный пункт. Я бы предложил изменить метод, определяющий последнюю строку, начиная с нижней части листа и найти последнюю заполненную ячейку в столбце C. Это будет похоже на то, что вы находитесь в C1048576 и нажимаете Ctrl + .

'Find the last row (in column C) with data. 
LastRow = sht1.Cells(Rows.Count, "C").End(xlUp).Row 

'not sure whether you want to reverse this as well 
ii = 2 

'This is the beginning of the loop >>>This Works BUT BUT BUT goes all the way to the top - REQUESTING HELP WITH CODE ENDS AT ROW 13 AND DOES NOT GO PAST<<< 

For i = LastRow To 13 Step -1 'work from the bottom to the top. 
    'First activity 
    sht2.Range("B" & ii) = sht1.Range("C" & i).Value 
    sht2.Range("C" & ii) = sht1.Range("G" & i).Value 
    sht2.Range("D" & ii) = sht1.Range("H" & i).Value 
    sht2.Range("E" & ii) = sht1.Range("P" & i).Value 
    sht2.Range("F" & ii) = sht1.Range("R" & i).Value 
    sht2.Range("G" & ii) = sht1.Range("AD" & i).Value 

    'not sure whether you want to reverse this as well 
    ii = ii + 1 

Next i 
+0

Благодарим за быстрый ответ - очень ценим. При реализации этих изменений данные копируются в обратном порядке. На листе2 отображаются строки, начинающиеся с последней записи первой и первой последней записи. Также теперь копируются строки с пробелами в столбце C. Данные все еще записываются в строки 1-13. Я пытаюсь не копировать строки в строках 1-13 и запускать эффективную строку с копированием 13, а не начинать с строки 1, причины, заголовки и инструкции расположены в строке 1-13. –

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