2016-06-29 5 views
0

У меня есть таблица, которая имеет несколько разделов со случайным числом строк для каждого из них.Как найти последнюю строку в динамическом размере строк в VBA?

Как вы можете найти последнюю строку для одного из разделов?

Пример:

------------------------------------------------------- 
ROW 1 
------------------------------------------------------- 
ROW 2 
------------------------------------------------------- 
ROW 3 
------------------------------------------------------- 
ROW 4 
------------------------------------------------------- 
LAST ROW <-- Select last row 

Однако это может отличаться для каждой секции, в которой количество строк отличается:

------------------------------------------------------- 
ROW 1 
------------------------------------------------------- 
ROW 2 
------------------------------------------------------- 
LAST ROW <-- Select last row 

Это код я уже:

Sub AddNewAllocToSpendLine(sectionHeading As String, Optional sSheetName As String = c_Alloc2SpendSheetName) 

    Worksheets(sSheetName).Activate 

    'get the section heading position 
    Set c = Worksheets(sSheetName).Range("A:A").Find(sectionHeading, LookIn:=xlValues, LookAt:=xlWhole) 

    Debug.Print c 

    Dim addrow As String 
    Dim lRow As Long 

    addrow = c.Row + 1 

    If addrow <> "" And IsNumeric(addrow) = True Then 

     Rows(addrow).Insert shift:=xlDown 

    Else 
     MsgBox ("enter only row number") 
    End If 

End Sub 
+1

Что именно вы подразумеваете под разделкой? – newguy

+1

'lastRow = рабочие листы (« Sheet1 »). Ячейки (листы (« Лист1 »). Rows.count, 1) .end (xlup) .row' –

+0

@newguy разделы строк, которые отличаются друг от друга разными заголовками, например. Образование, Путешествия и т. Д. – user3565164

ответ

0

Если это таблицы, вы можете сделать это:

Dim r as Long 
With ActiveSheet.ListObjects("Table1") 
    r = .ListRows(.ListRows.Count).Range.Row 
End With 

Но если вы просто хотите добавить еще одну строку в конце:

ActiveSheet.ListObjects("Table1").ListRows.Add 

Или добавить до определенной строки:

ActiveSheet.ListObjects("Table1").ListRows(3).Add 
'You can change the '3' to a variable, of course 
+0

Блестящий Я пробую это - таблицы имеют смысл. Благодаря! – user3565164

+0

@ user3565164 Нет проблем! Если бы это сработало для вас, вы бы рассматривали это как приемлемый ответ? – Brian

0

Попробуйте

Function FindSectionLastRow(rng As Range, header As String) 
    Dim f As Found 

    Set f = rng.Find(what:=header, LookIn:=xlValues, LookAt:=xlWhole, MatchCase:=False) 
    If Not f Is Nothing Then FindSectionLastRow = f.End(xlDown).Row 
End Function 

Вы могли бы используйте в своем основном Sub следующим образом:

Sub AddNewAllocToSpendLine(sectionHeading As String, Optional sSheetName As String = c_Alloc2SpendSheetName) 

    Dim sectionLastRow As Long 

    ' your code 

    SectionLastRow = FindSectionLastRow(Worksheets(sSheetName).Columns(1), sectionHeading) 


    ' more code to use 'SectionLastRow' 

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