Excel VBA 范围对象

⚡ 智能摘要

Excel VBA Range 对象代表工作表上的一个单元格或一组单元格。本页将介绍对象层次结构、Range 和 Cells 属性、选择和引用单元格、读取和写入值以及 Offset 属性。

  • 🎯 定义: Range 对象指向单个单元格、行、列、选区或三维区域。
  • 🧬 层次: 一份完整的参考文献应依次阅读应用程序、工作簿、工作表,最后阅读范围。
  • 🏷️ 性质和方法: 属性存储有关对象的信息,方法执行诸如选择或合并之类的操作。
  • 🔢 单元格属性: Cells(Row, Column) 通过编号访问单元格,这适合编程循环。
  • ✍️ 读写: Value 属性既可以检索单元格的内容,也可以写回新内容。
  • ↔️ 偏移属性: 偏移量会将引用从其起始单元格移动指定的行数和列数。

Excel VBA 范围对象

VBA Range 是什么?

VBA 范围对象代表 Excel 工作表中的一个或多个单元格。它是 Excel VBA 中最重要的对象。通过使用 Excel VBA 范围对象,您可以参考,

  • 单个细胞
  • 一行或一列单元格
  • 选择细胞
  • 3D 范围

正如我们在之前的教程中讨论的那样,VBA 用于录制和运行…… 但是,VBA 如何确定工作表中需要处理哪些数据呢?这时 VBA Range 对象就派上用场了。

VBA 中引用对象的简介

引用 Excel 的 VBA 范围对象和对象限定符。

  • 对象限定符:用于引用对象。它指定您引用的工作簿或工作表。

要操纵这些单元格值, 物业方法 被使用。

  • 属性: 属性存储有关对象的信息。
  • 方法: 方法是对象将要执行的操作。Range 对象可以执行诸如选择、复制、清除、排序等操作。

VBA 遵循对象层次结构模式来引用 Excel 中的对象。您必须遵循以下结构。请记住,这里的点号 (.dot) 用于连接不同层级的对象。

应用程序.工作簿.工作表.范围

可以通过两种不同的属性访问该层次结构,其中 Range 属性是最常用的属性。

如何使用 Range 属性引用 Excel VBA Range 对象

Range 属性可应用于两种不同类型的对象。

  • 工作表对象
  • 范围对象

Range 属性的语法

  1. 关键字“范围”。
  2. 关键字后的括号
  3. 相关小区范围
  4. 引述 (” ”)
Application.Workbooks("Book1.xlsm").Worksheets("Sheet1").Range("A1")

当您引用 Range 对象时,如上所示,它被称为 完全合格的参考您已经明确告诉 Excel 您想要哪个区域、哪个工作表以及在哪个工作表中。

例如:消息Box 工作表(“Sheet1”).区域(“A1”).值

使用 Range 属性,您可以执行许多任务,例如,

  • 使用范围属性引用单个单元格
  • 使用 Worksheet.Range 属性引用单个单元格
  • 引用整行或整列
  • 使用 Worksheet.Range 属性引用合并单元格等

因此,如果要涵盖范围属性的所有场景,篇幅将太长。对于上述场景,我们将仅针对其中一种场景演示一个示例。请参阅使用范围属性的单个单元格。

使用 Worksheet.Range 属性引用单个单元格

要引用某个单元格,请将其地址作为文本字符串传递给 Range 属性。

语法很简单 “范围(“单元格”)”。

在这里,我们将使用“Select”命令从工作表中选择单个单元格。

步骤1) 在此步骤中,打开 Excel。

使用 Worksheet.Range 属性的单个单元格

步骤2) 在此步骤中,

  • 点击 使用 Worksheet.Range 属性的单个单元格 按钮。
  • 它将打开一个窗口。
  • 在此处输入您的程序名称,然后单击“确定”按钮。
  • 它将带您进入主 Excel 文件,从顶部菜单中单击“停止”记录按钮以停止记录宏。

使用 Worksheet.Range 属性的单个单元格

步骤3) 下一步,

  • 单击宏按钮 使用 Worksheet.Range 属性的单个单元格 从顶部菜单中。它将打开下面的窗口。
  • 在此窗口中,单击“编辑”按钮。

使用 Worksheet.Range 属性的单个单元格

步骤4) 上述步骤将打开名为“Single Cell Range”的文件的VBA代码编辑器。输入如下所示的代码,以从Excel工作表中选择单元格区域“A1”。

Sub SingleCellRange()
    Range("A1").Select
End Sub

使用 Worksheet.Range 属性的单个单元格

步骤5) 现在保存文件 使用 Worksheet.Range 属性的单个单元格 并运行程序,如下所示。

使用 Worksheet.Range 属性的单个单元格

步骤6) 执行程序后,您将看到单元格“A1”被选中。

使用 Worksheet.Range 属性的单个单元格

同样,您可以选择具有特定名称的单元格。例如,如果您想搜索名称为“Guru99- VBA 教程”。您需要运行如下所示的命令。它将选中具有该名称的单元格。

范围(”Guru99- VBA 教程”。选择

要应用其他范围对象,这里是代码示例。

Excel 中选择单元格的范围 声明范围
单排 范围(“1:1”)
对于单列 范围(“A:A”)
对于连续单元格 范围(“A1:C5”)
对于非连续单元格 范围(“A1:C5,F1:F5”)
对于两个范围的交集 范围(“A1:C5 F1:F5”)
(对于交叉单元格,请记住没有逗号运算符)
合并单元格 范围(“A1:C5”)
(要合并单元格,请使用“合并”命令)

选择单元格只是第一步。实际上,宏会读取单元格中的内容,并将新值写回单元格。

如何使用 Range 对象读取和写入值

几乎所有操作工作表的宏都会执行以下两项操作之一:从单元格读取值或向单元格写入值。这两种操作都通过 Value 属性进行,而且都不需要事先选中单元格。

Sub ReadAndWrite()
    Dim Price As Double
    Dim Qty As Long

    ' Read two values out of the sheet
    Price = Range("B1").Value
    Qty = Range("B2").Value

    ' Write the calculated result back
    Range("B3").Value = Price * Qty

    ' Fill a whole block in one statement
    Range("D1:D10").Value = "Guru99"

    ' Clear only the contents, keeping the formatting
    Range("F1:F10").ClearContents
End Sub

四个要点使这种模式可靠。

  • 无需选择: 撰稿 Range(“B3”).Value = 10 比先选中单元格更快更安全。录制的宏中充斥着 `.Select`,是因为录制器会镜像鼠标操作,而不是因为代码本身需要这样做。
  • 价值与文本: .Value 返回底层数据,而 .Text 返回屏幕上显示的格式化字符串,该字符串可能会因列宽而截断。在计算中读取 .Value。
  • 一行显示所有方块: 将值分配给多单元格范围会一次性填充所有单元格,这比逐个填充要快得多。ping.
  • 弄清楚正确的事情: ClearContents 只删除数值,Clear 同时删除格式,Delete 删除单元格并移动周围的单元格。

Range 属性通过字母和数字来寻址单元格。第二个属性则通过两个数字来寻址同一个单元格。

单元格属性

与范围类似,在 VBA 您还可以使用“单元格属性”。唯一的区别在于它有一个“item”属性,可用于引用电子表格中的单元格。“单元格属性”在编程循环中非常有用。

例如,

Cells.item(行, 列)。以下两行均指单元格 A1。

  • Cells.item(1,1) 或
  • 单元格.项目(1,“A”)

VBA 中 Range 和 Cells 的区别

Range 和 Cells 通过不同的路径到达同一个工作表单元格,正确选择可以使代码更短、更易于阅读。

不同点 范围 电池
地址格式 文本字符串,Range(“A1”) 两个数字,单元格(1, 1)
多个细胞 是的,范围(“A1:C5”) 一次一个细胞
在循环内部 需要字符串拼接 行号可以是循环计数器
可读性 与 Excel 中看到的地址一致。 第27列比AA更难想象。
组合使用 Range(Cells(1, 1), Cells(5, 3)) 从数字构建 A1:C5 单元格区域。

实际操作中,对于可以一目了然的固定地址,应该使用 Range;而对于在运行时计算行号或列号的情况,应该使用 Cells。

范围偏移属性

范围偏移属性将选择远离其原始位置的行/列。根据声明的范围,选择单元格。参见下面的示例。

例如,

Range("A1").Offset(RowOffset:=1, ColumnOffset:=1).Select

操作结果将显示在单元格 B2 上。偏移属性会将单元格 A1 向后移动 1 列 1 行。您可以根据需要更改 RowOffset 和 ColumnOffset 的值。您可以使用负值 (-1) 将单元格向后移动。

下载包含上述代码的 Excel

下载上述Excel表格 Code

常见问题

使用 Cells(Rows.Count, 1).End(xlUp).Row。它从 A 列的底部开始,向上跳到包含数据的最后一个单元格,这比删除行后 UsedRange 更可靠。

每次读写操作都会在 VBA 和 Excel 之间进行。使用单个赋值语句将数据区域加载到数组中,在内存中处理该数组,然后使用单个语句将其写回。关闭 ScreenUpdating 功能也有帮助。

通常情况下,错误原因是地址无效、工作表名称不存在,或者尝试选择未激活工作表上的区域。请在引用中添加工作表名称,或先激活该工作表。

是的。粘贴录制的代码,AI 助手会将每个 Select 和 Selection 对替换为直接的、完整的 Range 引用。在副本上运行这两个版本,并在保留之前比较工作表。ping 改变。

是的。描述目标,例如“数据表”中 A 列到 D 列的每一行,AI 助手就会返回匹配的 Range 表达式。在实际数据上运行之前,请先用少量样本数据进行验证。

总结一下这篇文章: