要放假了,可是我们,我还是煎熬!

最让人不爽的是媳妇也需要加班加点的完成一些看起来很EASY的事:

统计数据,把几个表合并……

EXCEL本人还是懂得一点点的(我不想说我是学计算机的,我怕给学计算机的同志们丢脸)

早答应媳妇要给做一个程序,可以方便她做表的,可是一直没有做,

这里给媳妇道个歉!媳妇,我错了:)

那就做吧,具体怎么做就不再说,这里主要是把用到的一些程序做一个记录,以防以后还会用到。

代码有点不堪,高手请自行飘过~~~~~~~~~~

'点击开始计算,根据输入的表名,行,列
'简单的判断下有没有输入数据
'没有做严格的正则的匹配判断
Private Sub beginSum_Click()
Dim sheetName As String
Dim beginRow As Integer
Dim endRow As Integer
Dim beginCol As Integer
Dim endCol As Integer
Dim sumCol As Integer sheetName = tbSheetName.Text
beginRow = tbBeginRow.Text
endRow = tbEndRow.Text
beginCol = tbBeginCol.Text
endCol = tbEndCol.Text
sumCol = tbSumCol.Text If Len(sheetName) = Then
MsgBox "请输入正确的Sheet名称"
Exit Sub
ElseIf Not (IsNumeric(beginRow) And IsNumeric(endRow) And IsNumeric(endRow) And IsNumeric(beginCol) And IsNumeric(endCol) And IsNumeric(sumCol)) Then
MsgBox "请输入正确的行或列数"
Exit Sub
End If Call CountPersonYear(sheetName, beginRow, endRow, beginCol, endCol, sumCol)
MsgBox "计算完成!" End Sub
'计算过程--有点复杂,先每行求和,再把同一个人的N个月的数据再求和,再加上某个月的前N(2)项
'当然,前提是在每个人的信息后面要插入一个空行 见 InsertRow()
'然后把这个总数写入到另一个固定列的表中,见WriteToTable()
Sub CountPersonYear(sheetName As String, beginRow As Integer, endRow As Integer, beginCol As Integer, endCol As Integer, sumCol As Integer)
Dim personBeginRow As Integer
Dim mySum As Double
Dim bigMonth As Integer
Dim curMonth As Integer Dim i As Integer
Dim j As Integer Dim myWorkBook As Workbook
Dim mySheet As Worksheet Set myWorkBook = Application.ActiveWorkbook
Set mySheet = myWorkBook.Sheets(sheetName) personBeginRow = beginRow
bigMonth = mySheet.Cells(beginRow, )
'mySum = 0#
endRow = endRow + For i = beginRow To endRow
curMonth = mySheet.Cells(i, )
If (Len(curMonth) <> And curMonth <> ) Then
For j = beginCol To endCol
mySum = mySum + mySheet.Cells(i, j)
Next
mySheet.Cells(i, sumCol) = mySum
mySum = CDbl()
ElseIf (mySheet.Cells(i - , ) <> And Len(mySheet.Cells(i - , )) <> ) Then For j = personBeginRow To i -
mySum = mySum + CDbl(mySheet.Cells(j, sumCol))
Next mySheet.Cells(i, sumCol) = mySum + CDbl(mySheet.Cells(personBeginRow, )) + CDbl(mySheet.Cells(personBeginRow, )) Call WriteToTable("SheetSum", mySheet.Cells(personBeginRow, ), mySheet.Cells(personBeginRow, ), CStr(mySheet.Cells(personBeginRow, )), mySheet.Cells(i, sumCol)) mySum = CDbl() For j = i To endRow
If (mySheet.Cells(j, ) <> And (mySheet.Cells(j, )) <> ) Then
personBeginRow = j
bigMonth = mySheet.Cells(j, )
Exit For
End If
Next
End If
Next
End Sub '把计算后的结果写入另一个表中
Sub WriteToTable(sheetName As String, strName As String, strCardID As String, strYear As String, all As Double) Dim aSheet As Worksheet
Dim i As Integer
Dim j As Integer
Dim curRow As Double
Dim flag As Boolean flag = False Set aSheet = Application.ActiveWorkbook.Sheets(sheetName) 'curRow = aSheet.Cells(Rows.Count, 1).End(1).Row
'需要表中的数据没有用过的,要整行的删除,这样保证数据的连续性,不能只删除数据内容
curRow = aSheet.UsedRange.Rows.Count
For i = To curRow
If (aSheet.Cells(i, ) = strCardID) Then
For j = To
If CStr(aSheet.Cells(, j)) = strYear Then
aSheet.Cells(i, j) = all
flag = True
Exit For
End If
Next
End If
Next
If Not flag Then
curRow = curRow +
aSheet.Cells(curRow, ) = strName
aSheet.Cells(curRow, ) = strCardID
aSheet.Cells(curRow, ) = curRow
For j = To
If CStr(aSheet.Cells(, j)) = strYear Then
aSheet.Cells(curRow, j) = all
Exit For
End If
Next
End If
End Sub
'在每个人的信息后插入一空行,用于做总和
'插入是以个人的身份证是不是一样来判断的
'这里面要数据是连续的,如果下一个为空则认为是身份证号不一样会插入一空行
Sub InsertRow(sheetName As String, personCol As Integer)
Dim rng As Range
Dim personRow As String
Dim r As Integer
Dim n As Integer
Dim lastRow As Integer Dim mySheet As Worksheet
Set mySheet = Application.ActiveWorkbook.Sheets(sheetName) '第三列,即人名列最大的单元格数
lastRow = mySheet.Cells(Rows.Count, ).End().Row
For r = lastRow - To Step -
If (mySheet.Cells(r, personCol) <> mySheet.Cells(r - , personCol)) Then
mySheet.Cells(r, ).EntireRow.Insert
End If
'For n = 1 To Cells(r - 1, 1).Value
' Cells(r, 1).EntireRow.Insert
'Next n
Next r
End Sub

VBA小记的更多相关文章

  1. [原]Paste.deploy 与 WSGI, keystone 小记

    Paste.deploy 与 WSGI, keystone 小记 名词解释: Paste.deploy 是一个WSGI工具包,用于更方便的管理WSGI应用, 可以通过配置文件,将WSGI应用加载起来. ...

  2. VBA 格式化字符串 - Format大全

    VBA 格式化字符串 VBA 的 Format 函数与工作表函数 TEXT 用法基本相同,但功能更加强大,许多格式只能用于VBA 的 Format 函数,而不能用于工作表函数 TEXT ,以下是本人归 ...

  3. MySql 小记

    MySql  简单 小记 以备查看 1.sql概述 1.什么是sql? 2.sql发展过程? 3.sql标准与方言的关系? 4.常用数据库? 5.MySql数据库安装? 2.关键概念 表结构----- ...

  4. VBA学习

    1. Range / Cells / Columns / Rows 2. 绝对引用 $F$13 / 相对引用 F13 公式所在单元格的被复制到其他位置时,绝对引用不变 3. VLookup / NLo ...

  5. VBA学习思路

    打算花两三天学习VBA的基础,学习资料为<别怕,VBA其实很简单>,为了快速学习,先了解大致框架,后续再深入学习各种属性.方法和技巧. 1.VBA编程环境基本操作,手工操作,熟悉即可 2. ...

  6. VBA笔记(三)——常用对象

    VBA实际上就是操作Excel,把Excel进行拆解,划分多层对象,由顶至下为(也可以说是层层包裹): Application:代表Excel程序本性,之后我们操作对象都在它之下,因为是唯一且至高点, ...

  7. VBA中使用计时器的两种方法

    '================================ ' VBA采用Application.OnTime实现计时器 ' ' http://www.cnhup.com '========= ...

  8. Git小记

    Git简~介 Git是一个分布式版本控制系统,其他的版本控制系统我只用过SVN,但用的时间不长.大家都知道,分布式的好处多多,而且分布式已经包含了集中式的几乎所有功能.Linus创造Git的传奇经历就 ...

  9. 广州PostgreSQL用户会技术交流会小记 2015-9-19

    广州PostgreSQL用户会技术交流会小记 2015-9-19 今天去了广州PostgreSQL用户会组织的技术交流会 分别有两个session 第一个讲师介绍了他公司使用PostgreSQL-X2 ...

随机推荐

  1. MT8735A平台配置MT6630

    1. codegen配置 2. ProjectConfig CUSTOM_HAL_ANT = mt6630_ant_m1 CUSTOM_HAL_COMBO = mt6630 MTK_BT_CHIP = ...

  2. mysql 入门 1

    连接mysql服务器 mysql -h localhost -u username -ppasswd 1.查看服务器存在的库 show databases; 2.创建数据库 create databa ...

  3. sqlserver 截取字符串

    **/*******/*****/1399/* 我要取第3个'/'与第4个'/'中的内容,就是1399 create table ta( col varchar(100)) insert ta sel ...

  4. 4-1数据类型转换的基本概念 & 4-2 & 4-3数据类型转换案例 & 4-4习题

    4-1数据类型转换的基本概念 253是int类型的,赋值给长整型的n 这种就是强制的类型转换 自动类型转换又叫做饮食类型转换,因为他的转换我们是看不到的 实线表示无数据丢失的 虚线在转换时, doub ...

  5. Linux 静态库 & 动态库

    转自:http://blog.chinaunix.net/uid-26833883-id-3219335.html 一.什么是库   本质上来说库是一种可执行代码的二进制形式,可以被操作系统载入内存执 ...

  6. UVaLive 3905 Meteor (扫描线)

    题意:给定上一个矩形照相机和 n 个流星,问你照相机最多能拍到多少个流星. 析:直接看,似乎很难解决,我们换一个思路,我们认为流星的轨迹就没有用的,我们可以记录每个流星每个流星在照相机中出现的时间段, ...

  7. 别用visual editor了,用WindowBuilder

    以前利用 Eclipse Visual Editor 项目构建 GUI,现在用WindowBuilder吧. 官网说: The Visual Editor project has been archi ...

  8. HTML学习笔记(五)框架

    框架 通过使用框架,可以在同一个浏览器窗口中显示多个页面. eg: <frameset rows="50%,50%"> <frame src="/exa ...

  9. java web 学习-网络资源

    [网络收集] 1. JavaWeb学习总结——JSP中的九个内置对象 2. Jsp九大内置对象以及四个作用域 他人学习汇总资源 1. http://www.cnblogs.com/xdp-gacl/t ...

  10. MFC——ComBox用法大全

    Combo Box (组合框)控件很简单,可以节省空间.从用户角度来看,这个控件是由一个文本输入控件和一个下拉菜单组成的.用户可以从一个预先定义的列表里选择一个选项,同时也可以直接在文本框里面输入文本 ...