Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >VBA实战技巧34:使用VBA组织图形1

VBA实战技巧34:使用VBA组织图形1

作者头像
fanjy
发布于 2021-09-22 02:17:33
发布于 2021-09-22 02:17:33
1.7K0
举报
文章被收录于专栏:完美Excel完美Excel

引言:本文的代码整理自mrexcel.com,一个很好的令人兴奋的示例,有兴趣的朋友可以仔细研究。

首先,看看代码运行后的效果,如下图1所示。

图1

SmartArt可以创建组织结构图,但会有格式限制,本文给出的代码克服了这一点。

准备一个包含如下图2所示信息的源数据表,其中:

  • 列A和列B – 两个元素之间的关系。形状填充颜色将来自列A。
  • 列C – 要显示的描述性文本。
  • 列D – 放置在形状旁边的辅助数据。
  • 列E – 形状是否有轮廓。

图2

VBA代码如下:

Dim h%, w%

'主程序

Sub main()

Dim i%, ob As Worksheet, dt As Worksheet, r As Range, tb As Shape

Set dt =Sheets("tdata")

Set ob =Sheets("fshap")

h = 1

w = 1

Set tb =dt.Shapes.AddTextbox(msoTextOrientationHorizontal, 500, 70, 50, 50)

tb.TextFrame2.TextRange.Text= "Milou"

tb.TextFrame2.AutoSize= msoAutoSizeShapeToFitText

tb.TextFrame2.WordWrap= msoFalse

tb.TextFrame2.TextRange.Font.Size= 16

'确定大形状的大小

For i = 1 To ob.Range("a" & Rows.Count).End(xlUp).Row

tb.TextFrame2.TextRange.Text = Cells(i, 1)& vbLf & Cells(i, 3)

If tb.Height > h Then h = tb.Height

If tb.Width > w Then w = tb.Width

Next

Application.CutCopyMode= 0

dt.Cells.ClearContents

'原始表格

ob.[a1].CurrentRegion.Copy

Sheets("secdata").[bb1].PasteSpecialPaste:=xlPasteAll, Operation:=xlNone, _

SkipBlanks:=False,Transpose:=False

For i =ob.Shapes.Count To 1 Step -1

ob.Shapes(i).Delete

Next

ob.Activate

Phase1

'移动形状

Phase2 True,False

'更新表格

Phase2 False,False

Phase3

Sheets("secdata").[bb1].CurrentRegion.Copy

ob.Range("a1").PasteSpecial xlPasteAll, xlPasteSpecialOperationNone, False, False

Set r =dt.Range("b:b").Find(WorksheetFunction.Min(dt.[b:b]), dt.[b1],xlValues, xlWhole)

ob.Rows(CStr(Split(ob.[a1].CurrentRegion.Address,"$")(4) + 2) & ":" & _

CStr(Split(ob.Shapes(r.Offset(,-1)).TopLeftCell.Address, "$")(2) - 2)).Delete

End Sub

'绘制连接线

Sub Phase3()

Dim v, r As ange, lasto%, i%, y1, y2, yf, x1, x2, ws As Worksheet, _

dt As Worksheet, j%, boss$, nr%

Set ws =Sheets("fshap")

Set dt = Sheets("tdata")

dt.[a1:ab70].ClearContents

ws.[a1].CurrentRegion.Copydt.[a1]

dt.Activate

[g1] = [b1]

v =Split([a1].CurrentRegion.Address, "$")(4)

Range("b1:b"& v).AdvancedFilter xlFilterCopy, [g1:g2], [k1], True

For j = 2 To Range("k" & Rows.Count).End(xlUp).Row

[m1:z70].ClearContents

[m1] = [g1]

[m2] = Cells(j, "k")

Range("a1:b" &v).AdvancedFilter xlFilterCopy, [m1:m2], [n1], False

Set r = [d:d].Find([m2], [d1], xlValues,xlPart)

[q1] = [d74]

[q2] = "*" & [m2] &"*"

nr = Range("n" &Rows.Count).End(xlUp).Row

For i = 2 To nr

Cells(i + 1, "q") ="*" & Cells(i, "n") & "*"

Next

lasto =Split(Range("q1").CurrentRegion.Address, "$")(4)

Range("a74:g" &Range("a" & Rows.Count).End(xlUp).Row).AdvancedFilter _

xlFilterCopy, Range("q1:q" &lasto), [s1], False

y1 = WorksheetFunction.Min([t:t]) +WorksheetFunction.Max([w:w])

yf = y1 + (WorksheetFunction.Max([t:t]) -y1) / 2

x1 = WorksheetFunction.Min([u:u]) +WorksheetFunction.Max([y:y]) / 2

x2 = WorksheetFunction.Max([u:u]) +WorksheetFunction.Max([y:y]) / 2

'水平

With ws.Shapes.AddLine(x1, yf, x2, yf).Line

.DashStyle = msoLineSolid

.ForeColor.RGB = RGB(50, 40, 130)

.Weight = 2

End With

Set r = Range("v:v").Find([m2],[v1], xlValues, xlPart)

x1 = r.Offset(, -1) + r.Offset(, 3) / 2

'层级一

Set r = dt.[f:f].Find(1, dt.[f1], xlValues,xlWhole)

boss = r.Offset(, -5)

If [m2] = r.Offset(, -2) And nr Mod 2 = 0Then

dt.[u:u].Copy dt.[aa1]

Set r = dt.Range("aa:aa").Find(r.Offset(, -3), dt.[aa1],xlValues, xlWhole)

r = 10000

Sorter "aa", 2, dt

ws.Shapes(boss).Left = dt.Cells(4 +(Range("aa" & Rows.Count).End(xlUp).Row - 5) / 2, "aa")

x1 = ws.Shapes(boss).Left +ws.Shapes(boss).Width / 2

End If

'父节点到水平线

With ws.Shapes.AddLine(x1, yf, x1,WorksheetFunction.Max([t:t])).Line

.DashStyle = msoLineSolid

.ForeColor.RGB = RGB(50, 40, 130): .Weight = 2

End With

'子节点到水平线

For i = 2 To Range("n" &Rows.Count).End(xlUp).Row

Set r =Range("v:v").Find(Cells(i, "n").Value, [v1], xlValues,xlPart)

x1 = r.Offset(, -1) + r.Offset(, 3) / 2

With ws.Shapes.AddLine(x1, r.Offset(,-2) + r.Offset(, 1), x1, yf).Line

.DashStyle = msoLineSolid

.ForeColor.RGB = RGB(50, 40, 130)

.Weight = 2

End With

Next

Next

On Error Resume Next

For i = 1 Tows.Shapes.Count

If Notws.Shapes(i).TextFrame2.TextRange.Text Like "*%*" Then _

ws.Shapes(i).TextFrame2.TextRange.Font.Size= 16

Next

On Error GoTo 0

End Sub

'绘制原始图

Sub Phase1()

Dim arr(), i%,t

'保存原始表

arr =Range([a1].CurrentRegion.Address)

Adjust

CreateDiagram ActiveSheet, 1.4

[a:p].ClearContents

'原始表

[a1].Resize(UBound(arr,1), UBound(arr, 2)).Value = arr

On Error Resume Next

For i = 1 To ActiveSheet.Shapes.Count

If ActiveSheet.Shapes(i).TopLeftCell = [a1]Then ActiveSheet.Shapes(i).Delete

t =ActiveSheet.Shapes(i).TextFrame2.TextRange.Text

If Len(t) And Not t Like "*%*"Then ActiveSheet.Shapes(i).IncrementRotation 180

Next

On Error GoTo 0

End Sub

'增加垂直间距

Sub Phase2(move As Boolean, geo As Boolean)

Dim ws As Worksheet, i%, s As Shape, r As Range, lr%, delta, v%, sn As Shape, dt AsWorksheet, x, boss$

Set dt =Sheets("tdata"): Set ws = Sheets("fshap")

dt.Activate:dt.Cells.ClearContents

Set r = [a75]

On Error Resume Next

'连接线

For Each s In ws.Shapes

If Len(s.TextFrame2.TextRange.Text) = 0 Then s.Delete

Next

On Error GoTo 0

[a74] = "name":[b74] = "top": [c74] = "left": [d74] = "text":[e74] = "height"

[h74] ="top": [f74] = "level": [g74] = "width"

For i = 1 To ws.Shapes.Count

If Not ws.Shapes(i).Name Like"*aux*" Then

r = ws.Shapes(i).Name

r.Offset(, 1) = Round(ws.Shapes(i).Top,0)

r.Offset(, 2) =Round(ws.Shapes(i).Left, 0)

r.Offset(, 3) =ws.Shapes(i).TextFrame2.TextRange.Text

r.Offset(, 4) =Round(ws.Shapes(i).Height, 0)

r.Offset(, 6) =Round(ws.Shapes(i).Width, 0)

Set r = r.Offset(1)

End If

Next

lr =Range("b" & Rows.Count).End(xlUp).Row

Range("B74:B"& lr).AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=[h74:h75], _

CopyToRange:=[i74],Unique:=True

Sorter "i", 75, dt

Range("j75:j"& lr).Formula = "=row()-74"

lr =Range("b" & Rows.Count).End(xlUp).Row

Range("f75:f"& lr).Formula = "=match(b75,i" & lr &",0)"

If move Then

delta = WorksheetFunction.Max([e:e])

For i = 75 To lr

Set sn = ws.Shapes(Range("a"& i))

sn.Height = h

sn.Width = w

'新的垂直位置

sn.Top = 2000 - delta *Range("f" & i) * 2

ws.Shapes(Range("a" & i)& "aux").Top = sn.Top + sn.Height

Next

End If

Set r =Range("f1:f" & lr).Find(1, [f1], xlValues, xlWhole)

boss =r.Offset(, -5)

On Error Resume Next

ws.Shapes(boss& "aux").Delete

On Error GoTo0

'层级二

[h75] = 2

[h74] = [f74]

Range("a74:g"& lr).AdvancedFilter xlFilterCopy, [h74:h75], [L74], False

'几何中间

If geo And move Then

x = WorksheetFunction.Max([n:n]) -WorksheetFunction.Min([n:n]) + WorksheetFunction.Max([r:r])

ws.Shapes(boss).Left =WorksheetFunction.Min([n:n]) + x / 2 - WorksheetFunction.Max([r:r]) / 2

'对齐到最近的形状

ElseIf move And Not geo Then

lr = Range("L" &Rows.Count).End(xlUp).Row

Range("s75:s" & lr).Formula ="=abs(n75-" & CInt(ws.Shapes(boss).Left) & ")"

Range("t75:t" & lr).Formula ="=$n75"

Set r =Range("s:s").Find(WorksheetFunction.Min([s:s]), [s1], xlValues,xlWhole)

ws.Shapes(boss).Left = r.Offset(, 1)

End If

End Sub

Sub Sorter(col$, rn%, dt As Worksheet)

Dim lr%

lr = Range(col& Rows.Count).End(xlUp).Row

dt.Sort.SortFields.Clear

dt.Sort.SortFields.AddKey:=dt.Cells(rn, col), SortOn:=xlSortOnValues, _

Order:=2,DataOption:=0

With dt.Sort

.SetRange dt.Range(Cells(rn, col),Cells(lr, col))

.Header = xlNo

.MatchCase = False

.Orientation = xlTopToBottom

.SortMethod = xlPinYin

.Apply

End With

End Sub

Sub Adjust()

Dim lr%, i%

For i = 1 To ActiveSheet.Shapes.Count

ActiveSheet.Shapes(1).Delete

Next

[k:ae].ClearContents

lr =Range("a" & Rows.Count).End(xlUp).Row

[k1] ="Seq": [L1] = "code1": [m1] = "code2"

[L2] = [b2]:[n1] = "info": [o1] = "info2": [p1] = "outline"

[m2] = [b2]:[k2] = 2: [n2] = 0.01: [o2] = "desc0"

Range("a2:a"& lr).Copy

[L3].PasteSpecialxlPasteAll

Range("b2:b"& lr).Copy

Range("m3").PasteSpecialxlPasteAll

Range("c2:c"& lr).Copy

Range("o3").PasteSpecialxlPasteAll

Range("d2:d"& lr).Copy

Range("n3").PasteSpecialxlPasteAll

Range("e2:e"& lr).Copy

Range("p3").PasteSpecialxlPasteAll

Range("k3:k"& lr + 1).Formula = "=row()"

[a:e].ClearContents

'调整的表

[k1].CurrentRegion.Copy[a1]

[L2].Interior.Color= RGB(35, 70, 90)

[k1].CurrentRegion.Copy[z100]

End Sub

Sub CreateDiagram(Src As Worksheet, factor#)

Dim sal AsSmartArtLayout, QNode As SmartArtNode, QNodes As SmartArtNodes, oshp As Shape,L%, _

i%, r As Range, PID$, mn, mx, ws As Worksheet, crar(), c%, ad, v, t, s As ShapeRange,boss

c = 1

ReDim crar(1To c)

Set ws =ActiveSheet

For i = 1 Tows.Shapes.Count

ws.Shapes(1).Delete

Next

Select CaseVal(Application.Version)

' Excel 2013

Case 15

Set sal =Application.SmartArtLayouts(89)

Set oshp = ws.Shapes.AddSmartArt(sal)

' Excel 2016

Case 16

Set oshp = ActiveSheet.Shapes.AddSmartArt(Application.SmartArtLayouts_

("urn:microsoft.com/office/officeart/2008/layout/NameandTitleOrganizationalChart"))

End Select

oshp.Top =[a50].Top

Set QNodes =oshp.SmartArt.AllNodes

For i = 1 To 5

'初始节点

oshp.SmartArt.AllNodes(1).Delete

Next

'查找根节点

L = 2

boss = [b2]

Do While Src.Cells(L, 1) <> ""

If Src.Cells(L, 2) = Src.Cells(L, 3) Then

Set QNode = oshp.SmartArt.AllNodes.Add

QNode.TextFrame2.TextRange.Text =Src.Cells(L, 2)

'父节点

PID = Src.Cells(L, 2)

Src.Rows(L).Delete

AddChildNodes QNode, Src, PID

Else

L = L + 1

End If

Loop

oshp.SmartArt.AllNodes(1).TextFrame2.TextRange.Text= boss

oshp.Width =1000

oshp.Height =700

oshp.Select

CommandBars.ExecuteMso("SmartArtConvertToShapes")

With Selection

.ShapeRange.IncrementRotation 180

'整体大小

.ShapeRange.ScaleWidth factor, msoFalse,msoScaleFromBottomRight

.ShapeRange.ScaleHeight factor, msoFalse,msoScaleFromBottomRight

.Ungroup

End With

Set r =ws.[a2]

On Error Resume Next

For i = 1 Tows.Shapes.Count

r = ws.Shapes(i).Height

Set r = r.Offset(1)

Next

mn =WorksheetFunction.Min([a:a])

mx =WorksheetFunction.Max([a:a])

For i =ws.Shapes.Count To 1 Step -1

If ws.Shapes(i).Height = mn Thenws.Shapes(i).Delete

If ws.Shapes(i).Height = mx Then

crar(c) = ws.Shapes(i).Name

c = c + 1

ReDim Preserve crar(1 To c)

End If

Next

On Error GoTo 0

For i =LBound(crar) To UBound(crar)

If Len(crar(i)) Then

v =Split(ws.Shapes(crar(i)).TextFrame2.TextRange.Text, vbLf)(0)

Set r =Range("aa:aa").Find(v, [aa1], xlValues, 1)

ad = r.Offset(, 2)

ws.Shapes(crar(i)).Fill.ForeColor.RGB =r.Interior.Color

Set s = ws.Shapes.Range(Array(crar(i)))

s.TextFrame2.TextRange.Font.Bold =msoTrue

s.TextFrame2.TextRange.Font.Name ="+mj-lt"

'轮廓线

If r.Offset(, 4) = "O" Then

With s.Line

.Weight = 4

.Visible = msoTrue

.ForeColor.RGB = RGB(200, 25,55)

.Transparency = 0.1

End With

End If

ws.Shapes.AddShape(62, 10, 10,ws.Shapes(crar(i)).Width / 2.5, ws.Shapes(crar(i)).Height / 3).Name = _

ws.Shapes(crar(i)).Name &"aux"

With ws.Shapes(ws.Shapes(crar(i)).Name& "aux")

.Left = ws.Shapes(crar(i)).Left

.Top = ws.Shapes(crar(i)).Top +ws.Shapes(crar(i)).Height

.Line.ForeColor.SchemeColor = 1

.Line.Transparency = 1

.Fill.Visible = msoFalse

.TextFrame.Characters.Text =FormatPercent(ad, 0, vbTrue, vbFalse, -2)

.TextFrame.Characters(1,Len(ad)).Font.Size = 9

.TextFrame.Characters(1,Len(ad)).Font.ColorIndex = 0

.TextFrame.Characters(1,Len(ad)).Font.Bold = 1

If ad = 0 Then.TextFrame.Characters.Text = "0%"

End With

End If

Next

End Sub

Sub AddChildNodes(QNode As SmartArtNode, Source As Worksheet, PID$)

Dim L%, Found As Boolean, ParNode As SmartArtNode, CurPid$, ad

L = 2

'仍没有找到

Found = False

Do While Source.Cells(L, 1) <> ""

If Source.Cells(L, 3) = PID Then

Set ParNode = QNode

Set QNode = QNode.AddNode(msoSmartArtNodeBelow)

QNode.TextFrame2.TextRange.Text =Cells(L, 2) & vbLf & Cells(L, 5)

'当前父节点

CurPid = Source.Cells(L, 2)

'找到一些

If Not Found Then Found = True

Source.Rows(L).Delete

AddChildNodes QNode, Source, CurPid

Set QNode = ParNode

'已排序,找不到其他任何东西

ElseIf Found Then

Exit Do

Else

L = L + 1

End If

Loop

End Sub

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-09-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 完美Excel 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
VBA实战技巧35:使用VBA组织图形2
引言:本文的代码与昨天发表的《VBA实战技巧34:使用VBA组织图形1》一样,都整理自mrexcel.com,一个很好的令人兴奋的示例,有兴趣的朋友可以仔细研究。
fanjy
2021/09/22
1.8K0
ExcelVBA取序号与合计之间的数据
哆哆Excel
2024/05/11
1600
ExcelVBA取序号与合计之间的数据
EXCEL VBA语句集300
        定制模块行为 (1) Option Explicit ‘强制对模块内所有变量进行声明 Option Private Module ‘标记模块为私有,仅对同一工程中其它模块有用,在宏对话框中不显示  Option Compare Text ‘字符串不区分大小写  Option Base 1 ‘指定数组的第一个下标为1 (2) On Error Resume Next ‘忽略错误继续执行VBA代码,避免出现错误消息 (3) On Error GoTo ErrorHandler ‘当错误发生时跳转到过程中的某个位置 (4) On Error GoTo 0 ‘恢复正常的错误提示 (5) Application.DisplayAlerts=False ‘在程序执行过程中使出现的警告框不显示 (6) Application.ScreenUpdating=False ‘关闭屏幕刷新 Application.ScreenUpdating=True ‘打开屏幕刷新 (7) Application.Enable.CancelKey=xlDisabled ‘禁用Ctrl+Break中止宏运行的功能  工作簿 (8) Workbooks.Add() ‘创建一个新的工作簿 (9) Workbooks(“book1.xls”).Activate ‘激活名为book1的工作簿 (10) ThisWorkbook.Save ‘保存工作簿 (11) ThisWorkbook.close ‘关闭当前工作簿 (12) ActiveWorkbook.Sheets.Count ‘获取活动工作薄中工作表数 (13) ActiveWorkbook.name ‘返回活动工作薄的名称 (14) ThisWorkbook.Name ‘返回当前工作簿名称 ThisWorkbook.FullName ‘返回当前工作簿路径和名称 (15) ActiveWindow.EnableResize=False ‘禁止调整活动工作簿的大小 (16) Application.Window.Arrange xlArrangeStyleTiled ‘将工作簿以平铺方式排列 (17) ActiveWorkbook.WindowState=xlMaximized ‘将当前工作簿最大化  工作表 (18) ActiveSheet.UsedRange.Rows.Count ‘当前工作表中已使用的行数 (19) Rows.Count ‘获取工作表的行数(注:考虑向前兼容性) (20) Sheets(Sheet1).Name= “Sum” ‘将Sheet1命名为Sum (21) ThisWorkbook.Sheets.Add Before:=Worksheets(1) ‘添加一个新工作表在第一工作表前 (22) ActiveSheet.Move After:=ActiveWorkbook. _ Sheets(ActiveWorkbook.Sheets.Count) ‘将当前工作表移至工作表的最后 (23) Worksheets(Array(“sheet1”,”sheet2”)).Select ‘同时选择工作表1和工作表2 (24) Sheets(“sheet1”).Delete或 Sheets(1).Delete ‘删除工作表1 (25) ActiveWorkbook.Sheets(i).Name ‘获取工作表i的名称 (26) ActiveWindow.DisplayGridlines=Not ActiveWindow.DisplayGridlines ‘切换工作表中的网格线显示,这种方法也可以用在其它方面进行相互切换,即相当于开关按钮 (27) ActiveWindow.DisplayHeadings=Not ActiveWindow.DisplayHeadings ‘切换工作表中的行列边框显示 (28) ActiveSheet.UsedRange.FormatConditions.Delete ‘删除当前工作表中所有的条件格式 (29) Cells.Hyperlinks.Delete ‘取消当前工作表所有超链接 (30) ActiveSheet.PageSetup.Orientation=xlLandscape 或ActiveSheet.PageSetup.Orientation=2 ‘将页面设置更改为横向 (31) ActiveSheet.PageSetup.RightFooter=ActiveWorkbook.FullName ‘在页面设置的表尾中输入文件路径 ActiveSheet.PageSetup.Le
Tony老师
2020/03/05
2.3K0
Excel实战技巧74: 在工作表中创建搜索框来查找数据
如下图1所示,在数据区域上方放置有一个文本框,用来输入要搜索的文本,其名称重命名为“MySearch”;一个用作按钮的矩形形状,点击它开始搜索并显示结果;两个选项按钮窗体控件,用来选择在数据区域的哪列进行搜索。
fanjy
2020/02/18
17.3K1
VBA字典(详解,示例)「建议收藏」
如果对上面水果种类进行计数:countifs,只需要将分类汇总的值改为数值1即可,每出现一次‘+1’
全栈程序员站长
2022/07/22
6.5K1
VBA字典(详解,示例)「建议收藏」
Excel应用实践14:合并多个工作簿中的数据—示例3
要合并工作簿的情形有许多种,但最终的目的只有一条,将繁锁的手工操作自动化,让程序快速帮助我们完成这些重复的工作。
fanjy
2019/07/19
1.7K0
ExcelVBA End属性查找”最后”的单元格
'等同于按键 (End+向上键、End+向下键、End+向左键、End+向右键),或者CTRL+上下左右
哆哆Excel
2022/10/25
1.7K0
ExcelVBA End属性查找”最后”的单元格
VBA汇总一个文件多工作表到一个表
VBA汇总一个文件多工作表到一个表 . 今天在工作中,同事传来一个excel文件中有很多个工作表,要我汇总,每个表的标题是一样的,虽然一个一个复制、粘贴是可以做到的,但时间很长,所以把以前学习一个代码,拿来用一下,代码找了很久才找到,想想还是把他放在这里好一点,以后查找方便 . 把多个工作表的内容汇总到一个“汇总”表中 Sub sheets_to_one() Dim mysht As Worksheet, rng As Range, sht As Worksheet Dim
哆哆Excel
2022/10/31
5830
VBA示例:查找并分别列出找到的所有值
如下图1所示,有一系列数据,其中Yl代表“Yellow”,Re代表“Red”,Bl代表“Blue”,Gr代表“Green”。
fanjy
2024/06/04
4420
VBA示例:查找并分别列出找到的所有值
Excel实战技巧54: 创建导航工作表
当工作簿中的工作表不多时,我们只需要单击底部的工作表名到达想要操作的工作表。然而,当有很多工作表时,要找到想要的工作表就需要边单击滚动按钮边查找工作表,这可能要花点时间了。
fanjy
2019/09/24
1.1K0
Excel实战技巧54: 创建导航工作表
使用VBA实现多个值组合查找
假设工作表中包含三列,即列A中是水果名,列B中是颜色,列C中是产地,现在查找同时包含“apple”、“red”和“Hungary”的行,可以使用下面的代码:
fanjy
2024/03/11
3980
使用VBA实现多个值组合查找
小游戏2048
用Excel VBA来实现的手机上玩的那种组合数字的小游戏。 Public Row As Integer, Col As Integer '偏移 Di
xyj
2020/07/28
8040
小游戏2048
仿Excel的撤销功能
这是在www.vbaexpress.com中看到的一个示例,实现了自己以前想做而未做的事情。
fanjy
2024/05/13
2420
仿Excel的撤销功能
Excel应用实践11:合并多个工作簿中的数据——示例2
在上一篇文章《Excel应用实践10:合并多个工作簿中的数据》中,我们使用代码快速合并超过50个Excel工作簿文件,然而,如果要合并的工作簿中工作表的名称不相同,但位于每个工作簿的第1个工作表;并且,要在合并后的工作表的第1列中输入相对应的工作簿文件名,以便知道合并后的数据来自哪个工作簿文件。
fanjy
2019/07/19
2.9K0
VBA实战技巧01: 在代码中引用动态调整单元格区域的5种方法
在VBA代码中,经常要引用单元格数据区域并对其进行操作。然而,如果对数据区域采用“硬编码”地址,那么当该区域大小变化时,必须修改相应的引用该区域的代码。本文整理了可以动态引用数据区域的5种方法,供编写代码时参考。
fanjy
2020/02/12
4.9K0
Excel VBA编程
在Excel中,数据只有文本,数值,日期值,逻辑值和错误值五种类型。但是在VBA中,数据类型跟Excel不完全相同。根据数据的特点,VBA将数据分为布尔型(boolean),字节型(byte),整数型(integer),单精度浮点型(single),双精度浮点型(double),货币型(currency),小数型(decimal),字符串型(string),日期型(date),对象型等等
全栈程序员站长
2022/08/11
46.7K0
Excel VBA编程
VBA:正则表达式(7) -数据整理
需求:数据保存在A列中,数据组之间使用全角逗号(,)分隔,整理之后需要将每组数据开始的圆括号部分移到末尾,并合并相同的全角方括号部分(【】)的内容。实际效果见B列。
Exploring
2023/10/04
4070
VBA:正则表达式(7) -数据整理
Excel应用实践16:搜索工作表指定列范围中的数据并将其复制到另一个工作表中
“在工作表Sheet1中存储着数据,现在想要在该工作表的第O列至第T列中搜索指定的数据,如果发现,则将该数据所在行复制到工作表Sheet2中。
fanjy
2019/07/19
6.6K0
VBA小技巧:确定工作表数据区域
在使用VBA编写程序时,有几种常用方法可以在工作表中查找包含已有数据的区域,但这些方法都多少存在一些局限。
fanjy
2022/11/16
1.3K0
使用VBA合并工作表
从多个Excel工作表(子工作表)中获取信息,并用子工作表中的所有数据填充汇总工作表(父工作表),这是很多朋友会提到的常见要求。如果部分数据是从添加新工作表到工作簿中而增长的,那么获得这些数据的汇总非常方便,例如,添加单独的工作表,包含新月份的数据。
fanjy
2022/11/16
2.1K0
使用VBA合并工作表
相关推荐
VBA实战技巧35:使用VBA组织图形2
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档