本帖最后由 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
数据截图如下:
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 月数据截图:
2 月数据截图:
3 月数据截图:
效果图:
|