Excel数据检视——对角线连续数据连线

实例需求:数据表如下图所示,现需要根据规则,在符合要求的单元格上,添加连线。

  • 连续单元格位于对角线方向
  • 单元格内容相同
  • 连续单元格数量不少于7个

在这里插入图片描述

示例代码如下。

Sub LT2RB()Dim objDic As Object, rngData As Range, bFlag As BooleanDim i As Long, j As Long, r As Long, c As Long, sKey As StringDim arrData, RowCnt As Long, ColCnt As Long, iCount As LongDim oSht1 As Worksheet, oSht2 As WorksheetDim sCell As Range, eCell As RangeConst S_ROW = 5Const S_COL = 2Set rngData = Cells(S_ROW, S_COL).CurrentRegionarrData = rngData.ValueRowCnt = UBound(arrData)ColCnt = UBound(arrData, 2)For i = 1 To ColCntFor j = 1 To RowCntbFlag = FalseIf i = 1 Or j = 1 ThenbFlag = TrueElser = j - 1: c = i - 1If r < 1 Then r = 1If c < 1 Then c = 1If Not arrData(j, i) = arrData(r, c) Then bFlag = TrueEnd IfIf bFlag ThensKey = arrData(j, i)iCount = 0: r = j: c = iSet sCell = Cells(S_ROW + r - 1, S_COL + c - 1)DoIf sKey = arrData(r, c) TheniCount = iCount + 1Set eCell = Cells(S_ROW + r - 1, S_COL + c - 1)ElseIf iCount > 6 ThenDebug.Print sCell.Address, eCell.AddressAddLine sCell, eCellEnd IfiCount = 1sKey = arrData(r, c)Set sCell = Cells(S_ROW + r - 1, S_COL + c - 1)End Ifr = r + 1: c = c + 1Loop Until r = RowCnt + 1 Or c = ColCnt + 1If iCount > 6 ThenDebug.Print sCell.Address, eCell.AddressAddLine sCell, eCellEnd IfEnd IfNext jNext i
End Sub

【代码解析】
LT2RB代码过程实现左上到右下的数据查找。
第7~8行代码定义数据表格的起始行和列。
第9行代码获取数据表区域。
第10行代码将数据表加载到数组中。
第11~12行代码获取数据表的行数和列数。
第13~14行代码循环遍历数据表中每个单元格。
第15行代码初始化标志变量bFlag。
第16行代码判断是否为首行或者首列单元格。
如果满足条件,第17行代码设置bFlag为True,否则行和列减一,即arrData(r, c)和arrData(j, i) 为对角线上相邻的两个单元格,如果二者不等,第22行设置bFlag为True。
如果bFlag至为True,arrData(j, i)与其左上相邻单元格内容不同,那么将开始一个新的查找。
第25行代码将查找值保存到变量sKey中。
第26行代码初始化变量。
第27行代码将线条的起始单元格保存在变量sCell中。
第28~42行代码循环查找对角线的单元格。
第29行代码判断对角线上相邻单元格是否相同。
如果二者相同,第30行代码计数器累加一,第31行代码将线条的结束单元格保存在变量eCell中。
如果二者不同,第33行代码判断当前的计数器是否满足条件(至少7个)。
如果满足条件,第35行代码将调用AddLine添加线条。
如果不满足,第37行代码将计数器重置为1,第38行代码跟新查找值,第40行代码更新线条起始单元格,开始新的一次查找。
第41行代码行号和列号递增一。
第42行代码循环退出条件为行或者列超出数据表范围。
第4346行代码与第3336行代码相同,不再赘述。


Sub LB2RT()Dim objDic As Object, rngData As Range, bFlag As BooleanDim i As Long, j As Long, r As Long, c As Long, sKey As StringDim arrData, RowCnt As Long, ColCnt As Long, iCount As LongDim oSht1 As Worksheet, oSht2 As WorksheetDim sCell As Range, eCell As RangeConst S_ROW = 5Const S_COL = 2Set rngData = Cells(S_ROW, S_COL).CurrentRegionarrData = rngData.ValueRowCnt = UBound(arrData)ColCnt = UBound(arrData, 2)For i = 1 To ColCntFor j = 5 To RowCntbFlag = FalseIf i = 1 Or j = RowCnt ThenbFlag = TrueElser = j + 1: c = i - 1If r > RowCnt Then r = RowCntIf c < 1 Then c = 1If Not arrData(j, i) = arrData(r, c) Then bFlag = TrueEnd IfIf bFlag ThensKey = arrData(j, i)iCount = 0: r = j: c = iSet sCell = Cells(S_ROW + r - 1, S_COL + c - 1)DoIf sKey = arrData(r, c) TheniCount = iCount + 1Set eCell = Cells(S_ROW + r - 1, S_COL + c - 1)ElseIf iCount > 6 ThenDebug.Print sCell.Address, eCell.AddressAddLine sCell, eCellEnd IfiCount = 1sKey = arrData(r, c)Set sCell = Cells(S_ROW + r - 1, S_COL + c - 1)End Ifr = r - 1: c = c + 1Loop Until r = 0 Or c = ColCnt + 1If iCount > 6 ThenDebug.Print sCell.Address, eCell.AddressAddLine sCell, eCellEnd IfEnd IfNext jNext i
End Sub

【代码解析】
LB2RT代码过程实现左下到右上的数据查找,其原理与LT2RB类似。


Sub Main()ActiveSheet.DrawingObjects.DeleteLT2RBLB2RT
End Sub
Sub AddLine(s As Range, e As Range)ActiveSheet.Shapes.AddConnector(msoConnectorStraight, _s.Left + s.Width / 2, s.Top + s.Height / 2, _e.Left + e.Width / 2, e.Top + e.Height / 2).SelectWith Selection.ShapeRange.Line.Visible = msoTrue.Weight = 2End With
End Sub

【代码解析】
第2行代码清除工作表中的全部线条。
第3~4行代码分别调用两个Sub过程查找对角线数据。
第6~14行代码用于条件线条。
第7~9行代码添加一个线条对象,并选中该对象。
第11行代码设置线条对象可见。
第11行代码设置线条粗度为2。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1545369.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

【运维自动化-作业平台】如何使用全局变量之命名空间类型?

命名空间类型的全局变量主要适用场景是同一批主机在多个步骤间需要传递独立的变量值&#xff0c;比如内网ip、hostame&#xff0c;每台主机都是不同的变量值。而字符串变量是全局针对所有主机所有步骤都是一样的变量值。实操演示 例&#xff1a;定义一个local_ip的命名空间变量…

SPSS26统计分析笔记——5 卡法检验

1 卡方检验原理 卡方检验由卡尔皮尔逊&#xff08;Karl Pearson&#xff09;于1900年首次提出&#xff0c;是一种针对频数数据&#xff08;定类数据或计数数据&#xff09;的假设检验方法。它通过比较实际观测次数与理论期望次数之间的差异&#xff0c;构造出 χ 2 {\chi^2} χ…

弹性盒模型关键几个点:

下面代码保存为文件&#xff1a;style.css /* 弹性盒模型 */ .flex-box { width: 600px; height: 200px; border: 2px solid #000; /* 黑色边框 */ margin: 20px; /* 外边距 */ /* 弹性盒模型的关键&#xff1a;justify-content同主轴方向 align-items是交叉轴方向。比如…

这样做PPT也太酷了吧,27.9kstar,适合开发者的ppt工具推荐

1 slidev简介 slidev 是一个基于 Vue 开发的网页演示文稿工具,主要功能是将 Markdown 文档转换为演示幻灯片。 为开发者打造的演示文稿工具 Slidev最大的优势在于整个演示文稿内容的编写采用简单的Markdown格式,这极大降低了创作门槛。我们可以使用VS Code等编辑器高效编写Mar…

第Y1周:调用官方权重进行检测

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 一、下载源码 从本周开始YOLO的学习啦。首先是先体验一下。教案选择的是YOLOv5s GITHUB的开源地址如下 github 开源地址 打开网页之后下载zip包解压到自己想…

速度与安全:边缘计算如何改变游戏规则

Ⅰ初探边缘计算 1. 边缘计算是什么&#xff1f; 边缘计算&#xff0c;就像是城市里的便利店&#xff0c;它让数据处理不再需要长途跋涉到市中心的“超级计算机”超市&#xff0c;而是在你身边的每个角落就能快速完成。想象一下&#xff0c;你急需一杯冰咖啡&#xff0c;边缘计…

【ArcGIS Pro实操第三期】多模式道路网构建(Multi-model road network construction)原理及实操案例

ArcGIS Pro实操第三期&#xff1a;多模式道路网构建原理及实操案例 1 概述1.1 原理 2 GIS实操2.1 新建文件并导入数据2.2 创建网络数据集2.3 设置连接策略&#xff08;Setting up connectivity policies&#xff09;2.4 添加成本&#xff08;Adding cost attributes&#xff09…

如何在 Windows 台式机或笔记本电脑上恢复未保存的 Excel 文件

您的汗水很容易化为灰烬&#xff0c;如果您没有保存长时间编写的项目报告或电子表格&#xff0c;这可能会令人心碎。丢失 Windows PC 上未保存的 Excel 文件可能是导致这种情况的原因。但您不应该惊慌。仍然有机会恢复未保存的 Excel 文件。 在本指南中&#xff0c;我们将向您…

细说硫酸钙防静电地板的材质结构和优势特点

防静电地板有全钢基材的、硫酸钙基材的、铝合金基材的&#xff0c;在一些防静电要求、承载要求、铺设要求、铺装效果要求很高的场合&#xff0c;如银行、电信机房、移动机房、智能化办公室、部队指挥中心&#xff0c;通常都会使用硫酸钙防静电地板。那么什么是硫酸钙防静电地板…

《大学编译原理:语言翻译的艺术与科学》

在大学的计算机科学课程中&#xff0c;编译原理无疑是一门充满挑战与魅力的重要学科。它就像是一座连接高级编程语言和计算机硬件的桥梁&#xff0c;让程序员能够用人类易于理解的语言编写代码&#xff0c;而计算机则能高效地执行这些指令。 一、编译原理的重要性 编译原理是…

基于springboot vue 大学生竞赛管理系统设计与实现

博主介绍&#xff1a;专注于Java vue .net php phython 小程序 等诸多技术领域和毕业项目实战、企业信息化系统建设&#xff0c;从业十五余年开发设计教学工作 ☆☆☆ 精彩专栏推荐订阅☆☆☆☆☆不然下次找不到哟 我的博客空间发布了1000毕设题目 方便大家学习使用 感兴趣的…

文章解读与仿真程序复现思路——电网技术EI\CSCD\北大核心《考虑主从博弈多套餐定价与分布鲁棒机会约束的新能源共享储能优化配置研究》

本专栏栏目提供文章与程序复现思路&#xff0c;具体已有的论文与论文源程序可翻阅本博主免费的专栏栏目《论文与完整程序》 论文与完整源程序_电网论文源程序的博客-CSDN博客https://blog.csdn.net/liang674027206/category_12531414.html 电网论文源程序-CSDN博客电网论文源…

C语言:编译,链接和预处理详解

目录 一.翻译环境和运行环境 二.翻译环境 ​编辑 1.预处理&#xff08;预编译&#xff09; &#xff08;1&#xff09;.#和##运算符 ①.#运算符 ②## 运算符 &#xff08;2&#xff09;.#undef &#xff08;3&#xff09;.条件编译 ①单分支的条件编译 ②多个分支的…

由动静压之比求马赫数的MATLAB函数

函数介绍 输入&#xff1a;动静压之比 p r e pre pre 输出&#xff1a;马赫数 M a c h Mach Mach 【注】仅适合亚音速的情况&#xff0c;如果动静压之比过大或过小&#xff0c;会有相应的提示 函数源代码 function [m] pre2mach(pre) m(5*(pre1).^0.2857-5).^0.5; if pre&l…

封装左侧抽屉可拖拽组件【可多个】

一、案例效果 二、案例代码 封装抽屉组件 <template><div class"drag-drawer"><div class"out-box" :style"style"><mtd-tooltip:content"collapse ? 展开面板 : 收起面板"class"tool-tip":placeme…

AI漏扫工具:SmartScanner

SmartScanner 是一款先进的 AI 漏洞扫描工具&#xff0c;旨在帮助用户识别和修复软件、系统及网络中的安全漏洞。以下是 SmartScanner 的一些主要特点&#xff1a; 1.智能识别 通过机器学习和深度学习技术&#xff0c;SmartScanner 能够快速识别已知和未知的漏洞&#xff0c;提…

推荐一个移动端支持多框架的UI组件库

支持的前端框架&#xff1a;Vue、React、Angular 地址&#xff1a;https://ionicframework.com/docs/

Web端云剪辑解决方案,提供前端产品源码

美摄科技作为业界领先的视频技术服务商&#xff0c;匠心打造Web端云剪辑解决方案&#xff0c;以前沿技术赋能企业用户&#xff0c;开启视频创作与编辑的新纪元。 【云端赋能&#xff0c;重塑剪辑体验】 美摄科技的Web端云剪辑解决方案&#xff0c;颠覆了传统视频编辑的局限&a…

一文说透RTMP、RTSP、RTP、HLS、MPEG-DASH

实时视频传输协议 1. RTMP&#xff08;Real Time Messaging Protocol&#xff09; 简介&#xff1a;RTMP是由Adobe公司开发的实时消息传输协议&#xff0c;主要用于流媒体数据的传输。它基于TCP传输&#xff0c;具有低延迟、高可靠性的特点。特点&#xff1a;RTMP支持多种视频…

【Mysql】Centos 安装 Mysql8.0

官网下载安装包 官网地址&#xff1a;MySQL :: Download MySQL Community Server 查看服务器的名称和版本号 lsb_release -a 查看服务的架构 uname -m 下载对应的版本&#xff0c;这里操作系统选择 Red Hat 就可以了。&#xff08;CentOS 就是将 RHEL 发行的源代码从新编译…