excel常用宏.docx
- 文档编号:6916986
- 上传时间:2023-05-10
- 格式:DOCX
- 页数:19
- 大小:633.89KB
excel常用宏.docx
《excel常用宏.docx》由会员分享,可在线阅读,更多相关《excel常用宏.docx(19页珍藏版)》请在冰点文库上搜索。
excel常用宏
1.拆分单元格赋值
Sub拆分填充()
DimxAsRange
ForEachxInActiveSheet.UsedRange.Cells
Ifx.MergeCellsThen
x.Select
x.UnMerge
Selection.Value=x.Value
EndIf
Nextx
EndSub
2.Excel 宏 按列拆分多个excel
SubMacro1()
DimwbAsWorkbook,arr,rngAsRange,dAsObject,k,t,shAsWorksheet,i&
Setrng=Range("A1:
f1")
Application.ScreenUpdating=False
Application.DisplayAlerts=False
arr=Range("a1:
a"&Range("b"&Cells.Rows.Count).End(xlUp).Row)
Setd=CreateObject("scripting.dictionary")
Fori=2ToUBound(arr)
IfNotd.Exists(arr(i,1))Then
Setd(arr(i,1))=Cells(i,1).Resize(1,13)
Else
Setd(arr(i,1))=Union(d(arr(i,1)),Cells(i,1).Resize(1,13))
EndIf
Next
k=d.Keys
t=d.Items
Fori=0Tod.Count-1
Setwb=Workbooks.Add(xlWBATWorksheet)
Withwb.Sheets
(1)
rng.Copy.[A1]
t(i).Copy.[A2]
EndWith
wb.SaveAsFilename:
=ThisWorkbook.Path&"\"&k(i)&".xlsx"
wb.Close
Next
Application.DisplayAlerts=True
Application.ScreenUpdating=True
MsgBox"完毕"
EndSub
3.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换成1
Subs()
Application.ScreenUpdating=False
DimshAsWorksheet,iAsInteger
Fori=2ToSheet1.[a65536].End(3).Row
If Sheet1.Cells(i,2)<>Sheet1.Cells(i-1,2) Then
Worksheets.Addafter:
=Worksheets(Sheets.Count)
Setsh=ActiveSheet
sh.Name=Sheet1.Cells(i,2)
sh.Range("a1").Resize(1,3).Value=Sheet1.Range("a1").Resize(1,3).Value
sh.Range("a65536").End(3).Offset(1,0).Resize(1,3).Value=Sheet1.Cells(i,1).Resize(1,3).Value
Else
sh.Range("a65536").End(3).Offset(1,0).Resize(1,3).Value=Sheet1.Cells(i,1).Resize(1,3).Value
EndIf
Nexti
Application.ScreenUpdating=True
EndSub
4.Excel 宏 多工作表合并
FunctionLastRow(shAsWorksheet)
OnErrorResumeNext
LastRow=sh.Cells.Find(what:
="*",_
After:
=sh.Range("A1"),_
Lookat:
=xlPart,_
LookIn:
=xlFormulas,_
SearchOrder:
=xlByRows,_
SearchDirection:
=xlPrevious,_
MatchCase:
=False).Row
OnErrorGoTo0
EndFunction
Subs()
DimshAsWorksheet
DimDestShAsWorksheet
DimLastAsLong
DimshLastAsLong
DimCopyRngAsRange
DimStartRowAsLong
Application.ScreenUpdating=False
Application.EnableEvents=False
'新建一个“汇总”工作表
Application.DisplayAlerts=False
OnErrorResumeNext
ActiveWorkbook.Worksheets("汇总").Delete
OnErrorGoTo0
Application.DisplayAlerts=True
SetDestSh=ActiveWorkbook.Worksheets.Add
DestSh.Name="汇总"
'开始复制的行号,忽略表头,无表头请设置成1
StartRow=2
ForEachshInActiveWorkbook.Worksheets
Ifsh.Name<>DestSh.NameThen
Last=LastRow(DestSh)
shLast=LastRow(sh)
IfshLast>0AndshLast>=StartRowThen
SetCopyRng=sh.Range(sh.Rows(StartRow),sh.Rows(shLast))
IfLast+CopyRng.Rows.Count>DestSh.Rows.CountThen
MsgBox"内容太多放不下啦!
"
GoToExitSub
EndIf
CopyRng.Copy
WithDestSh.Cells(Last+1,"A")
.PasteSpecialxlPasteValues
.PasteSpecialxlPasteFormats
Application.CutCopyMode=False
EndWith
EndIf
EndIf
Next
ExitSub:
Application.GotoDestSh.Cells
(1)
DestSh.Columns.AutoFit
Application.ScreenUpdating=True
Application.EnableEvents=True
EndSub
5.多个sheet拆成多个excel
Sub Macro1()
Dim sht As Worksheet
Application.ScreenUpdating = False
Application.DisplayAlerts = False
For Each sht In Sheets
sht.Copy
ActiveWorkbook.SaveAs Filename:
=ThisWorkbook.Path & "\" & sht.Name & ".xlsx"
ActiveWorkbook.Close
Next
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub
或者
PrivateSub分拆工作表()
DimshtAsWorksheet
DimMyBookAsWorkbook
SetMyBook=ActiveWorkbook
ForEachshtInMyBook.Sheets
sht.Copy
ActiveWorkbook.SaveAsFilename:
=MyBook.Path&"\"&sht.Name,FileFormat:
=xlNormal '将工作簿另存为EXCEL默认格式
ActiveWorkbook.Close
Next
MsgBox"文件已经被分拆完毕!
"
EndSub
6.利用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)),如果有多种颜色,就再加多层IF
9.一个工作薄中有许多工作表如何快速整理出一个目录工作表
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)——对K2K56这一区域求平均数;
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区域95~99.5分的人数;假设把结果存放于K58单元格;
(3)=COUNTIF(K2:
K56,">=90")-SUM(K57:
K58)——求K2到K56区域90~94.5分的人数;假设把结果存放于K59单元格;
(4)=COUNTIF(K2:
K56,">=85")-SUM(K57:
K59)——求K2到K56区域85~89.5分的人数;假设把结果存放于K60单元格;
(5)=COUNTIF(K2:
K56,">=70")-SUM(K57:
K60)——求K2到K56区域70~84.5分的人数;假设把结果存放于K61单元格;
(6)=COUNTIF(K2:
K56,">=60")-SUM(K57:
K61)——求K2到K56区域60~69.5分的人数;假设把结果存放于K62单元格;
(7)=COUNTIF(K2:
K56,"<60")——求K2到K56区域60分以下的人数;假设把结果存放于K63单元格;
说明:
COUNTIF函数也可计算某一区域男、女生人数。
如:
=COUNTIF(C2:
C351,"男")——求C2到C351区域(共350人)男性人数;
9、优秀率:
=SUM(K57:
K60)/55*100
10、及格率:
=SUM(K57:
K62)/55*100
11、标准差:
=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),则此函数返回的结果表示求一班的男生人数;这是一个数组函数,输完后要按Ctrl+Shift+Enter组合键(产生“{……}”)。
“{}”不能手工输入,只能用组合键产生。
14、根据出生日期自动计算周岁:
=TRUNC((DAYS360(D3,NOW()))/360,0)
———假设D列存放学生的出生日期,E列输入该函数后则产生该生的周岁。
15、在Word中三个小窍门:
①连续输入三个“~”可得一条波浪线。
②连续输入三个“-”可得一条直线。
连续输入三个“=”可得一条双直线。
一、excel中当某一单元格符合特定条件,如何在另一单元格显示特定的颜色比如:
A1〉1时,C1显示红色
0 A1<0时,C1显示黄色 方法如下: 1、单元击C1单元格,点“格式”>“条件格式”,条件1设为: 公式=A1=1 2、点“格式”->“字体”->“颜色”,点击红色后点“确定”。 条件2设为: 公式=AND(A1>0,A1<1) 3、点“格式”->“字体”->“颜色”,点击绿色后点“确定”。 条件3设为: 公式=A1<0 点“格式”->“字体”->“颜色”,点击黄色后点“确定”。 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列可参照此方法设置。 按以上方法设置后,AB列均有的数据不着色,A列有B列无或者B列有A列无的数据标记为红色字体。 四、EXCEL中怎样批量地处理按行排序 假定有大量的数据(数值),需要将每一行按从大到小排序,如何操作? 由于按行排序与按列排序都是只能有一个主关键字,主关键字相同时才能按次关键字排序。 所以,这一问题不能用排序来解决。 解决方法如下: 1、假定你的数据在A至E列,请在F1单元格输入公式: =LARGE($A1: $E1,COLUMN(A1)) 用填充柄将公式向右向下复制到相应范围。 你原有数据将按行从大到小排序出现在F至J列。 如有需要可用“选择性粘贴/数值”复制到其他地方。 注: 第1步的公式可根据你的实际情况(数据范围)作相应的修改。 如果要从小到大排序,公式改为: =SMALL($A1: $E1,COLUMN(A1)) 五、巧用函数组合进行多条件的计数统计 例: 第一行为表头,A列是“姓名”,B列是“班级”,C列是“语文成绩”,D列是“录取结果”,现在要统计“班级”为“二”,“语文成绩”大于等于104,“录取结果”为“重本”的人数。 统计结果存放在本工作表的其他列。 公式如下: =SUM(IF((B2: B9999="二")*(C2: C9999>=104)*(D2: D9999="重本"),1,0)) 输入完公式后按Ctrl+Shift+Enter键,让它自动加上数组公式符号"{}"。 六、如何判断单元格里是否包含指定文本? 假定对A1单元格进行判断有无"指定文本",以下任一公式均可: =IF(COUNTIF(A1,"*"&"指定文本"&"*")=1,"有","无") =IF(ISERROR(FIND("指定文本",A1,1)),"无","有") 求某一区域内不重复的数据个数 例如求A1: A100范围内不重复数据的个数,某个数重复多次出现只算一个。 有两种计算方
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- excel 常用