excel常用宏.doc_第1页
excel常用宏.doc_第2页
excel常用宏.doc_第3页
excel常用宏.doc_第4页
excel常用宏.doc_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1. 拆分单元格赋值Sub 拆分填充()Dim x As RangeFor Each x In ActiveSheet.UsedRange.CellsIf x.MergeCells Thenx.Selectx.UnMergeSelection.Value = x.ValueEnd IfNext xEnd Sub2. Excel宏按列拆分多个excelSub Macro1() Dim wb As Workbook, arr, rng As Range, d As Object, k, t, sh As Worksheet, i& Set rng = Range(A1:f1) Application.ScreenUpdating = False Application.DisplayAlerts = False arr = Range(a1:a & Range(b & Cells.Rows.Count).End(xlUp).Row) Set d = CreateObject(scripting.dictionary) For i = 2 To UBound(arr) If Not d.Exists(arr(i, 1) Then Set d(arr(i, 1) = Cells(i, 1).Resize(1, 13) Else Set d(arr(i, 1) = Union(d(arr(i, 1), Cells(i, 1).Resize(1, 13) End If Next k = d.Keys t = d.Items For i = 0 To d.Count - 1 Set wb = Workbooks.Add(xlWBATWorksheet) With wb.Sheets(1) rng.Copy .A1 t(i).Copy .A2 End With wb.SaveAs Filename:=ThisWorkbook.Path & & k(i) & .xlsx wb.Close Next Application.DisplayAlerts = True Application.ScreenUpdating = True MsgBox 完毕End Sub3. Excel宏按列拆分多个sheet在一个工作表中是许多的公司订单记录,如何将它按公司名分拆成一个个工作表,用VBA实现相当便捷。以下是演试:原始工作簿:运行VBA代码后的工作簿:代码如下:1. 需要先把数据按照分拆的那一列字段排序2. 如果你想应用在你的表格中,只需将所有resize(1,3)中的3修改,改成你的表格的列数。如果你总表有8列就改成resize(1,8)即可3. 如果你想根据表格的第一列拆分,需要把Sheet1.Cells(i, 2) Sheet1.Cells(i - 1, 2)和sh.Name = Sheet1.Cells(i, 2)的2换成1Sub s()Application.ScreenUpdating = FalseDim sh As Worksheet, i As IntegerFor i = 2 To Sheet1.a65536.End(3).RowIfSheet1.Cells(i, 2) Sheet1.Cells(i - 1, 2)ThenWorksheets.Add after:=Worksheets(Sheets.Count)Set sh = ActiveSheetsh.Name = Sheet1.Cells(i, 2)sh.Range(a1).Resize(1, 3).Value = Sheet1.Range(a1).Resize(1, 3).Valuesh.Range(a65536).End(3).Offset(1, 0).Resize(1, 3).Value = Sheet1.Cells(i, 1).Resize(1, 3).ValueElsesh.Range(a65536).End(3).Offset(1, 0).Resize(1, 3).Value = Sheet1.Cells(i, 1).Resize(1, 3).ValueEnd IfNext iApplication.ScreenUpdating = TrueEnd Sub4.Excel宏多工作表合并Function LastRow(sh As Worksheet) On Error Resume Next LastRow = sh.Cells.Find(what:=*, _ After:=sh.Range(A1), _ Lookat:=xlPart, _ LookIn:=xlFormulas, _ SearchOrder:=xlByRows, _ SearchDirection:=xlPrevious, _ MatchCase:=False).Row On Error GoTo 0End FunctionSub s() Dim sh As Worksheet Dim DestSh As Worksheet Dim Last As Long Dim shLast As Long Dim CopyRng As Range Dim StartRow As Long Application.ScreenUpdating = False Application.EnableEvents = False 新建一个“汇总”工作表 Application.DisplayAlerts = False On Error Resume Next ActiveWorkbook.Worksheets(汇总).Delete On Error GoTo 0 Application.DisplayAlerts = True Set DestSh = ActiveWorkbook.Worksheets.Add DestSh.Name = 汇总 开始复制的行号,忽略表头,无表头请设置成1 StartRow = 2 For Each sh In ActiveWorkbook.Worksheets If sh.Name DestSh.Name Then Last = LastRow(DestSh) shLast = LastRow(sh) If shLast 0 And shLast = StartRow Then Set CopyRng = sh.Range(sh.Rows(StartRow), sh.Rows(shLast) If Last + CopyRng.Rows.Count DestSh.Rows.Count Then MsgBox 内容太多放不下啦! GoTo ExitSub End If CopyRng.Copy With DestSh.Cells(Last + 1, A) .PasteSpecial xlPasteValues .PasteSpecial xlPasteFormats Application.CutCopyMode = False End With End If End If Next ExitSub: Application.Goto DestSh.Cells(1) DestSh.Columns.AutoFit Application.ScreenUpdating = True Application.EnableEvents = TrueEnd Sub5.多个sheet拆成多个excelSubMacro1()DimshtAsWorksheetApplication.ScreenUpdating=FalseApplication.DisplayAlerts=FalseForEachshtInSheetssht.CopyActiveWorkbook.SaveAsFilename:=ThisWorkbook.Path&sht.Name&.xlsxActiveWorkbook.CloseNextApplication.DisplayAlerts=TrueApplication.ScreenUpdating=TrueEndSub或者Private Sub 分拆工作表() Dim sht As Worksheet Dim MyBook As Workbook Set MyBook = ActiveWorkbook For Each sht In MyBook.Sheets sht.Copy ActiveWorkbook.SaveAs Filename:=MyBook.Path & & sht.Name, FileFormat:=xlNormal 将工作簿另存为EXCEL默认格式 ActiveWorkbook.Close Next MsgBox 文件已经被分拆完毕! End Sub6.利用txt提取文件夹中的所有文件名称1、 在那个文件夹内新建一个.TXT文件(如wenjian.txt),用记事本单开输入 dir 1.txt 保存退出 将刚才的.TXT(wenjian.txt)更名为.bat文件(wenjian.bat) 双击wenjian.bat文件运行一次,在文件夹内多出一个1.txt文件 打开1.txt文件,将其中的内容粘贴到Excel中,数据分列处理就可以得到你要的文件名列表了!7.一列拆成两列Excel电子表格的功能非常强大,无论是拆分还是合并单元格都可以轻松完成。有时候我们编辑数据的时候将“名称”和“价格”全部放到了一个单元格中了,有什么方法可以快速将这些数据拆分开呢?下面Word联盟以具体实例来为大家详细介绍操作方法。Excel表格中的数据拆分案例说明:水果名称与水果价格全部在一个单元格中,只是用“空格”分隔开。我们将这些以空格分隔开的数据分别拆分到两个单元格中。首先,我们在Excel表格中选中需要拆分的列;然后,单击菜单栏的“数据”,在下拉列表中选择“分列”命令;此时,需要3个步骤来完成数据在表格中的拆分,“文本分列向导 - 3 步骤之 1”,我们只需选择默认的“分割符号”再单击下面的“下一步”按钮;然后,继续在“文本分列向导 - 3 步骤之 2”下面的“分隔符号”中勾选“Tab 键”、“空格”和“连续分隔符号视为单个处理”。(现在我们可以在“数据预览”中看到拆分的效果)最后单击“下一步”;最后一个步骤,我们单击“完成”就可以了。拆分好的表格效果如下图所示:提示:以上的表格数据拆分工作必须要有一定的规律才可以实现,比如文字与数字之间有空格或者逗号、分号等其他任何符号或有规律的字符都可以完成拆分工作。如果中间没空格或者有规律的字符,那么这项拆分数据表格的工作就无法实现了。8.根据颜色不同做IF判断如果有很多种颜色,可以插入一列 公式=颜色,将颜色值求出在取值列用公式=IF(颜色=6,1050,IF(颜色=0,L2),如果有多种颜色,就再加多层IF9.一个工作薄中有许多工作表如何快速整理出一个目录工作表1、用宏3.0取出各工作表的名称,方法:Ctrl+F3出现自定义名称对话框,取名为X,在“引用位置”框中输入:=MID(GET.WORKBOOK(1),FIND(,GET.WORKBOOK(1)+1,100)确定2、用HYPERLINK函数批量插入连接,方法:在目录工作表(一般为第一个sheet)的A2单元格输入公式:=HYPERLINK(#&INDEX(X,ROW()&!A1,INDEX(X,ROW()将公式向下填充,直到出错为止,目录就生成了。10.常用公式计算有值的单元格的平均值 =AVERAGEIF(C8:T8,0)子列排序 =IF(A2=A1,C1+1,1)数字转字母 =CHAR(A57+64)字母转数字 =CODE(B58)-64截取 =MID(B5,3,99)分类 =IF(A2=A1,B1,B1+1)查找 =VLOOKUP(C:C,5.2-大中型建筑业打分卡问题清单!B:D,3,0)数数 =COUNTIF(I:I,)A列相同的F列值和=SUMIF(A:A,A2,F:F)倒序 =INDEX($A$1:$A$119,ROWS($A$1:$A$119)-ROWS($A$1:A1)+1)两个相同再取值 =VLOOKUP(A2&$B$1,Sheet4!$B:$J,9,0)改名=CHOOSE(MATCH(,0/FIND(1A,1B,2A,2B,3A,3B,4A,4B,5A,5B,6A,6B,7A,7B,8A,8B,N358),),是,是,是,是,是,是,是,是,是,是,是,是,是,是,是,是)改日期格式: =TEXT(A4,yyyy/m/dd)=TEXT(B4,HH:MM)双重条件统计个数=SUMPRODUCT($B$3:$AK$3=AM$3)*($B4:$AK4=)=COUNTIFS($B$3:$AK$3,AM$3,$B4:$AK4,) 1、 查找重复内容公式:=IF(COUNTIF(A:A,A2)1,重复,)。2、 用出生年月来计算年龄公式:=TRUNC(DAYS360(H6,2009/8/30,FALSE)/360,0)。3、 从输入的18位身份证号的出生年月计算公式:=CONCATENATE(MID(E2,7,4),/,MID(E2,11,2),/,MID(E2,13,2)。4、 从输入的身份证号码内让系统自动提取性别,可以输入以下公式:=IF(LEN(C2)=15,IF(MOD(MID(C2,15,1),2)=1,男,女),IF(MOD(MID(C2,17,1),2)=1,男,女)公式内的“C2”代表的是输入身份证号码的单元格。1、求和: =SUM(K2:K56) 对K2到K56这一区域进行求和;2、平均数: =AVERAGE(K2:K56) 对K2 K56这一区域求平均数;3、排名: =RANK(K2,K$2:K$56) 对55名学生的成绩进行排名;4、等级: =IF(K2=85,优,IF(K2=74,良,IF(K2=60,及格,不及格)5、学期总评: =K2*0.3+M2*0.3+N2*0.4 假设K列、M列和N列分别存放着学生的“平时总评”、“期中”、“期末”三项成绩;6、最高分: =MAX(K2:K56) 求K2到K56区域(55名学生)的最高分;7、最低分: =MIN(K2:K56) 求K2到K56区域(55名学生)的最低分;8、分数段人数统计:(1) =COUNTIF(K2:K56,100) 求K2到K56区域100分的人数;假设把结果存放于K57单元格;(2) =COUNTIF(K2:K56,=95)K57 求K2到K56区域9599.5分的人数;假设把结果存放于K58单元格;(3)=COUNTIF(K2:K56,=90)SUM(K57:K58) 求K2到K56区域9094.5分的人数;假设把结果存放于K59单元格;(4)=COUNTIF(K2:K56,=85)SUM(K57:K59) 求K2到K56区域8589.5分的人数;假设把结果存放于K60单元格;(5)=COUNTIF(K2:K56,=70)SUM(K57:K60) 求K2到K56区域7084.5分的人数;假设把结果存放于K61单元格;(6)=COUNTIF(K2:K56,=60)SUM(K57:K61) 求K2到K56区域6069.5分的人数;假设把结果存放于K62单元格;(7) =COUNTIF(K2:K56,60) 求K2到K56区域60分以下的人数;假设把结果存放于K63单元格;说明:COUNTIF函数也可计算某一区域男、女生人数。如:=COUNTIF(C2:C351,男) 求C2到C351区域(共350人)男性人数;9、优秀率: =SUM(K57:K60)/55*10010、及格率: =SUM(K57:K62)/55*10011、标准差: =STDEV(K2:K56) 求K2到K56区域(55人)的成绩波动情况(数值越小,说明该班学生间的成绩差异较小,反之,说明该班存在两极分化);12、条件求和: =SUMIF(B2:B56,男,K2:K56) 假设B列存放学生的性别,K列存放学生的分数,则此函数返回的结果表示求该班男生的成绩之和;13、多条件求和: =SUM(IF(C3:C322=男,IF(G3:G322=1,1,0) 假设C列(C3:C322区域)存放学生的性别,G列(G3:G322区域)存放学生所在班级代码(1、2、3、4、5),则此函数返回的结果表示求一班的男生人数;这是一个数组函数,输完后要按CtrlShiftEnter组合键(产生“”)。“”不能手工输入,只能用组合键产生。14、根据出生日期自动计算周岁:=TRUNC(DAYS360(D3,NOW( )/360,0)假设D列存放学生的出生日期,E列输入该函数后则产生该生的周岁。15、在Word中三个小窍门:连续输入三个“”可得一条波浪线。连续输入三个“-”可得一条直线。连续输入三个“=”可得一条双直线。一、excel中当某一单元格符合特定条件,如何在另一单元格显示特定的颜色比如:A11时,C1显示红色0A11时,C1显示绿色A1“条件格式”,条件1设为:公式 =A1=12、点“格式”-“字体”-“颜色”,点击红色后点“确定”。条件2设为:公式 =AND(A10,A1“字体”-“颜色”,点击绿色后点“确定”。条件3设为:公式 =A1“字体”-“颜色”,点击黄色后点“确定”。4、三个条件设定好后,点“确定”即出。二、EXCEL中如何控制每列数据的长度并避免重复录入1、用数据有效性定义数据长度。用鼠标选定你要输入的数据范围,点数据-有效性-设置,有效性条件设成允许文本长度等于5(具体条件可根据你的需要改变)。还可以定义一些提示信息、出错警告信息和是否打开中文输入法等,定义好后点确定。2、用条件格式避免重复。选定A列,点格式-条件格式,将条件设成“公式=COUNTIF($A:$A,$A1)1”,点格式-字体-颜色,选定红色后点两次确定。这样设定好后你输入数据如果长度不对会有提示,如果数据重复字体将会变成红色。三、在EXCEL中如何把B列与A列不同之处标识出来?(一)、如果是要求A、B两列的同一行数据相比较:假定第一行为表头,单击A2单元格,点“格式”-“条件格式”,将条件设为:“单元格数值” “不等于”=B2点“格式”-“字体”-“颜色”,选中红色,点两次“确定”。用格式刷将A2单元格的条件格式向下复制。B列可参照此方法设置。(二)、如果是A列与B列整体比较(即相同数据不在同一行):假定第一行为表头,单击A2单元格,点“格式”-“条件格式”,将条件设为:“公式”=COUNTIF($B:$B,$A2)=0点“格式”-“字体”-“颜色”,选中红色,点两次“确定”。用格式刷将A2单元格的条件格式向下复制。B列可参

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论