当前位置:文档之家› excel常用宏集合

excel常用宏集合

65:删除包含固定文本单元的行或列Sub 删除包含固定文本单元的行或列()DoCells.Find(what:="哈哈").ActivateSelection.EntireRow.Delete '删除行' Selection.EntireColumn.Delete '删除列Loop Until Cells.Find(what:="哈哈") Is NothingEnd Sub72:在指定颜色区域选择单元时添加/取消"√"(工作表代码)Private Sub Worksheet_SelectionChange(ByVal Target As Range)Dim myrg As RangeFor Each myrg In TargetIf myrg.Interior.ColorIndex = 37 Then myrg = IIf(myrg <> "√", "√", "") NextEnd Sub73:在指定区域选择单元时添加/取消"√"(工作表代码)Private Sub Worksheet_SelectionChange(ByVal Target As Range)Dim Rng As RangeIf Target.Count <= 15 ThenIf Not Application.Intersect(Target, Range("D6:D20")) Is Nothing Then For Each Rng In SelectionWith RngIf .Value = "" Then.Value = "√"Else.Value = ""End IfEnd WithNextEnd IfEnd IfEnd Sub74:双击指定单元,循环录入文本(工作表代码)Private Sub Worksheet_BeforeDoubleClick(ByVal T As Range, Cancel As Boolean)If T.Address <> "$A$1" Then Exit SubCancel = TrueT = IIf(T = "好", "中", IIf(T = "中", "差", "好"))End Sub75:双击指定单元,循环录入文本(工作表代码)Dim nums As BytePrivate Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)If Target.Address = "$A$1" Thennums = nums Mod 3 + 1Target = Mid("上中下", nums, 1)Target.Offset(1, 0).SelectEnd IfEnd Sub76:单元区域引用(工作表代码)Private Sub Worksheet_Activate()Sheet1.Range("A1:B3").Value = Sheet2.Range("A1:B3").ValueEnd Sub77:在指定区域选择单元时数值加1(工作表代码)Private Sub Worksheet_SelectionChange(ByVal Target As Range)If Not Application.Intersect([a1:e10], Target) Is Nothing ThenTarget = Val(Target) + 1End IfEnd Sub259个常用宏-excelhome(3)2009-08-15 14:12:5878:混合文本的编号Sub 混合文本的编号()Worksheets(1).Range("B2").Value = "" & (--(Mid(Worksheets(1).Range("B2"), 3, 100)) + 1)79:指定区域单元双击数据累加(工作表代码)Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) If Not Application.Intersect([A1:Y100], Target) Is Nothing Thenoldvalue = Val(Target.Value)inputvalue = InputBox("请输入数量,按ENTER键确认!", "数值累加器")Target.Value = oldvalue + inputvalueEnd IfEnd Sub80:选择单元区域触发事件(工作表代码)Private Sub Worksheet_SelectionChange(ByVal Target As Range)If Target.Address = "$A$1:$B$2" ThenMsgBox "你选择了$A$1:$B$2单元"End IfEnd Sub81:当修改指定单元容时自动执行宏(工作表代码)Private Sub Worksheet_Change(ByVal Target As Range)If Not Application.Intersect(Target, [B3:B4]) Is Nothing Then重排窗口End IfEnd Sub82:被指定单元容限制执行宏Sub 被指定单元限制执行宏()If Range("$A$1") = "关闭" Then Exit Sub窗口End Sub83:双击单元隐藏该行(工作表代码)Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) Rows(Target.Row).Hidden = True84:高亮显示行(工作表代码)Private Sub Worksheet_SelectionChange(ByVal Target As Range)Cells.Interior.ColorIndex = 2Rows("1:2").Interior.ColorIndex = 40 '保持1至2行的颜色推荐39,22,40,Rows(Target.Row).Interior.ColorIndex = 35 '高亮推荐颜色35,20,24,34,37,40,15 End Sub85:高亮显示行和列(工作表代码)Private Sub Worksheet_SelectionChange(ByVal Target As Range)Cells.Interior.ColorIndex = xlNoneRows(Target.Row).Interior.ColorIndex = 34Columns(Target.Column).Interior.ColorIndex = 34End Sub86:为指定工作表设置滚动围(工作簿代码)Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range) Sheet1.ScrollArea = "A1:M30"End Sub87:在指定单元记录打印和预览次数(工作簿代码)Private Sub Workbook_BeforePrint(Cancel As Boolean)Range("A1") = 1 + Range("A1")End Sub88:自动数字金额转大写(工作表代码)Private Sub Worksheet_Change(ByVal M As Range)On Error Resume Nexty = Int(Round(100 * Abs(M)) / 100)j = Round(100 * Abs(M) + 0.00001) - y * 100f = (j / 10 - Int(j / 10)) * 10A = IIf(y < 1, "", Application.Text(y, "[DBNum2]") & "元")b = IIf(j > 9.5, Application.Text(Int(j / 10), "[DBNum2]") & "角", IIf(y < 1, "", IIf(f > 1, "c = IIf(f < 1, "整", Application.Text(Round(f, 0), "[DBNum2]") & "分")M = IIf(Abs(M) < 0.005, "", IIf(M < 0, "负" & A & b & c, A & b & c))End Sub89:将所有工作表的A1单元作为单击按钮(工作簿代码)Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range) If Target.Address = "$A$1" ThenCall 宏名End IfEnd Sub90:闹钟——到指定时间执行宏(工作簿代码)Private Sub Workbook_Open()Application.OnTime ("11:45:00"), "提示1" '宏名字Application.OnTime ("12:00:00"), "提示2" '宏名字End Sub91:改变Excel界面标题的宏(工作簿代码)Private Sub Workbook_Open()Application.Caption = "春节快乐"End Sub92:在指定工作表的指定单元返回光标当前多选区地址(工作簿代码)Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range) Worksheets("表2").Range("A1") = Target.Address(0, 0)End Sub93:B列录入数据时在A列返回记录时间(工作表代码)Public Sub Worksheet_Change(ByVal Target As Range)If Target.Column = 2 ThenTarget.Offset(, -1) = NowEnd IfEnd Sub94:当指定区域修改时在其右侧的2个单元返回当前日期和时间(工作表代码)Public Sub Worksheet_Change(ByVal Target As Range)If Not Application.Intersect(Target, [A1:A1000]) Is Nothing ThenIf Target.Column = 1 ThenTarget.Offset(, 1) = DateTarget.Offset(, 2) = TimeEnd IfEnd IfEnd SubPublic Sub Worksheet_Change(ByVal Target As Range)If Not Application.Intersect(Target, [A1:A1000]) Is Nothing ThenIf Target.Column = 1 ThenTarget.Offset(, 1) = Format(Now(), "yyyy-mm-dd")Target.Offset(, 2) = Format(Now(), "h:mm:ss")End IfEnd IfEnd Sub95:指定单元显示光标位置容(工作表代码)Private Sub Worksheet_SelectionChange(ByVal T As Range)Sheets(1).Range("A1") = SelectionEnd Sub96:每编辑一个单元保存文件Private Sub Worksheet_Change(ByVal Target As Range)ThisWorkbook.SaveEnd Sub97:指定允许编辑区域Sub 指定允许编辑区域()ActiveSheet.ScrollArea = "B8:G15"End Sub98:解除允许编辑区域限制Sub 解除允许编辑区域限制()ActiveSheet.ScrollArea = ""End Sub99:删除指定行Sub 删除指定行()Workbooks("临时表").Sheets("表2").Range("5:5").DeleteEnd Sub100:删除A列为指定容的行Sub 删除A列为指定容的行()Dim a, b As Integera = Sheet1.[a65536].End(xlUp).RowFor b = a To 2 Step -1If Cells(b, 1).Value = "删除" ThenRows(b).DeleteEnd IfNextEnd Sub101:删除A列非数字单元行Sub 删除A列非数字单元行()i = [a65536].End(xlUp).RowRange("A1:A" & i).SpecialCells(xlCellTypeConstants, 2).EntireRow.Delete End Sub102:有条件删除当前行Sub 有条件删除当前行()If [A1] = 2 Or [B1] = "删除" ThenSelection.Delete Shift:=xlUpEnd IfEnd Sub103:选择下一行Sub 选择下一行()ActiveCell.Offset(1, 0).Rows("1:1").EntireRow.SelectEnd Sub104:选择第5行开始所有数据行Sub 选择第5行开始所有数据行A()Dim i%i = Cells.Find("*", SearchOrder:=xlByRows, LookIn:=xlValues, SearchDirection:=xlPrevious).EntireRow.RowRows("5:" & i).SelectEnd SubSub 选择第5行开始所有数据行B()Rows("5:" & Cells.Find("*", , , , 1, 2).Row).SelectEnd Sub105:选择光标或选区所在行Sub 选择光标或选区所在行()Selection.EntireRow.SelectEnd Sub106:选择光标或选区所在列Sub 选择光标或选区所在列()Selection.EntireColumn.SelectEnd Sub107:光标定位到名称指定位置Sub 定位()Application.Goto Range(Evaluate("名称"))End Sub108:选择名称定义的数据区Sub 选择名称定义的数据区()[数据区].Select '插入名称要使用INDIRECT函数'Range("数据区").Select 或者'Sheet1.Range("数据区").Select 或者End Sub109:选择到指定列的最后行Sub 选择到指定列的最后行()Range("C4:G" & [G65536].End(xlUp).Row).SelectEnd Sub110:将Sheet1的A列的非空值写到Sheet2的A列Sub 将Sheet1的A列的非空值写到Sheet2的A列()Sheet1.Columns("A:A").SpecialCells(2, 23).SpecialCells(12).Copy Sheet2.[A1] End Sub111:将名称1的数据写到名称2Sub Macro2()Range("位置2") = Range("位置1").ValueEnd Sub112:单元反选Sub 单元反选()Application.DisplayAlerts = FalseApplication.ScreenUpdating = FalseDim raddress As String, taddress As Stringraddress = Selection.Addresstaddress = edRange.AddressWith Sheets.Add.Range(taddress) = 0.Range(raddress) = "=0"raddress = .Range(taddress).SpecialCells(xlCellTypeConstants, 1).Address.DeleteEnd WithActiveSheet.Range(raddress).SelectApplication.ScreenUpdating = TrueEnd Sub113:调整选中对象中的文字Sub 调整选中对象中的文字()'文字居中:自动调整大小With Selection.HorizontalAlignment = xlCenter.VerticalAlignment = xlCenter.ReadingOrder = xlContext.Orientation = xlHorizontal.AutoSize = True.AddIndent = FalseEnd WithEnd Sub114:去除指定围的对象Sub 去除指定围的对象()Dim p As ShapeSet My = Worksheets("工作表名")For Each p In My.ShapesIf Not Application.Intersect(p.TopLeftCell, Range("围")) Is Nothing Then p.Delete NextEnd Sub115:更新透视表数据项Sub DeleteMissingItems2002All()'防止数据透视表中显示无用的数据项'在Excel 2002 或更高版本中'假如无用的数据项已经存在,'运行这个宏可以更新Dim pt As PivotTableDim ws As WorksheetFor Each ws In ActiveWorkbook.WorksheetsFor Each pt In ws.PivotTablespt.PivotCache.MissingItemsLimit = xlMissingItemsNoneNext ptNext wsEnd Sub116:将所有工作表名称写到A列Sub 将所有表名称写到A列()k = 1For Each Sht In SheetsCells(k + 1, 1) = '指定写入的行和列k = k + 1NextEnd Sub117:为当前选定的多单元插入指定名称Sub 为当前选定的多单元插入指定名称() = "临时"s.Add Name:="临时", RefersTo:=Selection '或者换用这行代码也可以End Sub118:删除所有名称Sub 删除所有名称()On Error Resume NextDim l As Integerl = s.CountFor i = l To 1 Step -1s(i).DeleteNextEnd Sub119:以指定区域为表目录补充新表Sub 以指定区域为表目录补充新表()Dim dic As Object, sh As WorksheetDim arr, itemarr = Range("B1:BB1")Set dic = CreateObject("scripting.dictionary")For Each sh In ThisWorkbook.Worksheetsdic.Add , ""NextFor Each item In arrIf item <> "" And Not dic.exists(Trim(item)) Then With ThisWorkbook.Worksheets.Add.Name = itemEnd WithEnd IfNextSet dic = NothingEnd Sub120:按A列数据批量修改表名称Sub 按A列数据批量修改表名称()Dim i%For i = 1 To Sheets.Count - 1Sheets(i).Name = Cells(i + 1, 1).TextNextEnd Sub121:按A列数据批量创建新表(控件按钮代码)Private Sub CommandButton1_Click()On Error Resume NextDim i%, j%For i = 1 To [a65536].End(xlUp).RowFor j = 2 To Sheets.CountIf Cells(i, 1) = Sheets(j).Name ThenExit ForEnd IfNextSheets.Add(after:=Sheets(Sheets.Count)).Name = Cells(i, 1) NextEnd Sub122:清除剪贴板Sub 清除剪贴板()Application.CutCopyMode = FalsemandBars("Task Pane").Visible = False End Sub123:批量清除软回车Sub 批量清除软回车()'也可直接使用Alt+10或13替换Cells.Replace What:=Chr(10), Replacement:="", LookAt:=xlPart, SearchOrder:= _ xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=FalseEnd Sub124:判断指定文件是否已经打开Sub 判断指定文件是否已经打开()Dim x As IntegerFor x = 1 To Workbooks.CountIf Workbooks(x).Name = "函数.xls" Then '文件名称MsgBox "文件已打开"Exit SubEnd IfNextMsgBox "文件未打开"End Sub125:当前文件另存到指定目录Sub 当前激活文件另存到指定目录()ActiveWorkbook.SaveAs Filename:="E:\信件\" & End Sub126:另存指定文件名Sub 另存指定文件名()ActiveWorkbook.SaveAs ThisWorkbook.Path & "\别名.xls"End Sub127:以本工作表名称另存文件到当前目录Sub 以本工作表名称另存文件到当前目录()ActiveWorkbook.SaveAs Filename:=ThisWorkbook.Path & "\" & & ".xls" End Sub128:将本工作表单独另存文件到Excel当前默认目录Sub 将本工作表单独另存文件到Excel当前默认目录()ActiveSheet.CopyActiveWorkbook.SaveAs Filename:= & ".xls"End Sub129:以活动工作表名称另存文件到Excel当前默认目录Sub 以活动工作表名称另存文件到Excel当前默认目录()ActiveWorkbook.SaveAs Filename:= & ".xls", FileFormat:= _ xlNormal, Password:="", WriteResPassword:="", ReadOnlyRecommended:=False _, CreateBackup:=FalseEnd Sub130:另存所有工作表为工作簿Sub 另存所有工作表为工作簿()Dim sht As WorksheetApplication.ScreenUpdating = Falseipath = ThisWorkbook.Path & "\"For Each sht In Sheetssht.CopyActiveWorkbook.SaveAs ipath & & ".xls" '(工作表名称为文件名)'ActiveWorkbook.SaveAs ipath & & Trim(sht.[d15]) & ".xls" '(文件名称& D15单元容)'ActiveWorkbook.SaveAs ipath & Trim(sht.[d15]) & ".xls" '(文件名称为D15单元容)ActiveWorkbook.CloseNextApplication.ScreenUpdating = TrueEnd Sub131:以指定单元容为新文件名另存文件Sub 以指定单元容为新文件名另存文件()ThisWorkbook.SaveAs Filename:=ThisWorkbook.Path & "\" & Sheet1.[A1]End Sub132:以当前日期为新文件名另存文件Sub 以当前日期为新文件名另存文件()ThisWorkbook.SaveAs ThisWorkbook.Path & "\" & Format(Now(), "yyyymmdd") & ".xls" End SubSub 以当前日期为名称另存文件()ActiveWorkbook.SaveAs Filename:=Date & ".xls"End Sub133:以当前日期和时间为新文件名另存文件Sub 以当前日期和时间为新文件名另存文件()ThisWorkbook.SaveAs ThisWorkbook.Path & "\" & Format(Now(), "yyyy" & "年" & "mm" & "月" & "dd" & "日" & "h" & "时" & "mm" & "分" & "ss" & "秒") & ".xls"End Sub134:另存本表为TXT文件Sub 另存本表为TXT文件()Dim s As StringDim FullName As String, rng As RangeApplication.ScreenUpdating = FalseFullName = ( & ".txt") '以当前表名为TXT文件名' FullName = Replace(ThisWorkbook.FullName, ".xls", ".txt") '以当前文件名为TXT文件名' FullName = Replace(ThisWorkbook.FullName, ".xls", & ".txt") '以文件名&表名为TXT文件名Open FullName For Output As #1 '以读写方式打开文件,每次写容都会覆盖原先的容'参考帮助,fullname为文件全名For Each rng In Range("a1").CurrentRegions = s & IIf(s = "", "", "|") & rng.ValueIf rng.Column = Range("a1").CurrentRegion.Columns.Count ThenPrint #1, s & "|" '把数据写到文本文件里s = ""End IfNextClose #1 '关闭文件Application.ScreenUpdating = TrueMsgBox "数据已导入文本"End Sub135:引用指定位置单元容为部分文件名另存文件Sub 引用指定位置单元容为部分文件名另存文件()ActiveWorkbook.SaveAs Filename:="E:\信件\" & "解答" & Range("sheet1!a1") & "郎雀.xls" End Sub136:将A列数据排序到D列Sub 将A列数据排序到D列()[d:d] = [a:a].Value[d:d].Sort Key1:=Range("D1"), Order1:=xlAscending, Header:=xlYesEnd Sub137:将指定围的数据排列到D列Sub 将指定围的数据排列到D列()Dim arr1, arr2, i%, xarr1 = Range("A1:C3")ReDim arr2(1 To UBound(arr1, 1) * UBound(arr1, 2), 1 To 1)For Each x In Application.Transpose(arr1)i = i + 1arr2(i, 1) = xNext xRange("D1").Resize(i, 1) = arr2End Sub光标移动Sub 光标移动()ActiveCell.Offset(1, 2).Select '向下移动1行,向右移动2列End Sub138:光标所在行上移一行Sub 光标所在行上移一行()Dim i%i = Split(ActiveCell.Address, "$")(2)If i > 1 ThenRows(i).CutRows(i - 1).Insert Shift:=xlDownEnd IfEnd Sub139:加数据有效限制Sub 加数据有效限制()With Selection.Validation.Delete.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _xlBetween, Formula1:="bigsun010sina.".IgnoreBlank = False.InCellDropdown = False.InputTitle = "".ErrorTitle = "".InputMessage = "".ErrorMessage = "要奋斗就会有牺牲,死人的事是经常发生的。

相关主题