如何在不连续的数据块之后选择一个单元格?

时间:2018-10-31 07:25:18

标签: excel vba excel-vba

我有下表

tablexample

我正在尝试将数据粘贴到D7单元格中,以便当前框的边缘。

我尝试使用

ActiveSheet.Range("C1").End(xlDown).End(xlToRight).Offset(1, 1).Select

4 个答案:

答案 0 :(得分:3)

这是一个Excel表格,因此您可以使用表格“范围”的尺寸进行偏移,并调整为一个单元格的大小。

Option Explicit

Public Sub AddressOfCell()
    With ThisWorkbook.Worksheets("Sheet1").ListObjects("table1").Range
        Debug.Print .Offset(.Rows.Count, .Columns.Count).Resize(1, 1).Address
    End With
End Sub

贷给@Chronocidal更好一些:

Debug.Print .Cells(.Rows.Count + 1, .Columns.Count + 1).Address

答案 1 :(得分:2)

已更新: 无论范围是否是表对象,此方法都将起作用。

Sub FindLastCell()
Dim rng As Range
Set rng = ActiveSheet.Range("C1").CurrentRegion
Debug.Print rng.Offset(rng.Rows.Count, rng.Columns.Count).Resize(1, 1).Address
End Sub

答案 2 :(得分:1)

尝试以下代码行:

ActiveSheet.Cells(Rows.Count, 3).End(xlUp).Offset(1, 1).Select

答案 3 :(得分:1)

使用范围之后

只需在您的代码中使用它:

With ActiveSheet.Cells
  ActiveSheet.Cells(.Find(What:="*", SearchDirection:=xlPrevious, _
      SearchOrder:=xlByRows).Row + 1, _
      .Find(What:="*", SearchDirection:=xlPrevious, _
      SearchOrder:=xlByColumns).Column + 1).Select
End With

说明:

Sub AfterUsedRange()
  Dim LastRow As Long
  Dim LastCol As Integer
  With ActiveSheet.Cells
    'Find the LAST real row
    LastRow = .Find(What:="*", SearchDirection:=xlPrevious, _
        SearchOrder:=xlByRows).Row
    ' Find the LAST real column
    LastCol = .Find(What:="*", SearchDirection:=xlPrevious, _
        SearchOrder:=xlByColumns).Column
  End With
  ActiveSheet.Cells(LastRow + 1, LastCol + 1).Select
End Sub

要在宏中使用它:

Sub AfterUsedRange()
  Cells(.Find(What:="*", SearchDirection:=xlPrevious, _
      SearchOrder:=xlByRows).Row + 1, _
      .Find(What:="*", SearchDirection:=xlPrevious, _
      SearchOrder:=xlByColumns).Column + 1).Select
End Sub

或者您可以重新装修:

Sub AfterUsedRange()
  Cells(.Find(What:="*", SearchDirection:=xlPrevious, _
      SearchOrder:=xlByRows).Row, _
      .Find(What:="*", SearchDirection:=xlPrevious, _
      SearchOrder:=xlByColumns).Column).Offset(1, 1).Select
End Sub

P.S。

要证明有关“ UsedRange”和“ SpecialCells”功能至少不可靠的传言实际上是事实

参考代码行:

ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell).Offset(1, 1).Select

与我重新装修的代码行(答案的第一行)相反

ActiveSheet.Cells(.Find(What:="*", SearchDirection:=xlPrevious, _
    SearchOrder:=xlByRows).Row, _
    .Find(What:="*", SearchDirection:=xlPrevious, _
    SearchOrder:=xlByColumns).Column).Offset(1, 1).Select

让我们致电第一行: SpecialCellsCode
让我们呼叫第二行: MyCode

下表显示了一个简单的自我解释方案。

  A  B  C  D
1 1  1  1
2    2  2
3       3  y
4          x

让我们将第一行和第一列的“交集”称为“ UsedRange”之后的 AfterUsedRangeAddress

现在,在打开工作表时。 MyCode 正确计算出 AfterUsedRangeAddress D4并将其选中(x), SpecialCellsCode 也是如此>。当我们删除列'C'中的值3时, MyCode 正确会计算出 AfterUsedRangeAddress D3,选择它(y), SpecialCellsCode 错误地仍然计算D4并选择一个(x)。

最后,SpecialCellsCode是至少可靠的,即使不是不可用的

想到{@ 3}}这个想法甚至是考虑进行这种测试的想法。