2016-05-05 9 views
0

Mein maximaler Datenbereich ist C34:S64, Spalten mit Werten werden von links nach rechts platziert. Die Anzahl der Spalten und Zeilen variiert (die Anzahl der Zeilen ist jedoch für alle Spalten gleich).Grenze um den dynamischen Bereich

Ich verwende xlDown und xlToRight erste leere Zelle zu finden wie folgt:

Lastrow = Range("C34").End(xlDown).Offset(1, 0)
Lastcol = Range("C34").End(xlToRight).Offset(0, 1)

Ich kämpfe mit Putting, dass Informationen in Grenz
Wie kann ich begrenzen Lastrow und Lastcol zu C64 und S34?

Mein Tisch ist mit anderen Daten surronded, das ist, wie es sein sieht sheet http://oi66.tinypic.com/2rn7jnt.jpg

+1

Ist es, weil 'lastRow' und' lastcol' Zeilen größer als 34 und 64 geben? Wenn Sie sie begrenzen wollen, warum benutzen Sie das nicht einfach als Lastrow/Lastcol? Probieren Sie stattdessen auch 'lastCol = Cells (1, Columns.Count) .End (xlToLeft) .Column' (vorausgesetzt, Sie haben Header) und' lastRow = cells (rows.count, 3) .End (xlup) .Row 'Angenommen, Ihre Spalte C enthält die meisten Daten. – BruceWayne

+0

Um mich besser zu erklären, hier ist, wie meine Daten aussehen. Eingekreist in Gelb ist das, was ich gerne umranden möchte. [link] (http://oi67.tinypic.com/29esq49.jpg) – Pythonist

+2

Verwenden Sie BruceWayne's vorgeschlagene Methode und überprüfen Sie danach, dass 'Lastrow' nicht kleiner als 3 und' Lastcol' nicht kleiner als 19 (Spalte S) ist. Wenn dies der Fall ist, passen Sie sie an ihr jeweiliges Minimum an. – Leviathan

Antwort

1

den Bereich Sie uns ein paar Hilfsfunktionen

Function MyMax(p_x As Integer, p_y As Integer) As Integer 
    If p_x >= p_y Then MyMax = p_x Else MyMax = p_y 
End Function 

Function GetRange(p_StartRange As Range, p_MaxRow As Integer, p_MaxCol As Integer) As Range 
    Dim lRow as Integer 
    lRow = MyMax(p_StartRange.End(xlDown).Row, p_MaxRow) 

    Dim lCol as Integer 
    lCol = MyMax(p_StartRange.End(xlToRight).Column, p_MaxCol) 
    Set GetRange = Range(Cells(p_StartRange.Row, p_StartRange.Column), Cells(lRow, lCol)) 
End Function 

markieren möchten Um zu bestimmen, lassen Sie erstellen und dann in Ihrem Code

Dim rngData As Range: Set rngData = GetRange(Range("C34"), 64, 19) 
0

Um die letzte verwendete Zeile zu finden, versuchen Sie es.

Sub FindingLastRow() 

'PURPOSE: Different ways to find the last row number of a range 
'SOURCE: www.TheSpreadsheetGuru.com 

Dim sht As Worksheet 
Dim LastRow As Long 

Set sht = ThisWorkbook.Worksheets("Sheet1") 

'Ctrl + Shift + End 
    LastRow = sht.Cells(sht.Rows.Count, "A").End(xlUp).Row 

'Using UsedRange 
    sht.UsedRange 'Refresh UsedRange 
    LastRow = sht.UsedRange.Rows(sht.UsedRange.Rows.Count).Row 

'Using Table Range 
    LastRow = sht.ListObjects("Table1").Range.Rows.Count 

'Using Named Range 
    LastRow = sht.Range("MyNamedRange").Rows.Count 

'Ctrl + Shift + Down (Range should be first cell in data set) 
    LastRow = sht.Range("A1").CurrentRegion.Rows.Count 

End Sub 

, auch die zuletzt verwendete Spalte zu finden, check this out.

Sub FindingLastColumn() 

'PURPOSE: Different ways to find the last column number of a range 
'SOURCE: www.TheSpreadsheetGuru.com 

Dim sht As Worksheet 
Dim LastColumn As Long 

Set sht = ThisWorkbook.Worksheets("Sheet1") 

'Ctrl + Shift + End 
    LastColumn = sht.Cells(7, sht.Columns.Count).End(xlToLeft).Column 

'Using UsedRange 
    sht.UsedRange 'Refresh UsedRange 
    LastColumn = sht.UsedRange.Columns(sht.UsedRange.Columns.Count).Column 

'Using Table Range 
    LastColumn = sht.ListObjects("Table1").Range.Columns.Count 

'Using Named Range 
    LastColumn = sht.Range("MyNamedRange").Columns.Count 

'Ctrl + Shift + Right (Range should be first cell in data set) 
    LastColumn = sht.Range("A1").CurrentRegion.Columns.Count 

End Sub