`

如何:在代码中引用工作表范围

阅读更多

Range 类的使用非常灵活。有时 Range 对象是单个对象,有时它表示一个对象集合。尽管 Range 对象常常指代单个对象,它却拥有 ItemCount 成员,因而有时很难确切把握 Range 对象的用法。

注意下面有几个实例检索一个范围的 Address 属性。此属性返回一个字符串,该字符串包含范围坐标的表示形式,其格式可以是以下几种格式中的一种:“$A$1”(位置 A1 的单元格)、“$1”(工作表的第一行)和“$A$1:$C$5”(由 A1 和 C5 限定的矩形内的所有单元格组成的范围)。“$”指示绝对坐标,而不是相对坐标。使用 Address 属性是确定检索到的范围的精确位置的最简单方法。

以下过程使 Range 对象引用单个单元格或一组单元格。每个实例都采用了以下设置代码:

' Visual Basic
Dim ws As Excel.Worksheet = _
    DirectCast(ThisWorkbook.Worksheets(1), Excel.Worksheet)
Dim rng, rng1, rng2 As Excel.Range

// C#
Excel.Worksheet ws = (Excel.Worksheet)ThisWorkbook.Worksheets[1]; 
Excel.Range rng,rng1,rng2;

可以使用以下任一方法引用特定的范围。

引用工作表中的特定范围

  • 引用 Application 对象的 ActiveCell 属性:
    ' Visual Basic
    rng = ThisApplication.ActiveCell
    
    // C#
    rng = ThisApplication.ActiveCell;
  • 使用对象的 Range 属性可指定一个范围:
    ' Visual Basic
    rng = ws.Range("A1")
    rng = ws.Range("A1:B12")
    
    // C#
    rng = ws.get_Range("A1",Type.Missing);
    rng = ws.get_Range("A1:B12",Type.Missing);
  • 使用工作表的 Cells 属性可指定单个行和列的值:
    ' Visual Basic
    ' The Cells collection returns an Object.
    ' Convert it to a Range object explicitly.
    rng = DirectCast(ws.Cells(1, 1), Excel.Range)
    
    // C#
    // The Cells collection returns an Object.
    // Convert it to a Range object explicitly.
    rng = (Excel.Range)ws.Cells[1,1];
  • 指定一个范围的“角”;也可直接引用范围的 CellsRowsColumns 属性;这几种情况下该属性都返回一个范围:
    ' Visual Basic
    rng = ws.Range("A1", "C5")
    rng = ws.Range("A1", "C5").Cells
    rng = ws.Range("A1", "C5").Rows
    rng = ws.Range("A1", "C5").Columns
    
    // C#
    rng = ws.get_Range("A1", "C5"); 
    rng = ws.get_Range("A1", "C5").Cells; 
    rng = ws.get_Range("A1", "C5").Rows; 
    rng = ws.get_Range("A1", "C5").Columns;
  • 引用命名范围:
    ' Visual Basic
    rng = ThisApplication.Range("SomeRangeName")
    
    // C#
    rng = ThisApplication.get_Range("SomeRangeName", Type.Missing);
  • 引用特定的行或列或者由行和列构成的范围;请注意,这些 RowsColumns 属性分别返回一个 Object,如果将 Option Strict 设置为 On,则需要进行转换:
    ' Visual Basic
    rng = DirectCast(ws.Rows(1), Excel.Range)
    rng = DirectCast(ws.Rows("1:3"), Excel.Range)
    rng = DirectCast(ws.Columns("B:E"), Excel.Range)
    
    // C#
    rng = (Excel.Range)ws.Rows[1,Type.Missing];
    rng = (Excel.Range)ws.Rows["1:3",Type.Missing];
    rng = (Excel.Range)ws.Columns["B:E",Type.Missing];
  • 使用 Application 对象的 Selection 属性返回与选定的单元格相对应的范围:
    ' Visual Basic
    System.Diagnostics.Debug.WriteLine(ThisApplication.Selection.Address)
    
    // C#
    System.Diagnostics.Debug.WriteLine(((Excel.Range)
        ThisApplication.Selection).get_Address(
        Type.Missing, Type.Missing, Excel.XlReferenceStyle.xlA1, 
        Type.Missing, Type.Missing)); 
  • 创建一个包含两个范围的并集的范围(在引号中指定这两个范围,之间以逗号分隔):
    ' Visual Basic
    rng = ThisApplication.Range("A1:D4, F2:G5")
    ' You can also use the Application object's Union
    ' method to retrieve the intersection of two ranges:
    rng1 = ThisApplication.Range("A1:D4")
    rng2 = ThisApplication.Range("F2:G5")
    rng = ThisApplication.Union(rng1, rng2)
    
    // C#
    rng = ThisApplication.get_Range("A1:D4","F2:G5"); 
    // You can also use the Application object's Union 
    // method to retreive the intersection of two ranges: 
    
    rng1 = ThisApplication.get_Range("A1","D4"); 
    rng2 = ThisApplication.get_Range("F2","G5"); 
    rng = ThisApplication.Union(rng1, rng2, Type.Missing, Type.Missing,
        Type.Missing, Type.Missing, Type.Missing, Type.Missing, 
        Type.Missing, Type.Missing, Type.Missing, Type.Missing, 
        Type.Missing, Type.Missing, Type.Missing, Type.Missing, 
        Type.Missing, Type.Missing, Type.Missing, Type.Missing, 
        Type.Missing, Type.Missing, Type.Missing, Type.Missing, 
        Type.Missing, Type.Missing, Type.Missing, Type.Missing, 
        Type.Missing, Type.Missing);
  • 创建一个表示两个范围的交集的范围(在引号中指定这两个范围,之间以逗号分隔):
    ' Visual Basic
    rng = ThisApplication.Range("A1:D16 B2:F14")
    ' You can also use the Application object's Intersect
    ' method to retrieve the intersection of two ranges:
    rng1 = ThisApplication.Range("A1:D16")
    rng2 = ThisApplication.Range("B2:F14")
    rng = ThisApplication.Intersect(rng1, rng2)
    
    // C#
    rng = ThisApplication.get_Range("A1:D16","B2:F14"); 
    // You can also use the Application object's Intersect 
    // method to retrieve the intersection of two ranges: 
    rng1 = ThisApplication.get_Range("A1","D16"); 
    rng2 = ThisApplication.get_Range("B2","F14"); 
    rng = ThisApplication.Intersect(rng1, rng2, Type.Missing, Type.Missing,
        Type.Missing, Type.Missing, Type.Missing, Type.Missing, 
        Type.Missing, Type.Missing, Type.Missing, Type.Missing, 
        Type.Missing, Type.Missing, Type.Missing, Type.Missing, 
        Type.Missing, Type.Missing, Type.Missing, Type.Missing, 
        Type.Missing, Type.Missing, Type.Missing, Type.Missing, 
        Type.Missing, Type.Missing, Type.Missing, Type.Missing, 
        Type.Missing, Type.Missing);
  • 使用范围的 Offset 属性可检索相对于原始范围的范围;以下实例将内容添加到位于第 1 行第 1 列的单元格下方的范围:
    ' Visual Basic
    rng = DirectCast(ws.Cells(1, 1), Excel.Range)
    
    Dim i As Integer
    For i = 1 To 5
        rng.Offset(i, 0).Value = i.ToString
    Next
    
    // C#
    rng = (Excel.Range)ws.Cells[1,1]; 
    
    for(int i = 1; i <= 5; i++) 
        rng.get_Offset(i,0).Value2 = i.ToString();
  • 使用范围的 CurrentRegion 属性可检索代表当前区域的范围,当前区域指的是由最近的空行和空列所界定的区域:
    ' Visual Basic
    System.Diagnostics.Debug.WriteLine( _
        ThisApplication.Range("C3").CurrentRegion.Address())
    
    // C#
    System.Diagnostics.Debug.WriteLine(ThisApplication.get_Range(
        "C3", Type.Missing).CurrentRegion.get_Address(
        Type.Missing, Type.Missing,
        Excel.XlReferenceStyle.xlA1, Type.Missing, Type.Missing));
  • 使用范围的 Areas 属性可检索一组范围,每个范围对应于该范围内容中的一个区域:以下代码要求工作表中有一个名为“rangeTest”的范围:
    ' Visual Basic
    rng = ThisApplication.Range("rangeTest")
    Dim i As Integer
    For i = 1 To rng.Areas.Count
        System.Diagnostics.Debug.WriteLine(rng.Areas(i).Address)
    Next
    
    // C#
    rng = ThisApplication.get_Range("rangeTest",Type.Missing); 
    for(int i = 1; i <= rng.Areas.Count; i++) 
        System.Diagnostics.Debug.WriteLine(
            rng.Areas[i].get_Address(Type.Missing,
            Type.Missing, Excel.XlReferenceStyle.xlA1, Type.Missing, 
            Type.Missing));
  • 使用 End 属性以及 XlDirection 枚举中的值 (xlUp、xlToRight、xlToLeft、xlDown),可检索代表该区域末尾处的单元格的范围(如同按下了枚举值所描述的键一样):
    ' Visual Studio
    With ThisApplication.Selection
        System.Diagnostics.Debug.WriteLine(.End(
            Excel.XlDirection.xlToRight).Address)
        System.Diagnostics.Debug.WriteLine(.End(
            Excel.XlDirection.xlToLeft).Address)
        System.Diagnostics.Debug.WriteLine(.End(
            Excel.XlDirection.xlUp).Address)
        System.Diagnostics.Debug.WriteLine(.End(
            Excel.XlDirection.xlDown).Address)
    End With
    
    // C#
    rng = (Excel.Range)ThisApplication.Selection; 
    System.Diagnostics.Debug.WriteLine(rng.get_End(
        Excel.XlDirection.xlToRight).get_Address(
        Type.Missing, Type.Missing, Excel.XlReferenceStyle.xlA1, 
        Type.Missing, Type.Missing)); 
    System.Diagnostics.Debug.WriteLine(rng.get_End(
        Excel.XlDirection.xlToLeft).get_Address(
        Type.Missing, Type.Missing, Excel.XlReferenceStyle.xlA1, 
        Type.Missing, Type.Missing)); 
    System.Diagnostics.Debug.WriteLine(rng.get_End(
        Excel.XlDirection.xlUp).get_Address(
        Type.Missing, Type.Missing, Excel.XlReferenceStyle.xlA1, 
        Type.Missing, Type.Missing)); 
    System.Diagnostics.Debug.WriteLine(rng.get_End(
        Excel.XlDirection.xlDown).get_Address(
        Type.Missing, Type.Missing, Excel.XlReferenceStyle.xlA1, 
        Type.Missing, Type.Missing));
  • 使用 EntireRowEntireColumn 属性引用包含指定范围的行或列。以下代码要求工作表中有一个名为“rangeTest”的范围:
    ' Visual Basic
    rng = ThisApplication.Range("rangeTest")
    System.Diagnostics.Debug.WriteLine(rng.Areas(2).EntireRow.Address)
    
    // C#
    rng = ThisApplication.get_Range("rangeTest",Type.Missing); 
    System.Diagnostics.Debug.WriteLine(rng.Areas[2].EntireRow.get_Address(
        Type.Missing, Type.Missing, Excel.XlReferenceStyle.xlA1,
        Type.Missing, Type.Missing));
分享到:
评论

相关推荐

    Exce百宝箱——2012版本.rar

    【返回首页】:配合建立工作表目录工具使用,可以在任何工作表中瞬间返回第一个工作表 【工作簿标签】:将当前开启的工作簿创建一个方便切换标签,置于工作表上方。可通过Ctrl+Shift+T切换显示状态,可以通过右键菜单...

    Excel百宝箱9.0无限制破解版.rar

    【返回首页】:配合建立工作表目录工具使用,可以在任何工作表中瞬间返回第一个工作表 【工作簿标签】:将当前开启的工作簿创建一个方便切换标签,置于工作表上方。可通过Ctrl+Shift+T切换显示状态,可以通过右键...

    Excel VBA实用技巧大全 附书源码

    04072引用工作表中任意对象左上角、右下角的单元格 04073引用输入了数组公式的所有单元格区域 04074引用输入了某数组公式的单元格区域 04075引用输入了某个函数的全部单元格 04076引用含有特定文本字符串的所有...

    Excel百宝箱

    【返回首页】:配合建立工作表目录工具使用,可以在任何工作表中瞬间返回第一个工作表 【工作簿标签】:将当前开启的工作簿创建一个方便切换标签,置于工作表上方。可通过Ctrl+Shift+T切换显示状态,可以通过右键菜单...

    Oracle SQL高级编程(资深Oracle专家力作,OakTable团队推荐)--随书源代码

    Karen Morton及其团队在本书中提供了专业的方案:先掌握语言特性,再学习Oracle为提升语言效率而加入的支持特性,进而将两者综合考虑并在工作中加以应用。作者通过总结各自多年的软件开发和教学培训经验,与大家...

    EXCEL集成工具箱V6.0

    【隔行插入】 在当前工作表中允许从M行到N行,隔X行插入Y行,并允许是否需复制标题Z行。 【制作工资条】 瞬间将工资明细表生成工资条,方便打印并裁剪。可以自己定义工资条标题的行数以及相隔行数、插入行数等。并...

    Excel百宝箱 9.0 破解版 批量导入图片等200种功能

    【返回首页】配合“建立工作表目录”工具使用,可以在任何工作表中瞬间返回第一个工作表 Excel百宝箱 26个函数功能介绍如下: 函数名称功能介绍 sumifcol按颜色进行条件求和。有三个区域引用参数,其中第三参数...

    EXCEL集成工具箱V8.0完整增强版(精简)

    【隔行插入】 在当前工作表中允许从M行到N行,隔X行插入Y行,并允许是否需复制标题Z行。 【制作工资条】 瞬间将工资明细表生成工资条,方便打印并裁剪。可以自己定义工资条标题的行数以及相隔行数、插入行数等。并...

    Excel 2007数据透视表完全剖析 4/7

    11.6.2 在空白报表工作表上创建摘要 235 11.6.3 填充大纲视图 235 11.6.4 处理最终格式 236 11.6.5 添加分类汇总 237 11.6.6 将所有步骤汇总 238 11.7 处理两个以上数据字段的问题 241 11.7.1 计算数据...

    Oracle9i的init.ora参数中文说明

    值范围: Oracle8i National Language Support Guide 中指定的任何有效的10 字节字符串。 默认值: BINARY nls_currency: 说明: 为 L 数字格式元素指定用作本地货币符号的字符串。该参数的默认值由 NLS_TERRITORY ...

    Visual C++ 2010入门经典(第5版)--源代码及课后练习答案

    在个人实践中,Ivor Horton也是一名系统顾问。他从事程序设计教学工作已经超过了25年。  苏正泉,1995年毕业于解放军信息工程学院计算机及应用专业,高级工程师。在IT项目管理、软件开发、系统管理和网络管理方面都...

    JAVA上百实例源码以及开源项目源代码

    在有状态SessionBean中,用累加器,以对话状态存储起来,创建EJB对象,并将当前的计数器初始化,调用每一个EJB对象的count()方法,保证Bean正常被激活和钝化,EJB对象是用完毕,从内存中清除…… Java Socket 聊天...

    excel中161个VBA_自定义函数超级实用

    函数作用:在多个工作表中查找一个范围内符合某个指定条件的项目对应指定范围加总求和..........................59 '35.函数作用:返回 Column 英文字.......................60 '36.函数作用:查找指定列名的列数.......

    excel的使用

    来直接选择需要输入相同内容的多个工作表,接着在其中的任意一个工作表中输入这些相同的数据,此时这些数据会自动出现在选中的其它工作表之中。输入完毕之后,再次按下键盘上的Ctrl键,然后使用鼠标左键单击所选择的...

    Visual C++ 2005入门经典--源代码及课后练习答案

    8.8.3 在引用类中重载运算符 435 8.9 小结 437 8.10 练习 438 第9章 类继承和虚函数 440 9.1 面向对象编程的基本思想 440 9.2 类的继承 441 9.2.1 基类的概念 442 9.2.2 基类的派生类 442 9.3 继承...

    数据融合matlab代码-TBN_learning:TBN_learning是MATLAB实施的混合算法,用于在全基因组范围内学习转录贝叶斯网

    数据融合matlab代码执照 Elisabetta Sauta的2020年版权法 “用于学习全基因组转录调控网络的基于贝叶斯数据融合的方法”是免费软件:您可以根据自由软件基金会发布的...如果您在研究工作中使用此代码,请引用: Sauta,

    Excel 2007数据透视表完全剖析 3/7

    11.6.2 在空白报表工作表上创建摘要 235 11.6.3 填充大纲视图 235 11.6.4 处理最终格式 236 11.6.5 添加分类汇总 237 11.6.6 将所有步骤汇总 238 11.7 处理两个以上数据字段的问题 241 11.7.1 计算数据...

    我整理的VBA 自定义函数大全 共138页

    34.在多个工作表中查找一个范围内符合某个指定条件的项目对应指定范围加总求和 35.返回 Column 英文字 36.查找指定列名的列数 37.文字格式的时间(分:秒)转化为数字格式(秒) 38.将"hh:mm:ss"格式的时分秒数转换成秒数...

    Excel 2007数据透视表完全剖析 1/7

    11.6.2 在空白报表工作表上创建摘要 235 11.6.3 填充大纲视图 235 11.6.4 处理最终格式 236 11.6.5 添加分类汇总 237 11.6.6 将所有步骤汇总 238 11.7 处理两个以上数据字段的问题 241 11.7.1 计算数据...

Global site tag (gtag.js) - Google Analytics