excel矩阵数据怎么绘制线条(excel矩阵数据比较)

2022-10-21 0 536

excel矩阵数据怎么绘制线条

Q:如下所示,左侧是一个4行4列的数值矩阵,要使用VBA根据这些数值绘制右侧的图形。

excel矩阵数据怎么绘制线条(excel矩阵数据比较)

绘制规则是这样的:找到最小的数值(忽略),将其与第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

:本文采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可, 转载请附上原文出处链接。
1、本站提供的源码不保证资源的完整性以及安全性,不附带任何技术服务!
2、本站提供的模板、软件工具等其他资源,均不包含技术服务,请大家谅解!
3、本站提供的资源仅供下载者参考学习,请勿用于任何商业用途,请24小时内删除!
4、如需商用,请购买正版,由于未及时购买正版发生的侵权行为,与本站无关。
5、本站部分资源存放于百度网盘或其他网盘中,请提前注册好百度网盘账号,下载安装百度网盘客户端或其他网盘客户端进行下载;
6、本站部分资源文件是经压缩后的,请下载后安装解压软件,推荐使用WinRAR和7-Zip解压软件。
7、如果本站提供的资源侵犯到了您的权益,请邮件联系: 442469558@qq.com 进行处理!

猪小侠源码-最新源码下载平台 软件教程 excel矩阵数据怎么绘制线条(excel矩阵数据比较) https://www.20zxx.cn/425025/xuexijiaocheng/rjjc.html

猪小侠源码,优质资源分享网

常见问题
  • 本站所有资源版权均属于原作者所有,均只能用于参考学习,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担
查看详情
  • 最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,建议提前注册好百度网盘账号,使用百度网盘客户端下载
查看详情

相关文章

官方客服团队

为您解决烦忧 - 24小时在线 专业服务