2015-06-09 4 views
2

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

Ниже приведена моя модель данных и моя проблема. enter image description here

Я использовал этот код для выбора всего диапазона. Но это не работает должным образом.

Dim rngTemp As Range 
Set rngTemp = Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious) 
With rngTemp 

Пожалуйста, помогите мне, указав код для выбора всего диапазона, как показано на рисунке выше.

+2

Попробуйте [Это] (HTTP : //stackoverflow.com/questions/11169445/error-in-finding-last-used-cell-in-vba). И затем используйте аналогичный метод, чтобы найти последний столбец, а затем построить свой диапазон –

+0

Не могли бы вы использовать Set rngTemp = Cells.usedrange? – 99moorem

+0

@ 99moorem: UsedRange - плохая идея, как описано в ссылке выше –

ответ

2

В коде, который вы ищете по xlByRows. И, следовательно, вы получаете адрес последней ячейки, у которой есть данные, которые являются G7.

В дополнение к моему комментарию, это то, что вы пытаетесь?

Sub Sample() 
    Dim lastrow As Long, lastcol As Long 
    Dim rng As Range 

    With Sheets("Sheet1") '<~~ Change this to the relevant sheet 
     If Application.WorksheetFunction.CountA(.Cells) <> 0 Then 
      lastrow = .Cells.Find(What:="*", _ 
          After:=.Range("A1"), _ 
          Lookat:=xlPart, _ 
          LookIn:=xlFormulas, _ 
          SearchOrder:=xlByRows, _ 
          SearchDirection:=xlPrevious, _ 
          MatchCase:=False).Row 
      lastcol = .Cells.Find(What:="*", _ 
          After:=.Range("A1"), _ 
          Lookat:=xlPart, _ 
          LookIn:=xlFormulas, _ 
          SearchOrder:=xlByColumns, _ 
          SearchDirection:=xlPrevious, _ 
          MatchCase:=False).Column 
     Else 
      lastrow = 1: lastcol = 1 
     End If 

     Set rng = .Range("A1:" & _ 
         Split(.Cells(, lastcol).Address, "$")(1) & _ 
         lastrow) 

     MsgBox rng.Address 
    End With 
End Sub 
1

ПОЖАЛУЙСТА, ЗНАЙТЕ, ЧТО МЕТОД НИЖЕ НЕ НАДЕЖНО В НЕКОТОРЫХ СЛУЧАЕ. Я ОСТАВЛЯЮ ЭТО ОТВЕТ, КАК ПЛОХОЙ ПРИМЕР. Подробную информацию Вы можете см.объяснение @SiddharthRout «S В ЭТОМ LINK

Я хотел бы использовать следующий код, чтобы найти используемый диапазон вместо того, чтобы искать„*“в значении ячейки:

Sub SelectRange() 
    Dim LastRow As Long 
    Dim LastColumn As Long 
    Dim aWB As Workbook 
    Dim aWS As Worksheet 

    Set aWB = ActiveWorkbook 
    Set aWS = aWB.ActiveSheet '<-You can change sheet name like aWB.sheets("SheetName") 

    With aWS.UsedRange 
     LastRow = .Rows(.Rows.Count).Row 
     LastColumn = .Columns(.Columns.Count).Column 
    End With 

    aWS.Range(Cells(1, 1), Cells(LastRow, LastColumn)).Select '<---Cells(1, 1) is the starting cell of range) 

End Sub 
+0

Как я уже упоминал об этом в @ 99moorem, «UsedRange» - плохая идея. Возможно, вы захотите увидеть ссылку, которую я разместил ниже вопроса: D –

+0

Да, я только что заметил. Спасибо за головы. На данный момент я перестану использовать этот метод. Большое спасибо. – Dubison

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