excel矩阵数据怎么绘制线条
发布时间:2022-11-07 09:58:44
excel矩阵数据怎么绘制线条
Q:如下所示,左侧是一个4行4列的数值矩阵,要使用VBA根据这些数值绘制右侧的图形。
绘制规则是这样的:找到最小的数值(忽略),将其与第2小的数值用点划线连接,再将第2小的数值与第3小的数值用点划线连接,依此类推,直到连接到最大的数值。在连接的过程中,遇到不连接,如果两个要连接的数值之间有其他数,则从这些数值上直接跨过。如所示,连接的顺序是1-2-3-4-5-6-7-8-9-1 -11-12-13。
A:VBA代码如下:
‘在Excel中使用VBA连接单元格中的整数
‘输入: 根据实际修改rangeIN和rangeOUT变量
‘ rangeIN – 包括数字矩阵的单元格区域
‘ rangeOUT – 输出区域左上角单元格
Sub ConnectNumbers()
Dim rangeINAs Range, rangeOUT As Range
Dim cellPrev As Range
Dim cellNext As Range
Dim cell AsRange
Dim i AsInteger
Dim arrRange() As Variant
Set rangeIN= Range(“B3:E6”)
Set rangeOUT = Range(“H3”)
‘删除工作表中已绘制的形状
DeleteArrows
ReDim arrRange( )
‘在一维数组中存储单元格区域中所有大于的整数
For Each cell In rangeIN
Ifcell.Value > And _
IsNumeric(cell.Value) And _
cell.Value = Int(cell.Value) Then
‘仅存储整数
ReDim Preserve arrRange(i)
arrRange(i) = cell.Value
i =i + 1
End If
Next cell
‘排序数组(使用冒泡排序)
Call BubbleSort(arrRange)
‘遍历数组,找到单元格区域相应单元格
For i =LBound(arrRange) To UBound(arrRange) – 1
Set cellPrev = rangeIN.Find(arrRange(i), _
LookIn:=xlValues, LookAt:=xlWhole)
Set cellNext = rangeIN.Find(arrRange(i + 1), _
LookIn:=xlValues, LookAt:=xlWhole)
‘rangeOUT相对于rangeIN合适的偏离来绘制形状
Call DrawArrows(cellPrev.Offset( _
rangeOUT(1, 1).Row – rangeIN(1, 1).Row, _
rangeOUT(1, 1).Column – rangeIN(1, 1).Column), _
cellNext.Offset(rangeOUT(1, 1).Row – rangeIN(1, 1).Row, _
rangeOUT(1, 1).Column – rangeIN(1, 1).Column))
Next i
End Sub
‘冒泡排序法
Sub BubbleSort(MyArray() As Variant)
‘从小到大排序
Dim i As Long, j As Long
Dim Temp As Variant
For i =LBound(MyArray) To UBound(MyArray) – 1
For j =i + 1 To UBound(MyArray)
If MyArray(i) > MyArray(j) Then
Temp = MyArray(j)
MyArray(j) = MyArray(i)
MyArray(i) = Temp
End If
Next j
Next i
End Sub
‘从一个单元格中心绘制到另一个单元格中心的线条
Private Sub DrawArrows(FromRange As Range, ToRange As Range)
Dim dleft1 As Double, dleft2 As Double
Dim dtop1 As Double, dtop2 As Double
Dim dheight1 As Double, dheight2 As Double
Dim dwidth1As Double, dwidth2 As Double
dleft1 =FromRange.Left
dleft2 =ToRange.Left
dtop1 =FromRange.Top
dtop2 =ToRange.Top
dheight1 =FromRange.Height
dheight2 =ToRange.Height
dwidth1 =FromRange.Width
dwidth2 =ToRange.Width
ActiveSheet.Shapes.AddConnector(msoConnectorStraight, _
dleft1+ dwidth1 / 2, dtop1 + dheight1 / 2, _
dleft2+ dwidth2 / 2, dtop2 + dheight2 / 2).Select
‘格式化线条
With Selection.ShapeRange.Line
.BeginArrowheadStyle = msoArrowheadOval
.EndArrowheadStyle = msoArrowheadOval
.DashStyle = msoLineDash
.Weight= 1.75
.ForeColor.RGB = RGB( , , )
End With
End Sub
‘删除所有形状
Sub DeleteArrows()
Dim shp AsShape
For Each shp In ActiveSheet.Shapes
If shp.Connector = msoTrue Then
shp.Delete
End If
Next shp
End Sub


猜你喜欢
- Win10电脑玩红警怎么调整全屏模式?许多老玩家在使用Win10电脑在玩红色警戒游戏的时候,都觉得游戏窗口化太小了,想要将游戏全屏化,要怎么
- 在Excel中,要计算两个日期之间相差的天数间隔,可以使用DAYS360函数来计算两个日期之间相差的天数间隔。Excel2007使用DAYS
- 当苹果在 2016 年改变了人们启动 MacBook 的方式,只需打开盖子,Mac 就会开始启动。无需按电源按钮。但在实际使用中,这会带来一
- wps office 中不仅仅兼容Word、Excel、PPT三大办公套组的不同格式,还支持PDF文档的编辑与格式转换,下面就来看看在使用的
- 在Excel中录入好数据以后通常需要画图表进行辅助数据统计,其中折线图较为常用,具体该如何画折线图呢?下面是小编带来的关于excel中画折线
- 发展到今天,笔记本电脑已经成为了很多人必不可少的设备之一了。随身携带笔记本能够帮助我们随时随地解决工作以及日常的一些问题。但由于随身携带,不
- 如何使用ps给照片添加光线效果?给大家介绍如何使用ps给照片添加光线效果,一起来看看吧。对比一下原图跟效果图如下1、打开ps,导入素材。2、
- 大家知道,传统关闭网页的方式是点击页面右上角的关闭按钮,如图所示。(当然也可以使用快捷键Ctrl+W) 实际上,有些网页的末端有【关闭】按钮
- 现在很多用户都在用电脑玩各种的游戏,但是我们在玩游戏的时候经常会遇到游戏画面卡死、电脑死机的情况,很多用户不知道怎这是什么原因?造成win1
- 有Win7系统用户反映说自己的Win7系统经常会遇到没有声音,右下角小喇叭打叉的问题,这是怎么回事呢?Win7系统没有声音如何解决呢?其实这
- mac新手指南哪里有?那就赶快来macdown吧!为您带来一篇专门为Mac新手或者说Mac小白们准备的干货,不涉及高端大气带bi格的操作哦~
- txt文本文档打开后变成乱码怎么办?txt文本文档的乱码问题经常会有人遇到,其实解决方法是非常简单的,本文就给大家介绍下txt文本文档出现乱
- ①艺术字插入好了之后,切换到艺术字效果设置选项卡,看到很多可以设置的东西。 ②首先进行艺术字形状的设置,如下图。
- 不觉中,酷睿(Conroe,Core)架构已经推出12年了。在主流平台上,Intel确认了今年将推出基于14nm的Whiskey Lake,
- excel打印字体太小怎么将字体变大?excel文档打印后发现字体太小,看不清楚,该怎么办呢?这就需要我们自己来设置一下打印参数,下面我们来
- 苹果最近发布了macOS Monterey12.1版本,在此版本中苹果将iPhone和iPad上的SharePlay功能引入Mac系统中,用
- 电脑是我们日常生活中的好帮手,电脑的内存可以说是衡量一台电脑性能的重要标准之一。电脑的内存其实是和我们使用时的许多方面都有所关联的,如今的电
- flashcs6软件是一款制图软件,专业制图人员编辑图片经常会用到,更新Win11系统遇到flashcs6软件打不开的情况,怎么回事?这是由
- DirectDraw是DirectX中的关于视频输入输出的基本部分,但是这项功能也会导致一些问题产生,例如:图片显示模糊或者变黑。但是禁用这
- 如何在Excel中为数据添加单位。许多新手朋友可能会说,你不能在数字后直接进入单位吗?事实上,直接进入公司是错误的,不仅费时,而且会影响数据