1.Excelvba删除工作表的源码代码和实例
2.ExcelVBA设置图表动态数据源实例教程
3.excelVBA代码怎么在单元格中输入数组公式
4.实现分列的两段excelvba分列代码
5.Excel获取指定路径的文件名vba代码
6.如何利用ExcelVBA解决棘手的数据提取问题
Excelvba删除工作表的代码和实例
文章介绍excel中vba删除工作表的方法,并通过两个案例来具体理解vba代码。源码
上一篇文章我们介绍了使用excel的源码基础操作来删除工作表。本文给大家分享vba删除工作表的源码代码写法。
vba删除工作表案例一:删除一张表以外的源码所有工作表
如下图所示:这一个excel工作薄包含多张工作表,如何使用vba删除 “IT部落窝论坛”以外的源码吊娃娃源码工作表呢?右边截图就是使用VBA代码删除后的效果,整个工作薄就只剩下一张工作表:IT部落窝论坛。源码
下面是源码具体的vba删除工作表操作步骤:
第一,按下ALT+F,源码打开VBE编辑器。源码
第二,源码单击菜单:插入——模块,源码插入一个模块,源码并复制下面的源码代码到代码输入区:
Sub vba删除工作表()
Application.DisplayAlerts = False
Dim sht As Object
For Each sht In ThisWorkbook.Worksheets
If sht.Name > "
IT部落窝论坛" Then
sht.Delete
End If
Next
Application.DisplayAlerts = True
End Sub
第三,单击上面截图所示的源码工具栏上面那个绿色的“运行”命令,excel就会自动删除“
IT部落窝论坛”以外的所有工作表。
从两篇删除工作表方法的文章对比,我们可以清楚的看到,如果工作表很多的情况,使用VBA删除工作表,效率会更加高效。而且代码可以随时调用运行,减少手工操作。知识付费源码网
vba删除工作表案例二:逐一提示删除工作表
录制代码的方法参考上面介绍,下面这一段代码运行的结果是出现一个提示框,要求输入工作表名称,如果输入的工作表名正确,excel就删除对应的工作表,如果输入的工作表不正确,excel返回消息框提示:您要删除的工作表不存在。
Sub vba删除工作表()
Dim ws As Worksheet
Dim str As String
str = Application.InputBox(prompt:="输入需要删除的工作表:", Title:="删除工作表", Default:="sheet1", Type:=2)
On Error GoTo back
Set ws = Worksheets(str)
Application.DisplayAlerts = False
ws.Delete
Application.DisplayAlerts = True
Exit Sub
back:
MsgBox "您要删除的工作表不存在!"
End Sub
上面这段vba删除工作表的方法,如果需要经常使用,我们可以保存为宏,在需要的时候按快捷键ALT+F8调用,只要输入工作表名称即可删除工作表。
ExcelVBA设置图表动态数据源实例教程
Excel图表的数据源通常为一个连续区域,但有时会遇到图表数据源区域不连续,且需要动态改变的情况。例如下面的某公司人员基本情况汇总表,B列为部门名称,C至S列分别为“性别”、“年龄”、“学历”、“职称”等不同类别数据的同花顺公式公式源码汇总,如果将这些数据同时显示在一个图表中,显然不便观察和比较数据,这时可以用VBA来动态改变数据源,单独对各个类别进行显示。
具体的方法是:先在表格中创建一个下拉列表,然后通过下拉列表选择不同的系列,通过VBA代码改变图表数据区域,让图表中的数据随之改变。下面以在Excel 中绘制柱形图为例说明如下:
1.设置下拉列表。设置下拉列表的方法有很多,这里用数据有效性来设置。选择某个单元格,如T,单击菜单“数据→有效性→设置→序列”,在“来源”下输入“性别,年龄,学历,职称”(不含引号)后确定,这样就在T单元格中通过数据有效性设置了一个下拉列表。
2.插入图表。选择B3:D区域,即“部门”和第一个类别所在区域“性别”,单击菜单“插入→图表→柱形图→簇状柱形图”,单击“完成”插入一个包含“男”、“女”两个系列的无名团队源码柱形图。
3.输入VBA代码。按Alt+F,打开VBA编辑器,在代码窗口中粘贴下列代码:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = $T$ Then
Dim RngStr As String
Select Case Target.Value
Case 性别
RngStr = b3:b,c3:d
Case 年龄
RngStr = b3:b,e3:i
Case 学历
RngStr = b3:b,j3:n
Case 职称
RngStr = b3:b,o3:s
End Select
ChartObjects(图表 1).Chart.SetSourceData Source:=Range(RngStr)
End If
End Sub
说明:改变T单元格中的内容时,图表的数据区域随之改变。本例中的图表名称为“图表 1”,需根据实际进行更改。查看图表名称的方法是:
Excel :按住Ctrl键单击图表,在名称框中即可看到所选图表的名称。
Excel /:选择图表,在“图表工具-布局”选项卡的“属性”组中即可看到图表名称。
关闭VBA编辑器,返回Excel工作表界面,选择T单元格中的不同系列即可在图表显示相应类别的数据。
excelVBA代码怎么在单元格中输入数组公式
Q我想使用VBA代码在单元格中输入数组公式,如何实现?
A:Range对象提供了一个FormulaArray属性,可以用来设置或者返回单元格区域中的数组公式,也就是说,在工作表单元格中输入完后需要按Ctrl+Shift+Enter组合键才能最终完成的公式。
如下所示,要求工作表Sheet2中所列出的水果总的销售金额,即分别使用各种水果的食品溯源码注册单价乘以各自的销量后的和。
代码:
Sheet2.Range(“C7”).FormulaArray= “=SUM(B2:B5*C2:C5)”
在单元格C7中输入数组公式并计算结果,如下所示。
上面演示了VBA代码在单个单元格中输入数组公式,如果要在多个单元格中输入数组公式呢?如下面的代码所示:
Sheet3.Range(“B1:B6”).FormulaArray= “=A1:A6=”” Excel”””
判断工作表Sheet3的单元格区域A1:A6中的值是否为“ Excel”,如果是则返回TRUE,否则为FALSE。运行代码后的结果如下所示。
如果需要输入的数组公式在每个单元格中都不同呢?下面以colinlegg.wordpress.com中提供的示例来说明。
如下所示,在列C中输入列E中的值等于其对应的列A单元格中的值或者列F中的值等于其对应的列B单元格中的值时列G中的最大值。
下面的四段代码均可实现。
代码1
Sub test()
Dim r As Long
For r = 2 To 5
Sheet1.Cells(r, 3).FormulaArray = _
“=MAX(IF((($E$2:$E$1 =A”1;2;3;4;5}*7+{ 1,2,3,4,5,6,7}-1),””””,”1;2;3;4;5}*7+{ 1,2,3,4,5,6,7}-1)”
With ActiveSheet.Range(“E2:K7”)
.FormulaArray = theFormulaPart1
.Replace “X_X_X())”,theFormulaPart2
.NumberFormat = “m””月””d””日”””
End With
End Sub
上述程序将在单元格区域E2:K7中生成当月的日历。
正如本文一开始所的,FormulaArray属性还可以返回单元格中的公式。
如果想要从单个单元格中返回公式,那么无论单元格中是否包含数组公式,Formula属性和FormulaArray属性都会返回相同的结果。然而,Formula属性和FormulaArray属性应用于连续的、多单元格区域时返回不同的结果。
如果单元格区域中含有数组公式,即多个单元格中为一个数组公式,那么FormulaArray属性返回该公式。
如果单元格区域不是数组区域但所有单元格都包含相同的公式,那么FormulaArray属性也返回该通用公式。
如果单元格区域不是数组区域且包含的公式不相同,那么FormulaArray属性返回Null。
在上述所有三种情形中,Formula属性返回Variant型数组,数组中的每个元素表示区域中每个单元格的公式。
实现分列的两段excelvba分列代码
excel vba 分列多用于一般常规的分列操作完成不了的情况。
Excel内置的分列,仅用于有规律的数据进行分列。比如下面的截图,这样的数据源,分列就可以考虑使用excel vba 分列完成。
A列数据源,要将汉字和数字分列后的效果如B:D列。
下面是两段excel vba 分列的代码,案例和答案来自论坛版主。
第一段excel vba 分列的代码:
Sub vba分列()
Dim oJs As Object, rng As Range
Set oJs = CreateObject("ScriptControl"): oJs.Language = "JScript"
oJs.eval "function gets(str){ return str.replace(/(\d+)/,’ $1 ‘)}"
For Each rng In Range("A2", [A].End(3))
rng(1, 2).Resize(1, 3) = Split(oJs.codeobject.gets(rng.Value), " ")
Next
End Sub
第二段excel vba 分列的代码:
Sub vba分列()
Dim arr, i%, brr(), sma As Object
arr = Range("a2:a" & Cells(Rows.Count, 1).End(3).Row)
ReDim brr(1 To UBound(arr), 1 To 3)
With CreateObject("vbscript.regexp")
.Global = True
.Pattern = "([^\d]+)(\d+)(.+)"
For i = 1 To UBound(arr)
Set sma = .Execute(arr(i, 1))(0).submatches
brr(i, 1) = sma(0)
brr(i, 2) = sma(1)
brr(i, 3) = sma(2)
Next
End With
Range("b2", Cells(Rows.Count, Columns.Count)).ClearComments
Range("b2").Resize(UBound(brr), UBound(brr, 2)).NumberFormat = "@"
Range("b2").Resize(UBound(brr), UBound(brr, 2)) = brr
Set sma = Nothing
End Sub
代码使用方法,在excel中,按下ALT+F,打开VBE编辑器,单击插入——模块,复制上面任意一段代码,按F5键运行即可完成分列。
Excel获取指定路径的文件名vba代码
在Excel VBA中,如果需要Excel获取指定路径的文件名以方便用户的操作体验,可通过VBAExcel获取指定路径的文件名。Excel可通过VBA宏Excel获取指定路径的文件名。
Excel获取指定路径的文件名的方法:
首先按“Alt+F”组合键,Excel打开代码编辑器,单击“插入”菜单-“模块”,双击插入的模块,在右侧的代码窗口中输入:
Sub Excel_Partner()
Dim myFilename As String, myPath As String
ChDir Application.DefaultFilePath ‘改变默认路径
myPath = "C:\" ‘指定的任意路径
SendKeys myPath & "{ TAB}" ‘将指定的任意路径发送到“打开”对话框
myFilename = Application.GetOpenFilename
Range("A1") = myFilename
End Sub
按F5运行键运行程序,Excel调用“打开”对话框,自动打开指定的路径。双击指定的文件,Excel获取指定路径的文件名。
相关说明: 当输入法处于中文输入法状态时,将不能打开指定的路径。
如何利用ExcelVBA解决棘手的数据提取问题
今天同事问了个我一个数据提取的问题。他的需求是这样的:
他有1个工作簿,里面有个工作表。他希望把每个工作表里的第6行的b6:i6数据复制到一起,
也就是说他要把工作表里的第6行,汇总在一起。比如这样:
他说如果你没办法,那他只能手动来复制个工作表,提取这数据了。
我想了下说,我用VBA编程试试。
差不多分钟折腾,我把代码搞定了。
Public Sub tiqu()’指定行遍历工作表提取
Application.ScreenUpdating = False
Dim LastRow As Integer
Dim sh As Worksheet
Set sh = Worksheets.Add ‘新建工作表
Set sh = ActiveSheet’为当前工作表
sh.Name = "sheet1"
Sheets(3).Range("b5:i5").Copy Destination:=Sheets("sheet1").Range("b1") ‘表头
Sheets(3).Range("a6:i6").Copy Destination:=Sheets("sheet1").Range("a2") ‘复制
For i = 4 To Sheets.Count ‘遍历工作表
LastRow = Sheets("sheet1").Cells(Rows.Count, 1).End(xlUp).Row ‘判定最后非空行
Sheets(i).Range("a6:i6").Copy Destination:=Sheets("sheet1").Range("a" & LastRow).Offset(1, 0) ‘复制到特定非空行的下一行
Next
MsgBox "处理完毕"
Application.ScreenUpdating = True
End Sub
他按alt+F,把代码贴入模块,点运行就行了。就是要他的结果。
我来解释下我的思路原理:我的解决方案。遍历工作表,提取每个工作表的第6行,复制到sheet1里的A2开始,难点1是偏移,用offset。难点2,判断非空的最后一行,用en那个个工作表,1分钟内运行完。如果复制粘贴次,大家试下就知道要多久了,起码我肯定你的手已经废掉了,哈哈。
哈哈,本贴结束.
ExcelVBAEndWith结构专为对象而生
我们主要是和对象打交道,这包括各种各样的对象以及由这些对象组成的集合对象。我们来看看并学习Excel内部是如何处理对象的。
我们先来录制一个宏。
在Excel中,打开宏录制器,录制下面的操作:在工作表单元格A1中输入“Excel”,设置其字体为红色,单元格背景色为**。录制的代码如下:
Sub 宏3()
‘
‘ 宏3 宏
‘
‘
ActiveCell.FormulaR1C1 = “Excel”
Range(“A1”).Select
With Selection.Font
.Color = -
.TintAndShade = 0
End With
With Selection.Interior
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
.Color =
.TintAndShade = 0
.PatternTintAndShade = 0
End With
End Sub
观察代码,我们发现,宏录制器为设置字体和单元格背景的两段代码都使用了With … End With结构,这就是VBA为我们提供的处理对象的有效方法之一。
在这里,宏录制器自动优化了代码,在With … End With结构中对同一个对象执行多项操作。当需要对某个对象执行多项操作时(例如,为同一对象的多个属性赋值),使用With … End With结构的代码比在每个语句中都显示地引用对象的代码要更快。
在上一篇文章《Excel VBA解读():谈谈对象变量》中,我们展示了一个示例:在单元格区域A1:B2中输入文本“示例”,将字体加粗,字号大小调整为号,并将单元格背景设置为**。
代码1:不使用对象变量
Sub test()
Worksheets(“Sheet1”).Range(“A1:B2”).Value= “示例”
Worksheets(“Sheet1”).Range(“A1:B2”).Font.Bold = True
Worksheets(“Sheet1”).Range(“A1:B2”).Font.Size =
Worksheets(“Sheet1”).Range(“A1:B2”).Interior.Color =vbYellow
End Sub
代码2:使用对象变量
Sub testUpdate()
Dim rng As Range
Set rng =Worksheets(“Sheet1”).Range(“A1:B2”)
rng.Value = “示例”
rng.Font.Bold = True
rng.Font.Size =
rng.Interior.Color = vbYellow
End Sub
上述两段代码是我们已经学过的代码。现在,我们学习了With … End With结构,又可以将代码进行改写而获得相同的效果。
代码3:使用With … End With结构(不使用对象变量)
Sub test1()
WithWorksheets(“Sheet1”).Range(“A1:B2”)
.Value = “示例”
.Font.Bold = True
.Font.Size =
.Interior.Color = vbYellow
End With
End Sub
代码4:使用With … End With结构(使用对象变量)
Sub testUpdate1()
Dim rng As Range
Set rng =Worksheets(“Sheet1”).Range(“A1:B2”)
With rng
.Value = “示例”
.Font.Bold = True
.Font.Size =
.Interior.Color = vbYellow
End With
End Sub
实际上,我们还可以进一步深入,将相同的对象全部归于With … End With结构内,这样就可以得到下面的代码。
代码5:完全使用With … End With结构
Sub testUpdate2()
Dim rng As Range
Set rng =Worksheets(“Sheet1”).Range(“A1:B2”)
With rng
.Value = “示例”
With .Font
.Bold = True
.Size =
End With
.Interior.Color = vbYellow
End With
End Sub
With … End With结构为我们提供了更高效的处理重复引用对象的方式,虽然难以理解一点,也更难阅读,但它确实能带来运行速度上的提高。
2024-12-29 05:50
2024-12-29 05:35
2024-12-29 04:58
2024-12-29 03:33
2024-12-29 03:29
2024-12-29 03:12