2016-05-05 5 views
0

Мой максимальный диапазон данных: C34:S64, столбцы со значениями расположены слева направо. Количество столбцов и строк будет меняться (но количество строк будет одинаковым для всех столбцов).Граница вокруг динамического диапазона

Я использую xlDown и xlToRight найти первую пустую ячейку следующим образом:

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

Я изо всех сил с проставлением, что информация в границы
Как я могу ограничить Lastrow и Lastcol до C64 и S34?

Моя таблица surronded с другими данными, которые, как это выглядит sheet http://oi66.tinypic.com/2rn7jnt.jpg

+1

Это потому, что 'lastRow' и' lastcol' дают вам строки больше 34 и 64? Если вы хотите ограничить их, почему бы просто не использовать это как lastrow/lastcol? Кроме того, попробуйте использовать это 'lastCol = Cells (1, Columns.Count) .End (xlToLeft) .Column' (при условии, что у вас есть заголовки) и' lastRow = cells (rows.count, 3) .End (xlup) .Row 'Предположим, что в вашей колонке C больше всего данных. – BruceWayne

+0

Чтобы лучше объяснить, как выглядят мои данные. Кругом в желтом - это то, что я хочу разместить вокруг границы. [link] (http://oi67.tinypic.com/29esq49.jpg) – Pythonist

+2

Используйте предложенный вами метод BruceWayne и после этого проверьте, что 'Lastrow' не меньше 3 и' Lastcol' не меньше 19 (столбец S). Если они есть, настройте их на соответствующий минимум. – Leviathan

ответ

1

Чтобы определить диапазон, который вы хотите выделить, давайте создадим пару вспомогательных функций

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 

И тогда в вашем коде

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

Чтобы найти последний использованный номер, попробуйте это.

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 

Кроме того, чтобы найти последний использованный столбец, проверьте это.

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 
Смежные вопросы