怎样才能把Excel表格要双击才能求和放到博客(空间)里

请使用支持脚本的浏览器!
该日志尚未公开,你暂时不能查看。博主可在此
不如去逛逛吧。
网易公司版权所有&&&温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!&&|&&
模块内容加载中...
this.p={b:2,maxb:5,maxp:6}
{if !defined('b')} 日志更新列表加载中... {elseif !b.length} 没有日志更新! {else} {list b as x}·{/list} {/if}
{if !defined('p')} 相片更新列表加载中... {elseif !p.length} 没有相片更新! {else} {list p as x}{/list} {/if}
{list 0..6 as x}${dv[x]}{/list} {list 1..6 as x}{list 1..7 as y}{/list}{/list}
{list df..dt as x}{/list}
简单套用VBA模板代码,对初学VBA并立志在VBA扎根者来说,或许不是最好的办法,但对只需要解决自己一些简单问题的人来讲就是一种捷径。*********自定义函数*********Function Nows()&&& '声明函数,无参。时间函数&&& Dim Tim As String&&& '声明一个变量&&& Tim = Format(Now, "yyyy-mm-dd hh:mm:ss")&&& '获取当前时间,并转换成文本&&& Nows = Tim&&& '将文本日期赋与函数End Function---------------------------------------------------------------------------------------'Function nows()&& '声明函数&&& Dim tim As String& '声明一个变量&&& tim = Format(Now, "yyyy-mm-dd hh:mm:ss") '获取当前时间,并转换成文本&&& nows = tim '将文本日期赋予函数End Function----------------------------------------------------------------------------------------Function 工作簿名()&&& '获取当前工作簿名称,无参数&&& 工作簿名 = ActiveWorkbook.Name&&& 'ActiveWorkbook即表示当前工作簿End Function---------------------------------------------------------------------------------------Function 大写(cell As String) As String&&& '声明函数名,有一个参数&&& Dim RMBS As String&&& Application.Volatile&&& '声明为易失性函数&&& If cell = "" Or Not VBA.IsNumeric(cell) Then 大写 = "": Exit Function&&& '如果参数为空或者非数值则返回空白&&& If cell = 0 Then 大写 = "零元整": Exit Function&&& '如果参数为0则返回“零元整”&&& '将数值转换成中文大写,并将点替换成“元”,将负号替换成“负”&&& RMBS = Replace(Replace(Application.Text(Round(cell, 2), "[DBnum2]"), ".", "元"), "-", "负")&&& '加入角与分,同时将最后的“零”替换成“元整”&&& RMBS = IIf(Left(Right(RMBS, 3), 1) = "元", Left(RMBS, Len(RMBS) - 1) & "角" & Right(RMBS, 1) & "分", IIf(Left(Right(RMBS, 2), 1) = "元", RMBS & "角", IIf(RMBS = "零", "", RMBS & "元整")))&&& '将“零元”和“零角”替换成空&&& RMBS = Replace(Replace(RMBS, "零元", ""), "零角", "")&&& 大写 = RMBS&&& '将变量的值赋与函数End Function--------------------------------------------------------------------------------------Function 工作表(Optional 序号) As String& '声明函数,有一个参数可选参数.[列号COLUMN()或行号ROW()]&&& Application.Volatile&&& '声明为易失性函数''如果未输入参数,则赋与变量序号为当前表的地址&&& If VBA.IsMissing(序号) Then 序号 = ActiveSheet.Index&&& If 序号 & Sheets.Count Then&&& '如果参数大于工作表数量&&&&&& 工作表 = ""& '返回空&&& Else&&&&&&&&&&& '否则&&&&&& 工作表 = Sheets(序号).Name&&& '取表名&&& End IfEnd Function---------------------------------------------------------------------------------------Function 关机(Optional Close_Time As Byte = 10)&&& '声明函数名称&&& 关机 = Close_Time&&& '在单元格显示时间&&& Shell "shutdown -s -t " & Close_Time&&& '在指定的时间内关闭工作表,调用的DOS命令End FunctionFunction hesum(rng As Range, Optional 单双 As Byte = 1)&&& '声明函数,有两个参数,第二个是可选参数&&& Application.Volatile&&& '声明为易失性函数&&& Dim cell As Range, Sum1, Sum2&&& For Each cell In rng&&&&&&& If InStr(cell, "/") & 0 Then& '如果有“/”&&&&&&&&&&& 左 = CLng(Left(cell, InStr(cell, "/") - 1))& '提取/左边的数据&&&&&&&&&&& 右 = CLng(Replace(cell, 左 & "/", ""))& '提取/右边的数据&&&&&&&&&&& Sum1 = Sum1 + (左 + 右)&&& '将左右相加&&&&&&& Else&&&&&&&&&&& Sum2 = Sum2 + cell * 2&&& '没有“/”则直接乘以2&&&&&&& End If&&& Next&&& hesum = (Sum2 + Sum1) / 单双&&& '汇总后除以第二参数End FunctionFunction 排名(区域, 成绩)&&& '声明函数,有两个参数&&& Application.Volatile&&& '声明为易失性函数&&& Dim Dic As Object, rng, i As Integer&&& '声明变量,包括一个字典对象&&& Set Dic = CreateObject("scripting.dictionary")&&& '声明字典对象变量&&& For Each rng In 区域& '遍历区域'如果变量rng等于成绩则为变量i赋值1,如果变量rng大于成绩则将rng的值追加到字典中&&&&&&& If rng = 成绩 Then i = 1 Else If rng & 成绩 Then Dic(rng * 1) = 1&&& Next&&& '如果变量i大于0,即区域中有数据等于成绩,那么排名结果等于字典中的数量加1(字典对象是忽略重复值的)&&& If i & 0 Then 排名 = Dic.Count + 1 Else 排名 = "超出范围"&&& '如果成绩与区域中任何不等则返回“超出范围”End FunctionFunction Col(Optional rng As Range, Optional style As String = "A")& '声明函数名称,有两个可选参数&&& Application.Volatile&&& '声明为易失性函数'如果第二参数录入A和a以外的任意字符则返回空白&&& If style && "A" And style && "a" Then Col = "": Exit Function&&& If rng Is Nothing Then Set rng = ActiveCell&&& '如果忽略第一参数则默认取当前活动单元格&&& '函数结果等于Cells(1, rng)的地址去除后1之后所对应的字母。然后根据第二参数进行大小写控制&&& Col = StrConv(Replace(Cells(1, rng.Column).Address(0, 0), 1, ""), IIf(style = "A", vbUpperCase, vbLowerCase))End Function----------------------------------------------------------------------------------------Function 星期(Optional dates As Date, Optional style As Byte = 2)&&& '声明函数名称,具有两个可选参数&&& Application.Volatile&&& '声明为易失性函数&&& If dates = 0 Then dates = Date&&& '如果忽略第一参数,则以当日计算'如果仅仅一个参数,则第参数在1到4之间,则将参数值赋与第二参数,而将当前日期赋与第一参数&&& If dates & 5 And dates & 1 Then style = dates: dates = Date&&& Select Case style&&& '根据第二参数值选择星期的格式&&& Case 1&&& '第二参数为1&&&&&&& 星期 = WorksheetFunction.Text(dates, "aaa")&&& '短写中文&&& Case 2&&&&&&& 星期 = WorksheetFunction.Text(dates, "aaaa")&&& '长写中文&&& Case 3&&&&&&& 星期 = WorksheetFunction.Text(dates, "ddd")&&& '短写英文&&& Case 4&&&&&&& 星期 = WorksheetFunction.Text(dates, "dddd")&&& '长写英文&&& End SelectEnd Function--------------------------------------------------------------------------------------------Function Connect(ParamArray rng() As Variant)&&& '声明函数名称,有多个可选参数,包括1到255个&&& Dim cell As Range, celll As Range, i As Integer, cellv As Variant&&& '声明变量&&& Application.Volatile&&& '声明为易失性函数&&& Connect = ""&&& '将函数初始化'遍历参数所代码的对象集合(可能是字符串,可能是区域,也可能是数组)&&& For i = 0 To UBound(rng)&&&&&&& If Not IsMissing(rng(i)) Then&&& '如果有参数&&&&&&&&&&& Select Case TypeName(rng(i))&&& '根据参数的类型决定计算方式&&&&&&&&&&& Case "Range"&& '如果是单元格&&&&&&&&&&&&&&& '如果参数设置过大,仅仅对参数与已用区域的重叠部分进行计算&&&&&&&&&&&&&&& Set celll = Application.Intersect(rng(i), ActiveSheet.UsedRange)&&&&&&&&&&&&&&& For Each cell In celll& '遍历单元格区域&&&&&&&&&&&&&&&&&&& Connect = Connect & cell& '串连所有单元格字符&&&&&&&&&&&&&&& Next cell&&&&&&&&&&& Case "Variant()"& '如果是数组(包括内存数组)&&&&&&&&&&&&&&& For Each cellv In rng(i)& '遍历数组&&&&&&&&&&&&&&&&&&& '跳过False,将数组中其它元素串连&&&&&&&&&&&&&&&&&&& If cellv && False Then Connect = Connect & cellv&&&&&&&&&&&&&&& Next cellv&&&&&&&&&&& Case Else& '否则&&&&&&&&&&&&&&& Connect = Connect & rng(i)& '直接连接(指直接在参数中输入的字符串)&&&&&&&&&&& End Select&&&&&&& End If&&& Next iEnd FunctionFunction Functions(ParamArray rng() As Variant)& '声明函数名称,有多个可选参数,包括1到255个&&& Dim cell, Fun_count As Long, i As Byte, celll As Range&&& '声明变量&&& Application.Volatile&&& '声明为易失性函数&&& If UBound(rng) = -1 Then Functions = 0: Exit Function&&& '如果无参数则结果为0&&& For i = 0 To UBound(rng)&& '遍历每个参数&&&&&&& If Not IsMissing(rng(i)) Then&&& '如果有参数&&&&&&&&&&& Set celll = Application.Intersect(rng(i), ActiveSheet.UsedRange)&&&&&&&&&&& For Each cell In celll&&& '遍历区域中每个元素&&&&&&&&&&&&&&& If cell.HasFormula Then Fun_tion = Fun_tion + 1&&& '如果有公式则累加变量&&&&&&&&&&& Next cell&&&&&&& End If&&& Next i&&& Functions = Fun_tion&&& '统计结果End FunctionFunction AverageIfcol(条件区 As Range, 颜色单元格 As Range, Optional 统计区)&&& '声明函数名称,有三个参数,第三个是可选参数&&& Dim i As Integer, counts As Integer, rng As Range, sum As Double& '声明变量&&& Application.Volatile&&& '声明为易失性函数&&& If IsMissing(统计区) Then Set rng = 条件区& '如果第三参数被忽略,则将条区赋与rng变量'如果未被忽略,那么以统计区第一个单元格为基准,向下扩充到条件区同等大于的区域赋与变量Rng&&& If Not IsMissing(统计区) Then Set rng = 统计区(1).Resize(条件区.Rows.Count, 条件区.Columns.Count)&&& For i = 1 To 条件区.Count&&& '遍历条件区&&&&&&& '如果条件区中某个单元格背景色与颜色单元格区域(参照区)颜色一致,那么&&&&&&& If 条件区(i).Interior.Color = 颜色单元格(1).Interior.Color Then&&&&&&&&&&& sum = sum + rng(i).Value& '累加符合条件的数据&&&&&&&&&&& counts = counts + 1& '统计符合条件的个数&&&&&&& End If&&& Next i&&& AverageIfcol = sum / counts& '最后结果等于总和除以个数End Function----------------------------------------------------------------------------------------------'声明函数名称,有三个参数,第三个是可选参数,函数的结果是数组Function VlookupCol(查找值 As Range, 查找区域 As Range, Optional 列数 As Byte = 2) As Variant&&& Dim Col As Long, cell As Range, arr(), i As Byte '声明变量&&& Application.Volatile&&& '声明为易失性函数&&& Col = 查找值.Interior.Color& '获取参照单元格的背景色&&& '遍历查找区域的最左边一列&&& For Each cell In 查找区域(1).Resize(查找区域.Rows.Count, 1)&&&&&&& If cell.Interior.Color = Col Then& '如果与参照颜色一致&&&&&&&&&&& i = i + 1& '累加变量&&&&&&&&&& ReDim Preserve arr(1 To i)& '重新声明数据大小,且保持数组原数据&&&&&&&&&&&&& arr(i) = cell.Offset(0, 列数 - 1)& '将找到的单元格右边对应的数值赋与数组&&&&&&& End If&&& Next cell&VlookupCol = WorksheetFunction.Transpose(arr)& '将数组的结果赋与函数End Function-----------------------------------------------------------------------------------------------Function SFZ(cell As Range, Optional Options As String = "XB") As String '提取性别&&& Application.Volatile&&& Dim temp As String&&& If cell = "" Then SFZ = "": Exit Function&&& If Len(cell.Text) && 15 And Len(cell.Text) && 18 Then SFZ = "": Exit Function&&& If Options = "" Or (UCase(Options) && "NL" And UCase(Options) && "SR" And UCase(Options) && "XB") Then SFZ = "": Exit Function&&& If UCase(Options) = "XB" Then SFZ = VBA.IIf((Mid(cell.Text, 15, 3) Mod 2), "男", "女"): Exit Function&&& If Len(cell.Text) = 15 And Mid(cell.Text, 7, 1) = 0 Then SFZ = "20" & Mid(cell.Text, 7, 2) & "-" & Mid(cell.Text, 9, 2) & "-" & Mid(cell.Text, 11, 2)&&& If Len(cell.Text) = 15 And Mid(cell.Text, 7, 1) & 0 Then SFZ = "19" & Mid(cell.Text, 7, 2) & "-" & Mid(cell.Text, 9, 2) & "-" & Mid(cell.Text, 11, 2)&&& If Len(cell.Text) = 18 Then SFZ = Mid(cell.Text, 7, 4) & "-" & Mid(cell.Text, 11, 2) & "-" & Mid(cell.Text, 13, 2)&&& If UCase(Options) = "NL" Then&&&&&&& Dim dat As Date&&&&&&& dat = DateSerial(VBA.Split(SFZ, "-")(0), VBA.Split(SFZ, "-")(1), VBA.Split(SFZ, "-")(2))&&&&&&& SFZ = Application.Evaluate("DATEDIF(" & dat * 1 & ", NOW()," & """Y""" & ")")&&& End IfEnd FunctionSub 从身份证号码获取信息()&&& Dim rng As Range, i As Integer&&& Set rng = Application.InputBox("请选择区域:", "确定计算区域", IIf(TypeName(Selection) = "Range", Selection.Address(0, 0), ""), , , , , 8)&&& If rng.Columns.Count & 1 Then MsgBox "不能选择一列以上", 64, "出错提示": Exit Sub&&& If rng(1) = "" Then MsgBox "请选择身份证号码存放区域", 64, "出错提示": Exit Sub&&& Application.ScreenUpdating = False&&& For i = 1 To rng.Count&&&&&&& rng(i).Offset(0, 1) = SFZ(rng(i), "nl")&&&&&&& rng(i).Offset(0, 2) = SFZ(rng(i), "sr")&&&&&&& rng(i).Offset(0, 3) = SFZ(rng(i))&&& Next i&&& Application.ScreenUpdating = TrueEnd SubSub auto_Open()&&& On Error Resume Next&&& auto_close&&& With Application.CommandBars("cell").Controls.Add(msoControlButton, 1, , 3, True)&&&&&&& .Caption = "批量获取身份证信息(&P)"&&&&&&& .OnAction = "从身份证号码获取信息"&&&&&&& .Style = msoButtonIconAndCaption&&&&&&& .FaceId = 263&&& End WithEnd SubSub auto_close()&&& On Error Resume Next&&& Application.CommandBars("cell").Controls("批量获取身份证信息(P)").DeleteEnd Sub----------------------------------------------------------------------------------------------- *******VBA宏程序********'Like用法(输入小写字母限定宏)Private Sub TextBox1_Change()&&& If Len(TextBox1.Text) & 0 Then&&&&&&& If Right(TextBox1.Text, 1) Like "[a-z]" Then Exit Sub Else Me.TextBox1 = Left(TextBox1.Text, Len(TextBox1.Text) - 1)&&& End IfEnd Sub 'Private Sub TextBox1_Change()'&&& If Len(TextBox1.Text) & 0 Then'&&&&&&& If Right(TextBox1.Text, 1) Like "[4-8D-G]" Then Exit Sub Else Me.TextBox1 = Left(TextBox1.Text, Len(TextBox1.Text) - 1)'&&& End If'End Sub-------------------------------------------------------------------------------------------------Sub 姓名(name As String) '确认权限&&& Dim i As Byte, rng As Range&&& For i = 1 To Sheets.Count&&&&&&& If ThisWorkbook.Sheets(i).name = "许可人员列表" Then: GoTo OK&&& Next i&&& MsgBox "不存在“许可人员列表”", 64&&& Exit SubOK:&&& If Len(name) & 2 Or Len(name) & 4 Then MsgBox "长度只能2到4,请重新录入", 64: Exit Sub&&& Set rng = ThisWorkbook.Sheets("许可人员列表").Range("a1:a10").Find(name)&&& If rng Is Nothing Then MsgBox "你无操作权限" Else MsgBox "你具有操作权限"End SubSub 确认权限一() '手工指定姓名&&& Call 姓名(Application.InputBox("请输入您的姓名", "确认权限", "", , , , , 2))End SubSub 确认权限二() '以当前表A1的值进行判断&&& Call 姓名(ActiveSheet.Range("A1"))End SubSub 确认权限三() '以OFFICE安装用户名进行判断&&& Call 姓名(Application.UserName)End Sub------------------------------------------------------------------------------------------------Sub 合并三个班成绩到总表()&&& Dim sht As Worksheet '声明变量&&& Sheets("汇总表").Select&&& For Each sht In Sheets& '遍历所有工作表&&&&&&& If sht.Name && ActiveSheet.Name Then& '如果sht的名字不等于当前表名字&&&&&&&&&& '如果工作表A列非空(本程序要求工作表的数据必须从A列开始存放)&&&&&&&&&&& If WorksheetFunction.CountA(sht.[a:a]) & 0 Then&&&&&&&&&&& '将工作表sht中A1到最后一个非空行之间的所有行复制到当前表的从上到下第一个空行&&&&&&&&&&&&&&& sht.[a1].Resize(sht.Cells(Rows.Count, 1).End(xlUp).Row, Columns.Count).Copy _&&&&&&&&&&&&&&& ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Offset(Len([a1]) & 0, 0)&&&&&&&&&&& End If &&&&&&& End If&&& Next sht& '复制下一个End Sub------------------------------------------------------------------------------------------------Sub 复制数据() '从Sheet2复制数据到当前工作表空白区域中&&& With Sheet2.UsedRange&&& 'With减少对象的引用次数'利用Offset取得当前表已用区域之后第一个空白单元格,配合Resize将区域重置为与Sheet2标题以外的数据一样大小'然后将两个相同大小的区域直接赋值即可。但在赋值时需要注意一个问题:Value不能省略&&&&&&& ActiveSheet.UsedRange.Cells(1, 1).Offset(ActiveSheet.UsedRange.Rows.Count).Resize(.Rows.Count - 2, .Columns.Count) = .Offset(2, 0).Resize(.Rows.Count - 2, .Columns.Count).Value&&& End With&&& ActiveSheet.UsedRange.Borders.LineStyle = xlContinuous&&& '对已用区域添加边框End Sub-------------------------------------------------------------------------------------------------Sub 隔一行插入N行()&&& Application.ScreenUpdating = False '关闭屏幕刷新&&& Dim i As Integer, Row_Count As Byte '声明变量&&& Row_Count = InputBox("隔行插入几行?", "确定行数", 1) '用户指定插行的行数&&& For i = 20 To 1 Step -1 '从最大值循环至第一行&&&&&&& Cells(i, 1).Resize(Row_Count * 1, 1).EntireRow.Insert Shift:=xlDown '插入行&&& Next i&&& [a1].Resize(Row_Count * 1, 1).EntireRow.Delete '删除第一行前插入的行&&& Application.ScreenUpdating = True '恢复屏幕更新End Sub--------------------------------------------------------------------------------------------------Sub 工作表减肥()&&& MsgBox "减肥前:" & ActiveSheet.UsedRange.Address&& '获取减肥前的已用区域地址&&& '清除多余的列&&& Dim Col_Count As Long&&& With ActiveSheet.UsedRange& '使用With简化对象引用&&&&&&& For Col_Count = .Columns.Count To 1 Step -1 '从已用区域最后一列开始,直到第一列&&&&&&&&&&& '如果循环中某单元格整列皆为空白&&&&&&&&&&& '(Resize方法的作用是使用For只在已用区域的第一行循环,忽略其它行,提升代码效率)&&&&&&&&&&& If WorksheetFunction.CountA(.Item(1).Resize(1, .Columns.Count)(Col_Count).EntireColumn) = 0 Then&&&&&&&&&&&&&&& '将该列删除&&&&&&&&&&&&&&& .Item(1).Resize(1, .Columns.Count)(Col_Count).EntireColumn.Delete&&&&&&&&&&& Else '否则&&&&&&&&&&&&&&& Exit For '只要该列有一个数据则退出循环,避免删除必要的空列&&&&&&&&&&& End If&&&&&&& Next&&& End With&&&& '清除多余的行&&& Dim Row_Count As Long&&& With ActiveSheet.UsedRange& '使用With简化对象引用&&&&&&& For Row_Count = .Rows.Count To 1 Step -1 '从已用区域最后一行开始,直到第一行&&&&&&&&&&& '如果循环中某单元格整行皆为空白&&&&&&&&&&& '(Resize方法的作用是使用For只在已用区域的第一列循环,忽略其它列,提升代码效率)&&&&&&&&&&& If WorksheetFunction.CountA(.Item(1).Resize(.Rows.Count, 1)(Row_Count).EntireRow) = 0 Then&&&&&&&&&&&&&&& '将该列删除&&&&&&&&&&&&&&& .Item(1).Resize(.Rows.Count, 1)(Row_Count).EntireRow.Delete&&&&&&&&&&& Else '否则&&&&&&&&&&&&&&& Exit For '只要该列有一个数据则退出循环,避免删除必要的空列&&&&&&&&&&& End If&&&&&&& Next&&& End Withendd:&&& MsgBox "减肥后:" & ActiveSheet.UsedRange.Address& '报告减肥后的已用区域地址End Sub------------------------------------------------------------------------------------------------Sub 数据交换()&&& Dim rng As Range, adds As String, i As Byte, j As Byte, rngg&&& '获取所有姓名所在地址&&& For Each rng In ActiveSheet.UsedRange.Item(1).Resize(1, ActiveSheet.UsedRange.Columns.Count)&&&&&&& If rng = "姓名" Then adds = adds & rng.Address(0, 0) & ","&&& Next rng&&& With Range(Left(adds, Len(adds) - 1))&&&&&&& '统计组别个数&&&&&&& j = .Areas.Count&&&&&&& '将最后一个区域的值存入内存中&&&&&&& rngg = .Areas(1).CurrentRegion&&&&&&& For i = 1 To j - 1&&& '遍历最后一个区或以外的所有区域&&&&&&&&&&& '将下一个区域的值赋于当于区域&&&&&&&&&&& .Areas(i).CurrentRegion = .Areas(i + 1).CurrentRegion.Value&&&&&&& Next i&&&&&&& .Areas(j).CurrentRegion = rngg&&& '再将内存中的值赋于最后一个区域&&& End WithEnd Sub-------------------------------------------------------------------------------------------------Sub 数据交换() 'Offset应用&&& Dim rng As Range, adds As String, i As Byte, j As Byte, rngg&&& '获取所有姓名所在地址&&& For Each rng In ActiveSheet.UsedRange.Resize(1, ActiveSheet.UsedRange.Columns.Count)&&&&&&& If Len(rng) & 0 Then adds = adds & rng.Address(0, 0) & ","&&& Next rng&&& With Range(Left(adds, Len(adds) - 1))&&&&&&& '统计组别个数&&&&&&& j = .Areas.Count&&&&&&& '将最后一个区域的值存入内存中,Offset的作用是向下偏移一行,从而避免移动标题&&&&&&& rngg = .Areas(1).CurrentRegion.Offset(1)&&&&&&& For i = 1 To j - 1&&& '遍历最后一个区或以外的所有区域&&&&&&&&&&& '将下一个区域的值赋于当于区域&&&&&&&&&&& .Areas(i).CurrentRegion.Offset(1) = .Areas(i + 1).CurrentRegion.Offset(1).Value&&&&&&& Next i&&&&&&& .Areas(j).CurrentRegion.Offset(1) = rngg&& '再将内存中的值赋于最后一个区域&&& End WithEnd Sub-------------------------------------------------------------------------------------------------Sub 数据交换()&&& Dim rng As Range, adds As String, i As Byte, j As Byte, rngg&&& '获取所有姓名所在地址&&& For Each rng In ActiveSheet.UsedRange.Item(1).Resize(1, ActiveSheet.UsedRange.Columns.Count)&&&&&&& If rng = "姓名" Then adds = adds & rng.Address(0, 0) & ","&&& Next rng&&& With Range(Left(adds, Len(adds) - 1))&&&&&&& '统计组别个数&&&&&&& j = .Areas.Count&&&&&&& '将最后一个区域的值存入内存中&&&&&&& rngg = .Areas(1).CurrentRegion&&&&&&& For i = 1 To j - 1&&& '遍历最后一个区或以外的所有区域&&&&&&&&&&& '将下一个区域的值赋于当于区域&&&&&&&&&&& .Areas(i).CurrentRegion = .Areas(i + 1).CurrentRegion.Value&&&&&&& Next i&&&&&&& .Areas(j).CurrentRegion = rngg&&& '再将内存中的值赋于最后一个区域&&& End WithEnd Sub-------------------------------------------------------------------------------------------------Sub 行列自动合计()&&& '先汇总各行的值&&& For i = 1 To Selection.Rows.Count& '从1到总行数&&& '利用Offset取得汇总数据的放置位置,即选区第一个单元格向右偏移选区的列数&&& '合计区域也用Offset逐行偏量来获取,Resize的作用是重置为1行,否则会汇总其它行的数据&&& Selection(1).Offset(i - 1, Selection.Columns.Count) = WorksheetFunction.Sum(Selection.Offset(i - 1).Resize(1))&&& Next&&& '再汇总各列的值&&& For i = 1 To Selection.Columns.Count + 1 '从1到总列数加1,因为需要对行的汇总数再进行汇总&&& Selection(1).Offset(Selection.Rows.Count, i - 1) = WorksheetFunction.Sum(Selection.Offset(, i - 1).Resize(, 1))&&& NextEnd Sub-------------------------------------------------------------------------------------------------********自动宏*********Option Explicit'声明工作表事件Private Sub Worksheet_Change(ByVal Target As Range)&&& '如果只在一个单元格中编辑数据就执行事件过程&&& If Target.Count = 1 Then&&&&&& '使用Cells参数Columns.Count是为了兼容Excel 2003,Target.Row + 1则表示下一行&&&&&&& With Cells(Target.Row + 1, Columns.Count).End(xlToLeft)&&&&&&&&&&& '自动选择下一行第一个非空单元格&&&&&&&&&&& .Offset(0, -(Len(.Text) & 0)).Select&&&&&&& End With&&& End IfEnd Sub--------------------------------------------------------------------------------------------------Sub 批量打开文件()&&& Dim fd As FileDialog, Item As Integer&&& '弹出一个浏览文件的窗口,可以多选目标文件&&& Set fd = Application.FileDialog(msoFileDialogFilePicker)&&& '如果选择了文件&&& If fd.Show = -1 Then&&&&&&& '遍历所有文件&&&&&&& For Item = 1 To fd.SelectedItems.Count&&&&&&& '逐个打开文件&&&&&&&& Workbooks.Open (fd.SelectedItems(Item))&&&&&&& Next Item&&& End IfEnd Sub--------------------------------------------------------------------------------------------------Public WithEvents app As Application& '声明可触发事件的对象变量Private Sub app_NewWorkbook(ByVal Wb As Workbook)& '声明应用程序事件&&& Dim i As Byte&&& Wb.Sheets.Add , , 7 - Sheets.Count& '创建4个工作表(默认有3个)&&& Wb.Sheets(1).Name = "总表"& '将第一个命名为总表&&& For i = 2 To Wb.Sheets.Count& '从第二开始 直到最后一个&&&&&&& Wb.Sheets(i).Name = "分表" & i - 1& '改名为“分表”加编号&&& NextEnd Sub--------------------------------------------------------------------------------------------------Private Sub Workbook_BeforePrint(Cancel As Boolean)&&& With ActiveSheet.PageSetup& '设置页面&&&&&&& .LeftHeader = "&D"&& '页眉左边插入日期&&&&&&& .CenterHeader = ""&& '中间空白&&&&&&& .RightHeader = "第&P页总&N页" '右边显示页数&&& End WithEnd SubPrivate Sub Workbook_NewSheet(ByVal Sh As Object)&&& With ActiveSheet.PageSetup& '设置页面&&&&&&& .LeftHeader = "&D"&& '页眉左边插入日期&&&&&&& .CenterHeader = ""&& '中间空白&&&&&&& .RightHeader = "第&P页总&N页" '右边显示页数&&& End WithEnd Sub-------------------------------------------------------------------------------------------------Sub 获取CD磁盘空间()MsgBox "C盘:" & String(6, " ") & (CreateObject("SCRIPTING.FILESYSTEMOBJECT").GETDRIVE("C:").TOTALSIZE / 1024) & "MB" & Chr(10) & "D盘:" & String(6, " ") & (CreateObject("SCRIPTING.FILESYSTEMOBJECT").GETDRIVE("D:").TOTALSIZE / 1024) & "MB" & Chr(10) & "E盘:" & String(6, " ") & (CreateObject("SCRIPTING.FILESYSTEMOBJECT").GETDRIVE("E:").TOTALSIZE / 1024) & "MB" & Chr(10) & "F盘:" & String(6, " ") & (CreateObject("SCRIPTING.FILESYSTEMOBJECT").GETDRIVE("F:").TOTALSIZE / 1024) & "MB" & Chr(10)End Sub-------------------------------------------------------------------------------------------------
& ——实习阶段的感触 &&&&&&&& 西南大学数学与统计学院2007级学生 &&&&&&&& & 愿你记得来过,记得我们一起度过的短短的岁月。 愿你记得痛过,记得分别时我的不舍与无奈。 愿你记得听过,一个从我到你,爱的轨迹画下的故事 & &&&&6月四号,实习宣告彻底终结。原本以为在结束的那一刻,自己会很释然,很解脱,可今天,心却好像被抽空了一般,很失落,很伤感。那样规律充实快乐的日子,是真的一去不复返了&。不知道是我自己太过敏感还是一直以来都太擅长记忆,明明是回归以前的生活,竟怎么会有这样多的不习惯?! &&&&无法否认,实习是一段很特殊很难得的时光,虽然忙碌,虽然辛苦,但毕竟,三个月的付出和努力让我多少对那些孩子有了些许的牵挂和不舍。尽管一开始就知道注定不能长久,我依然选择了无悔的付出。明天过后,挥一挥手,我们的生活,一如两条平行的铁轨,一直向前,却终不再会交汇。那些过去的日子,像明媚的春天里吹过的暖暖的风,过了,也就不会再有了。 想起那天知道回来的确切期限,短暂的狂喜之后,竟是长久的失落和不舍。晚上守自习时,一个人静静的站在讲台上,看着那群小孩子,想起三个月和他们一起经历的点点滴滴,那些欢笑,那些感动,那些共同的努力,甚至那些狠不下心发的小脾气,也不由自主想起他们的好,他们的恶作剧,还有他们的鼓励和关心,心里便开始难受,突然就觉得很不舍。从不曾奢望过实习之后他们会给我留下那么多的美好的记忆,毕竟都只是各自生命中的过客,繁华热闹褪尽之后,终归要回到各自的人生轨道上的。记起第一次站在讲台上守自习的情景,那时,还是新鲜劲没过吧,或许心里有几丝的畏惧,总是忍不住要发笑,而今天,竟难过的想哭。从第一排,挨个默念着他们的名字,努力记清楚他们的笑容和他们为梦想打拼的认真,我想把这一切永远的定格下来。但我也很怕,怕不经意,就会轻易忘记,毕竟,还没有什么东西是强大到能抵过时间的。 三个月,在我们不经意的说笑,早出晚归,争先恐后努力地瞬间,日子就悄悄溜走了,总是在不断回忆着那些曾经共同拥有的美好时光,那些熟悉的画面,在脑海里面不停地回放着。十三班的孩子很可爱,很善良很单纯,他们有各自的闪光点,虽然目前暂时成绩还不太好,但他们还是在努力,在奋斗,在为实现自己的梦想一点一点积蓄能量。想起刚来他们第一次羞涩地叫老师时自己因不习惯回应的矜持而诧异的微笑;想起第一次给他们上课的胆怯羞涩不自信;想起那次向他们发脾气时他们眼里掠过的委屈和歉意;想起看到作业本上一句句鼓励的话语他们脸上的惊喜和孩子般傻傻的笑;想起每次发作业后他们争着比较谁的GOOD多时的面红耳赤;想起他们鼓足勇气和我说第一句话时的羞涩腼腆;想起留言簿上他们感恩鼓励的话,想起他们的种种好,终究还是感动欣慰的。 也许我真的不是一个很合格的班主任,因为除了每天例行公事般的查勤和守自习辅导他们的学习外,我为他们做的并不算多,我很少找他们谈心,聊一聊和学习无关的事情,比如我常跟他们提到的梦想和自信,比如他们的课余爱好,比如他们无法解决的困惑心事,毫不夸张的说,我甚至都没有很用心很花心思的去深入了解过他们。看着他们像个无头苍蝇一样在人生的轨迹上乱闯,没有方向,没有激情;我有些着急,很想帮帮他们,因为似曾相似的人生经历让我这个比他们大不了几岁的老师忍不住要“倚老卖老”,我不希望他们走太多弯路,毕竟,那样的路必然会承担太多的代价,更何况,年少轻狂的青春,谁都输不起的。事实上,自诩理性的自己都常撞过南墙才知道回头,又何况是他们,一群还只有十六七岁的小孩子?每天不厌其烦的在作业本上写着各种评语,只是希望能带给迷茫灰心的他们些许的鼓励和帮助,让他们拥有继续战斗的勇气和信心。记得刚去时给过他们承诺,“会认真努力真心待他们”,而如今,该离开了,自己究竟做的好不好,他们该比我更清楚吧! &&&时常问自己,离开之后他们会怎样?他们会如现在的我一般,也会不习惯,也会留恋吗?其实我懂,这个世界不管缺了哪一个,太阳依旧会东升西落,地球自西向东照样转。即便面临分别他们也会有不舍和难过,但短暂的伤感过后,他们终会回到原有的人生轨道上,快乐而充实。他们的生活,依然继续;他们的青春,同样精彩绝伦…… 有时候觉得很幸运,因为和那群孩子的际遇是在他们正渴望着拥有一个美丽的梦的花季,那样的青春,热闹而炫目,充满着太多的激情和生命力,太让人羡慕了。我愿意不惜一切代价,用自己的努力来鼓励和支持他们,让他们对未来有美好的憧憬,让他们敢于追寻自己的梦想并能认真付诸实践,让他们有理由相信只要肯坚持,奇迹是存在的;并教与他们感激生活恩赐的一切。我曾多么自私的奢望,能在他们的青葱岁月里留下一丝丝的痕迹该有多好。这些日子的种种,我是多么希望能用笔把它清晰地记录下来,可此刻,却终究再写不出任何纪念的文字。 影像流年,斑斑驳驳,一路走来,雕刻着记忆的繁华,唯有幽栏独倚,聆听着夜风清清,捻思念为弦,拥月色成韵,让回忆勾勒出涟漪层层,那曾经的一切,那一张张熟悉的面孔,便会浮上心头,那时,一丝会心的浅笑也足矣。我可爱的学生们,感谢三个月的陪伴支持和认可,那些温暖的瞬间,就留着以后慢慢回味了。愿以后的日子里,你们一切安好。
1、多条件计算人数=SUMPRODUCT((I241:I250="是")*1) 公式说明:SUMPRODUCT函数的功能是在给定的几组数组中,将数组间对应的参数相乘,并返回乘积之和。如果只有一组,则直接返回该数组之和。本例SUMPRODUCT函数就只有一个数组参数I241:I250,返回其中等于"是"的个数。 使用注意:1、SUMPRODUCT函数的参数可以是1至255个数组参数。如果只有一个参数,则返回该数组参数之和,如果有多组参数,则将所有数组对应的值相乘再将乘积汇总。所以SUMPRODUCT函数其实也就是多条件求和。2、SUMPRODUCT函数如果有多个数组参数,各数组的大小必须相等,例如第一参数是I241:I250,第二参数就不能是I241:I249等。3、如果SUMPRODUCT函数的参数中有非数值型数据,函数在计算时将非数值型的数组元素作为0处理。4、SUMPRODUCT函数的参数中如果有逻辑值TRUE或者FALSE,也都当做0处理。通常使用"*1"或者"--"将之转换成数值,然后再计算。 2、求指定年龄、性别人数=SUMPRODUCT((H252:H260="男")*1,(I252:I260&25)*1) 公式说明:本例公式中SUMPRODUCT函数有两个数组参数,都是需要进行运算的比较表达式。表达式运算结果是包含TRUE和FALSE的数组,为了让数组中的TRUE能转换为1,FALSE能转换成0参与运算,分别对两个数组"*1"。最后将两个数组中的对应元素分别相乘,并将乘积的结果累加,得到符合条件的人数总和。 使用注意:1、SUMPRODUCT函数进行的运算是数组运算,在输入公式时不需要利用【Ctrl+Shift+Enter】组合键输入数组,但是它的运算结果完全等同于数组公式。2、对于本例的需求,也可以用SUM函数的数组公式来完成:{=SUM((H252:H260="男")*(I252:I260&25))}。用SUM函数的数组形式替换SUMPRODUCT函数的普通公式,优点是公式更短,缺点是每次编辑后必须以【Ctrl+Shift+Enter】组合键结束,如果无意中双击了单元格再按【Enter】键结束,那么公式将产生错误的运算结果。3、本例的公式也可以修改为一个参数,使公式进行简化:=SUMPRODUCT((H252:H260="男")*(I252:I260&25))。这种形式对两个包含逻辑值的数组相乘,本身就将逻辑值转换为数值了,所以不再需要"*1"。 3、汇总一班人员获奖次数=SUMPRODUCT((H265:H274="一班")*I265:I274) 公式说明:本公式中SUMPRODUCT函数有两个数组参数:"H265:H274="一班""和"I265:I274"。根据本函数的特点,可以将两个数组通过乘号连接成一个参数,从而不管两个数组由数值组成还是由逻辑值组成,都可以不需要转换而直接得到运算结果。 使用注意:1、本例中也可以将两个数组分成两个参数,但第一参数需要利用"*1"或者其他方式将逻辑值转换成数值:=SUMPRODUCT((H265:H274="一班")*1,I265:I274)=SUMPRODUCT(N(H265:H274="一班"),I265:I274)=SUMPRODUCT(--(H265:H274="一班"),I265:I274)2、如果用SUM函数来运算,必须以数组形式录入公式:{=SUM((H265:H274="一班")*I265:I274)}{=SUM(IF(H265:H274="一班",I265:I274))} 4、汇总一车间男性参保人数=SUMPRODUCT((G276:G284&H276:H284&I276:I284="一车间男是")*1) 公式说明:本公式中将G列、H列、I列的数据通过文本连接符"&"(等同函数CONCATENATE)连接,然后与设定的三个条件"一车间男是"进行比较,若相同就得到一个逻辑值TRUE,再用"*1"将逻辑值转换成数值,最后用SUMPRODUCT函数汇总数据。 使用注意:1、本例中公式思路只适用于所有条件中不存在"&"、"&"、"&&"、"&="、"&="运算符的条件,直接将所有数据串连起来,也将所有条件按同样顺序串连起来进行比较即可。比较的结果是一个由逻辑值组成的数组。2、本例公式也可以改用其他两种方式:=SUMPRODUCT((G276:G284="一车间")*(H276:H284="男")*(I276:I284="是"))和=SUMPRODUCT((G276:G284="一车间")*1,(H276:H284="男")*1,(I276:I284="是")*1)。3、如果计算二车间和三车间女性参保人数,可以采用以下公式:=SUMPRODUCT((G276:G284&&"一车间")*(H276:H284&I276:I284="女是"))。本公式对车间名称使用不等于号来排除一车间,相比罗列两个车间名称会简洁一些。 5、汇总所有车间人员工资=SUMPRODUCT(--NOT(ISERROR(FIND("车间",G286:G294))),I286:I294) 公式说明:鉴于SUMPRODUCT函数的参数不支持通配符,故本公式首先利用FIND函数在G286:G294区域中查找"车间"二字,如果找到则运算结果为一个数字,表示"车间"在该单元格中的出现位数;如果找不到将产生一个错误值。然后利用NOT(ISERROR())函数嵌套来判断哪些单元格中包括"车间"二字,得到一个由TRUE和FALSE组成的数组,再用"--"将这组逻辑值转换成数值,最后与I286:I294区域对应的数据相乘并汇总。 使用注意:1、在不支持通配符的所有函数中,都可以利用NOT(ISERROR(FIND()))的嵌套组合来实现通配符类似的功能。在本例中相当于"*车间*",如果部门名称是"*车间"形式则可以改用以下公式:=SUMPRODUCT(--(RIGHT(G286:G294,2)="车间"),I286:I294)。2、根据本例的特点,也可以用ISNUMBER函数来代替NOT(ISERROR())组合,公式如下:=SUMPRODUCT(--(ISUMBER(FIND("车间",G286:G294))),I286:I294) &6、汇总业务员业绩=SUMPRODUCT((H296:H305={"江西","广东"})*(I296:I305="男")*J296:J305) 公式说明:SUMPRODUCT函数的参数支持二维数组,这使它不仅可以汇总同时满足多个条件的数据,还可以不借助其他函数的嵌套就可以达到在多条件中符合条件之一,即求和的需要。在本公式中,参数"{"江西","广东"}"可以使SUMPRODUCT函数统计两个省区的数据,这比SUMIF函数需要外套SUM函数简单些。 使用注意:1、本例公式也可以不使用数组,改用"+"连接两个条件,公式如下:=SUMPRODUCT(((H296:H305="江西")+(H296:H305="广东"))*(I296:I305="男")*J296:J305)。2、公式中“+”连接的条件表示满足任意条件就求和,而“*”连接的条件则表示同时满足所有条件才求和。
1、数组求和:{=SUM((G12:G21&100)*G12:G21)} [公式说明]:本公式为数组公式,可以对G12:G21区域中大于100的数据进行求和,而排除小于等于100的数据。输入公式时必须按【Ctrl+Shift+Enter】组合键结束,否则无法得到正确结果。 [使用注意]:1、公式中"G12:G21&100"部分表示求和条件,后跟实际求和区域"G12:G21"。如果有多个条件,可一并罗列出来。例如求大于100且小于115的数据之和,公式如下:=SUM(G12:G21&100)*(G12:G21&115)*G12:G21)。2、此数组公式只适用于单个区域求和,如果有多个区域,只能用多个SUM求和,然后相加。例如对G12:G21和H12:H21区域中大于100的数汇总,公式如下:=SUM(SUM((G12:G21&100)*G12:G21),SUM((H12:H21&100)*H12:H21))。3、对于SUM函数的数组公式,可以用SUMPRODUCT函数来代替,从而将数组公式转换成普通公式。例如本案例的公式用SUMPRODUCT函数后,普通公式如下:=SUMPRODUCT((G12:G21&100)*G12:G21)。 2、数据类型转换求和:=SUM(VALUE(H5),H6:H10,J5:J10,L5:L10);=SUM(--(H5),H6:H10,J5:J10,L5:L10);=SUM((H5)*1,H6:H10,J5:J10,L5:L10);=SUM((H5)/1,H6:H10,J5:J10,L5:L10) [公式说明]:SUM函数用于对单元格区域的数据或者逻辑值、表达式进行求和,它有1-255个参数。鉴于本题的特殊性,公式也可以改为"=SUM(区域1)",函数会忽略区域中的文本。 [使用注意]:1、SUM函数有1-255个参数。参数可以是区域,也可以是表达式。如:=SUM(G5,10*25,G6*8)。2、如果是文本型数字参数,SUM函数是可以直接求和的;如果是引用单元格中的文本型数字(单元格的数字前添加半角单引号“'”),则求和时将忽略。例如G5的值是“'95”,那么以下公式的结果大不同。=SUM(10,"95")—结果为105,=SUM(10,G5)—结果为10。3、如果一定要对单元格中文本型数字进行求和,可以将它转换成数值。转换方法包括多种:利用VALUE函数转换、利用"--"转换和"*1"、"/1"方式转换。例如:=SUM(10,VALUE(G5))、=SUM(10,--(G5))、=SUM(10,(G5)*1) 3、多条件求和1:{=SUM(((G23:G32&100)+(G23:G32&110))*G23:G32)} [公式说明]:对于两个范围求和,即满足两个条件中任意一个条件都进行求和,这和同时满足两个条件才求和的公式思路不同。"案例2"的使用注意"中已提到,多个条件同时满足才求和需要用"*"连接所有条件,表示同时满足多条件,而本案例中对多个条件用"+"来连接,表示对于多条例中满足任意一个条件就可以进行求和。本公式为数组公式。 [使用注意]:1、多条件满足任意条件即求和,在设置公式时对于所有条件需要用"+"连接,如本例中"(G23:G32&100)+(G23:G32&110)",然后对条件用括号括起来再与实际求和区相乘。如果缺少条件的外括号将得到错误结果。2、如果不只两个条件,也用同样方式将所有条件罗列出来并相加。例如求区域中小于100或者等于120的数据和,那么数组公式如下:=SUM(((G23:G32&100)+(G23:G32=110)+(G23:G32=120))*G23:G32) 4、多条件求和2:{=SUM((H34:H43="一车间")*(I34:I43="男")*J34:J43)} [公式说明]:本公式以H、I两列数据作为限制条件,对J列数据汇总。“(H34:H43="一车间")*(I34:I43="男")”表示同时满足两个条件,如果还有更多条件,也可以同时罗列出来,利用“*”符号连接,然后再与求和区相乘,得到最后的汇总结果。 [使用注意]:1、前三个案例是以求和数据自身为条件对目标区域进行求和,本案例以不同的区域作为限制,条件区有两个,对第三区域进行求和。在设置公式时,三个区域的单元格个数必须一致。例如以下公式将产生错误结果:=SUM((H34:H43="一车间")*(I34:I44="男")*J34:J43)、=SUM((H34:H43="一车间")*(I35:I44="男")*J34:J43)。2、多条件求和时,条件录用区域与求和区域可以在不同列,三个区域只需要宽度、高度一致即可。它们所在的列可以不同,起止行也可以不同,甚至三个区域可以分别位于不同的工作表中,仍然可以得到需要的结果。例如条件区在Sheet2工作表,求和区在当前工作表,公式可以修改为:=SUM((Sheet2!H34:H43="一车间")*(Sheet2!I34:I43="男")*J34:J43)。3、本公式可以用另一种简化写法,仍然可以返回正确结果:=SUM((H34:H43&I34:I43="一车间男")*J34:J43) 5、多工作表求和时表名称快捷输入:=SUM(附表一:附表五!B3:B10) [公式说明]:对多表相同区域求和,不需要录入每个工作表的求和地址,只需将第一个工作表名和最后一个表名用冒号连接,后跟"!"与单元格地址,以此作为SUM函数的参数即可。其中"!"表示前面的字符为工作表名称。 [使用注意]:1、本方法仅适用于每个工作表地址一致的情况,否则只能逐个输入地址再求和。2、多表求和,SUM函数的参数,工作表与单元格地址可以手动输入,也可以通过选择工作表中单元格地址来产生引用。具体步骤如下:输入"=SUM(",然后选择待汇总的第一个工作表B3:B10区域,按住【Shift】键再单击工作表标签中待求和的最后一个工作表名,最后按【Enter】键结果结束即可。3、如果工作表名中包含一些特殊字符,例如"!"、"@",公式中的工作表名需要用单引号括起来,例如:=SUM('A组:!E组'!B3:B10) 6、快速设置当前表以外的所有工作表相同区域的总和公式:=SUM('*'!B3) [公式说明]1、公式中两个单引号中间加"*"表示除当前表以外的所有工作表。2、在输入公式后,程序会自动将"'*'"转换成实际的工作表名。当按下【Enter】键后,公式将变成:=SUM(附表一:附表五!B3) [使用注意]1、"'*'"只能手动输入,而不能用鼠标选择工作表来产生引用。2、公式中B3必须使用相对引用。3、本公式用法和"案例7"是不同的。在本例中虽然也可以用"案例7"的方法按住【Shift】键来选择需要求和的工作表产生引用,但是操作烦琐,特别是总表不在最后或者最前面,而是在待求和的工作表中间时,用"案例7"的方法需要选择五次,而本例公式中的"*"可以自动的找到排除当前表之外的所有工作表数据。也就是说"总表"不管在任何位置,都可以用同样的公式完成求和,而不需手动修改。4、公式中"*"左右的单引号必须是半角符号。 7、用SUM函数计数:{=SUM((H94:H102="男")*(I94:I102="汉"))} [公式说明]:SUM函数虽然是求和函数,在很多时候可以用来计数。本例中利用"H94:H101="男""这一表达式返回一串包含TRUE和FALSE的数组,最后用"*1"将逻辑值转换成数值,并用SUM函数汇总。 [使用注意]:1、表达式"H94:H101="男""得到的是包含逻辑值的数组。SUM函数可以对逻辑参数进行求和,但是包含于数组中的逻辑值值却会被忽略。例如以下公式:=SUM(TRUE,1)—结果为2,=SUM({TRUE,1})结果为1。但是通过"*1"将逻辑值转换成数值后就可以直接求和了。例如:=SUM({TRUE,1}*1)—结果为2。2、将逻辑值转换成数值,除了用"*1"之外,也可以改用"--"或者"/1"等手法,但是用VALUE函数却不行,它只能将文本型数字转换成数值。例如:=SUM(--({TRUE,1}))—结果等于2;=SUM(({TRUE,1})/1)—结果等于1;=SUM(VALUE({TRUE,1}))—结果为错误值,因为VALUE函数无法转换成TRUE。 8、求1累加到100之和:{=SUM(ROW(1:100))} [公式说明]:本公式利用ROW函数返回1到100的序列,然后用SUM函数将这个序列汇总得到1—100的合计。 [使用注意]:1、ROW函数只能产生1到1048576之间的自然数(Excel2003版本为65536),且不带小数。但是通过换算也可以完成其他序列的求和。例如1/1、1/2、1/3、1/4……1/99、1/100之和。可以用以下公式:=SUM(1/ROW(1:100))。如果是求1开1次方,2开2次方,3开3次方至100开100次方的总和,那么可以用以下数组公式:{=SUM(ROW(1:100)^(1/ROW(1:100)))}。如果是对1—100之间的奇数进行求和,可以用以下数组公式:{=SUM((ROW(1:50)*2-1))}。2、ROW(1:100)产生的结果是一个包含1到100之间的自然数数组。用SUM函数对这种数组求和时必须用数组公式,否则只能对数组中的第一个数值进行求和。如果将"ROW(1:100)"写成"{1,2,3,4}"这种形式的数组则可以按照普通公式处理。 9、多个工作表相同区域求前三名产量之和:{=SUM(LARGE(CHOOSE({1,2,3,4,5},附表一!B3:B10,附表二!B3:B10,附表三!B3:B10,附表四!B3:B10,附表五!B3:B10),ROW(1:3)))} [公式说明]:如以下公式:=SUM(LARGE(附表一:附表五!B3:B13,ROW(1:3)))。因为LARGE函数不支持多个工作表地址作为第一参数,即三维引用。所以本公式利用CHOOSE函数将三维引用转换成二维数组后,就可以作为LARGE函数的参数进行运算了。用LARGE函数提取前三最大值后再用SUM函数汇总。 [使用注意]:公式的常量数组"{1,2,3,4,5}"可以转换为"COLUMN(A:E)",而不用"ROW(1:5)"。因为"ROW(1:5)"等于"{1;2;3;4;5})。区别为一个是横向数组,一个是纵向数组。
最后登录加载中...
this.p={b:2,ua:-1, ub:'http://img.bimg.126.net/photo/OL9xUDxT70BmccGwDCyQTA==/597250.jpg',us:'他', friendstatus:'none',followstatus:'unFollow',hmcon:'',aShowT:'0',guideId:4};
积分 ${data.totalScore} 分,距离下一等级还有 ${data.nextGradeNeedScore}分
心情随笔列表加载中...
this.p={b:2,n:5,r:'http://excel-chenyan.blog.163.com/blog/#m=1&c=',mset:'000',mcon:'',srk:-100};
{if defined('fl')&&fl.length>0} {list fl as x}
${x.content|xescape:x.id,x.moveFrom} ${x.publishTime|xtime}
{if x.moveFrom&&x.moveFrom=='wap'} && {/if} {if x.moveFrom&&x.moveFrom=='mobile'} && {/if}
{/list} {else} 暂无心情随笔记录! {/if}
博友列表加载中...
this.p={b:2,m:0};
发现好博客
列表加载中...
this.p={b:2,cn:12,ct:12};
列表加载中...
this.p={b:2,cn:15};
我要留言 & &
& 留言列表加载中...
this.p={b:2,nv:false,cn:5,ct:5};
& & & & & &
网易公司版权所有&&
{list x.l as y}
{/list} {/list}
{if defined('wl')} {list wl as x}{/list} {/if}

我要回帖

更多关于 两个表格怎么才能连接 的文章

 

随机推荐