Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 3273|回复: 5

[分享] 【烟花原创】VBA零基础之第69篇 单元格对象Range(十三)

[复制链接]
发表于 2014-1-4 16:51 | 显示全部楼层 |阅读模式
本帖最后由 hwc2ycy 于 2014-1-4 16:54 编辑

Calculate 方法
 计算工作表指定区域中的单元格
 返回值:Variant
说明:
 在之前讲过的工作簿对象,工作表对象时,也有Calculate方法。
 所有打开的工作簿 Application.Calculate(或只是 Calculate
 指定工作表 Worksheets(1).Calculate
 指定区域 Worksheets(1).Rows(2).Calculate
 单独计算工作表中指定区域中的单元格时,不会触发工作表或工作簿对象的Calculate事件。


ColumnDifferences 方法
 返回一个 Range 对象,该对象表示每列中所有与比较单元格内容不同的单元格。
 Comparison 必选,用于对指定区域进行比较的单个单元格,该单元格必须位于调用该方法的单元格区域中。
 这个方法等同于与定位条件中的“列内容差异单元格”。
 Comparison参数也就相当于比较区域中的活动单元格。
 示例:

  On Error Resume Next
  Dim rg1 As Range
  Dim rg2 As Range
  Dim rg3 As Range
  Dim rg4 As Range
  With Range("a1:a12")
   Set rg1 = .ColumnDifferences(.Cells(1))
   Set rg2 = .ColumnDifferences(.Cells(2))
   Set rg3 = .ColumnDifferences(.Cells(3))
   MsgBox rg1.Address & vbCr & rg2.Address & vbCr & rg3.Address
   '这里是为了演示,没有判断对象变量引用为空的情况。
   Set rg4 = .Offset(, 1).ColumnDifferences(.Cells(1, 2))
   If Not rg4 Is Nothing Then
    MsgBox rg4.Address
   Else
    MsgBox "源单元格内容完全相同"
   End If
  End With

 数据截图如下:
   69-1.jpg
 
RowDifferences 方法
 返回一个 Range 对象,该对象表示每行中与比较单元格内容不同的所有单元格。
 语法:RowDifferences(Comparison)
 Comparison 必选,用于与指定区域进行比较的单个单元格。
 这个方法等同于与定位条件中的“行内容差异单元格”。
 使用上与
ColumnDifferences差别不大,一个是列差异,一个是行差异。

Consolidate 方法

 将多个工作表中多个区域的数据合并计算至单个工作表上的单个区域。
 语法:Consolidate(Sources, Function, TopRow,LeftColumn, CreateLinks)
  Sources 可选 ,以文本引用字符串数组的形式给出合并计算的源。
   
该数组采用 R1C1样式表示法,这些引用必须包含将要合并计算的工作表的完整路径
  
Function 可选,XlConsolidationFunction 常量之一,用于指定合并计算的类型。
  
TopRow 可选,如果为 True,则基于合并计算区域中首行内的列标题对数据进行合并。
    
如果为 False,则按位置进行合并计算,默认值为 False
  
LeftColumn 可选,如果为 True 则基于合并计算区域中左列内的行标题对数据进行合并计算。
    如果为
False,则按位置进行合并计算。默认值为 False
  
CreateLinks 可选,如果为 True,则让合并计算使用工作表链接。
    如果为
False,则让合并计算复制数据。默认值为 False
 很明显,Consolidate方法就是在技巧中使用的合并计算
示例:
 Dim sht As Worksheet
 Dim str As String
 Dim arr
 For Each sht In Worksheets
     If sht.Name Like "#月" Then
         '对工作表名称过滤,只有 X月 这类名字的才处理,X代表1位数字
         str = str & "'" & sht.Name & "'!" & sht.UsedRange.Address(ReferenceStyle:=xlR1C1) & Chr(10)
         '返回的地址以R1C1样式表示,
     End If
 Next
 '这里应用代码来生成数组,如果要合并的工作表比较多,推荐用代码,这样方便,也能避免写错。
 If Len(str) Then
     str = Left(str, Len(str) - 1)
     '去掉字符串结尾的CHR(10)字符,避免生成数组后,最后一个元素为空
 Else
     Exit Sub
 End If

 arr = Split(str, Chr(10))
 '字符串转换成数组

 With Worksheets.Add(after:=Worksheets(Worksheets.Count))
     .Range("a1").Consolidate arr, xlSum, True, True
     '求和,列标题,行标题,不建立连接
     .Cells(Rows.Count, 2).End(xlUp).Offset(2, -1).Consolidate arr, xlSum, True, False
     '求和,列标题,无行标题,不建立连接
     .Cells(Rows.Count, 2).End(xlUp).Offset(2, -1).Consolidate arr, xlSum, False, True
     '求和,无列标题,行标题,不建立链接
     .Cells(1, Columns.Count).End(xlToLeft).Offset(, 2).Consolidate arr, xlCount, True, True, True
     '求和,列标题,行标题,建立链接
 End With

 1月数据截图:
   69-2.jpg
 2月数据截图:
   69-3.jpg
 3月数据截图:
   69-4.jpg
 效果图:
   69-5.jpg

excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2014-1-4 16:54 | 显示全部楼层
这样的知识汇总起来应该出书才好,买了很多本都没有这么详细的,哎
回复

使用道具 举报

发表于 2014-6-11 16:02 | 显示全部楼层

这样的知识汇总起来应该出书才好,买了很多本都没有这么详细的,哎
回复

使用道具 举报

发表于 2014-6-18 12:38 | 显示全部楼层
回复

使用道具 举报

发表于 2014-6-19 09:46 | 显示全部楼层
{:29:}
回复

使用道具 举报

发表于 2014-6-26 22:25 | 显示全部楼层
合并计算
谢谢分享,标记,六十九
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-5-2 09:06 , Processed in 0.157564 second(s), 7 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表