Sub WorkSheetsConsolidate()
Rem 设置求和区域为 单元格区域;单元格区域
Const Setting As String = "A1;B2:C4"
Dim StartTime As Variant
Dim UsedTime As Variant
StartTime = VBA.Timer AppSettings True
Dim Wb As Workbook
Dim Sht As Worksheet
Dim OneSht As Worksheet
Const MAIN_SHEET As String = "1"
Dim Dic As Object
Dim Key As String
Dim OneKey
Dim Brr
Dim Arr As Variant
Dim Rng As Range
Dim RngAddress
Dim Areas, OneArea Set Dic = CreateObject("Scripting.Dictionary")
Set Wb = Application.ThisWorkbook
Set Sht = Wb.Worksheets(MAIN_SHEET) Areas = Split(Setting, ";")
For Each OneArea In Areas
RngAddress = OneArea
Set Rng = Sht.Range(RngAddress)
Rng.ClearContents
Arr = Rng.Value
Dic(RngAddress) = Arr
Next OneArea For Each OneKey In Dic.Keys
For Each OneSht In Wb.Worksheets
If OneSht.Name <> Sht.Name Then
Arr = Dic(OneKey)
RngAddress = OneKey
Set Rng = OneSht.Range(RngAddress)
Brr = Rng.Value If Rng.Cells.Count > 1 Then For i = LBound(Arr) To UBound(Arr)
For j = LBound(Arr, 2) To UBound(Arr, 2)
If IsNumeric(Brr(i, j)) Then
'只有为数字时才可以相加
Arr(i, j) = Arr(i, j) + Brr(i, j)
Else
MsgBox "工作表:" & OneSht.Name & vbCr & _
"单元格:" & Rng.Cells(i, j).Address & "的数据不是数字,不能累加"
GoTo ErrorExit
End If
Next j
Next i
Else
Arr = Arr + Brr
End If
'更新求和数据
Dic(OneKey) = Arr
End If
Next OneSht
Next OneKey For Each OneKey In Dic.Keys
RngAddress = OneKey
Arr = Dic(OneKey)
Set Rng = Sht.Range(RngAddress)
Rng.Value = Arr
Next OneKey UsedTime = VBA.Timer - StartTime
Debug.Print "UsedTime :" & Format(UsedTime, "#0.0000 Seconds")
'MsgBox "UsedTime :" & Format(UsedTime, "#0.0000 Seconds") ErrorExit:
Set Dic = Nothing
Set Wb = Nothing
Set Sht = Nothing
Set Rng = Nothing
Set OpenWb = Nothing
Set OpenSht = Nothing
Erase Arr
Erase Brr AppSettings False
End Sub Sub AppSettings(Optional IsStart As Boolean = True)
Application.ScreenUpdating = IIf(IsStart, False, True)
Application.DisplayAlerts = IIf(IsStart, False, True)
Application.Calculation = IIf(IsStart, xlCalculationManual, xlCalculationAutomatic)
Application.StatusBar = IIf(IsStart, ">>>>>>>>Macro Is Running>>>>>>>>", False)
End Sub

  

20180831xlVBA_WorksheetsCosolidate的更多相关文章

随机推荐

  1. Catogory如何添加属性

    一,Category结构体 typedef struct category_t { const char *name; //类的名字 classref_t cls; //类 struct method ...

  2. sftp服务器的安装与远程

    本文所描述环境只在window系统下 一.搭建sftp服务器 1.首先需要下载一个软件freeSSHd,下载地址http://www.freesshd.com/?ctt=download,下载第一个f ...

  3. 从0开始安装fedora23的笔记-- 以及使用fedora的常规问题-2

    在shell中, 你是可以连续输入多个语句的, 中间用分号; 连接 也可以把这些多个语句放到一个函数中, 函数的话,便于多次引用. 而且 "封装" 为函数后, 可以用set查看到这 ...

  4. Linux 题目收集

    目录 1.库函数,系统调用,用户态及内核态 2.查看进程,杀死进程 3.查看文档 4.scp命令 5.不在 sudoers 文件中.此事将被报告 6.chmod: 更改"minikube&q ...

  5. wqCms6.0在IIS6的Getshell

    2017-02-15发布 一.漏洞利用点 漏洞文件:admin_UploadDataHandler.ashx 自定义构造上传点 二.hack it 三.POC <html> <bod ...

  6. 常用for循环和for in 以及for of 的区别

    用Es6对象扩展运算符(…)与rest运算符说明 function test(first,...a){ for(let val=0; val<a.length;val++){ console.l ...

  7. 文件IO(2)

    Lseek:       ***************************************************************************    实验一:     ...

  8. HDU 4656 Evaluation(MTT)

    题意 \(x_k=bc^{2k}+d\) \(\displaystyle F(x)=\sum_{i=0}^{n-1}a_ix^i\) 给定 \(\{a\},b,c,d,n\) ,求 \(F(x_0), ...

  9. Ural 1297 Palindrome(后缀数组+最长回文子串)

    https://vjudge.net/problem/URAL-1297 题意: 求最长回文子串. 思路: 先将整个字符串反过来写在原字符串后面,中间需要用特殊字符隔开,那么只需要某两个后缀的最长公共 ...

  10. 前端面试题 | JS部分(附带答案)

    目前在找工作,所以各方收集了一堆面试题.其实刷面试题的过程也能更新自己对知识的认识,所以也提醒自己多看多理解.如果对下面题目有更深理解,会实时更新.遇到新题目,也会不定时更新.希望能帮助到部分朋友- ...