如何使用递归函数实现Excel列号转换列标

在Excel中,列标与列号转换是VBA开发过程中经常用到的功能,下面这篇博客为大家解释了多种方法。

Excel列标与列号转换

那么这篇博文的核心是“递归过程”,实现这个功能并不是必须使用递归过程,但是这也不失为一种实现方法,对于大家理解和递归过程是个不错的案例。

递归过程从算法上看貌似很复杂,其实简单的说就是,代码过程中包含调用自身过程的代码,这样就构成了嵌套调用,当然需要合理的涉及编程逻辑,确保递归过程能够正确的结束执行。

示例代码如下。

Function sGetColumnIndex(lngColNum As Long) As String
    If lngColNum > 26 Then
        sGetColumnIndex = sGetColumnIndex(CLng((lngColNum - 1) \ 26)) & VBA.Chr((lngColNum - 1) Mod 26 + 65)
    Else
        sGetColumnIndex = VBA.Chr((lngColNum - 1) Mod 26 + 65)
    End If
End Function

【代码解析】

假设调用函数的VBA代码为Debug.Print sGetColumnIndex(731)
下面解释一下代码的执行过程,下文中[X-Y]代表第X次调用自定义函数,执行其中的第Y行代码。
[1-1]: 调用函数sGetColumnIndex(731)
[1-2]: 满足条件
[1-3]: 再次调用函数sGetColumnIndex(28)得到结果才能和’VBA.Chr(67)'的结果进行合并运算
[2-1]: 调用函数sGetColumnIndex(28)
[2-2]: 满足条件
[2-3]: 再次调用函数sGetColumnIndex(1)得到结果才能和’VBA.Chr(66)‘的结果进行合并运算
[3-1]: 调用函数sGetColumnIndex(1)
[3-2]: 不满足条件,跳转至 [3-4]
[3-5]: sGetColumnIndex赋值为’VBA.Chr(65)’,即返回值为A
[3-6]: 判断语句结束
[3-7]: 第3次调用结束,返回第3次调用的调用点
继续执行 [2-3]: sGetColumnIndex(1)结果为A,'VBA.Chr(66)'的结果为B,此时sGetColumnIndex赋值为AB
[2-6]: 判断语句结束
[2-7]: 第2次调用结束,返回第2次调用的调用点
继续执行 [1-3]: sGetColumnIndex(28)结果为AB,'VBA.Chr(67)'的结果为C,此时sGetColumnIndex赋值为ABC
[1-6]: 判断语句结束
[1-7]: 结束程序执行,输入结果ABC

虽然只有7行代码,但是被反复调用多次,如果大家看上面的文字仍然无法理解执行过程,那么可以在VBE中,使用单步执行功能,逐步运行代码,再对照上面的文字解释。

第3次调用时,按【Ctrl+L】组合键可以打开【堆栈】对话框查看调用过程,如下图所示。

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

JavaScript实现输入圆的半径,输出周长、体积和面积的代码

以下为输入圆的半径,输出周长、体积和面积实现结果的代码和运行截图 目录 前言 一、请输入圆的半径,输出周长、体积和面积 1.1运行流程及思想 1.2代码段 1.3 JavaScript语句代码 1.4运行截图 前言 1.若有选择,您可以在目录里进行快速查找; 2.本博…

03 KVM虚拟机镜像制作

文章目录 03 KVM虚拟机镜像制作3.1 概述3.2 制作镜像3.2.1 使用root用户安装qemu-img软件包3.2.2 使用qemu-img工具的创建镜像文件 3.3 修改镜像磁盘空间大小3.3.1 查询当前虚拟机镜像磁盘空间大小3.3.2 修改镜像磁盘空间大小3.3.3 查询修改后的镜像磁盘空间大小 03 KVM虚拟机镜…

【HTML 标签详解】

🎉🎉🎉点进来你就是我的人了博主主页:🙈🙈🙈戳一戳,欢迎大佬指点! 欢迎志同道合的朋友一起加油喔🦾🦾🦾 目录 1. HTML结构 1.1 HTML 基本结构 1.2 标签层…

DBeaver 没有菜单项 生成SQL Generate SQL

文章目录 Intro问题的根本有无该菜单项取决于你的查询SQL是单表还是多表?单表查询的结果集的菜单多表关联查询的结果集的菜单 测试版本 Intro DBeaver 是一款很棒的多平台、支持多数据源的GUI数据库客户端。 有一个我经常使用的功能就是: 当我查询到一个…

Linux内核阅读自学精简教程目录(必读)

学习Linux内核需要一定的计算机基础知识,包括操作系统,计算机网络等。 以下是学习Linux内核的步骤: 了解Linux内核的基本概念和架构,学习Linux内核源代码的组成和结构。学习C语言和汇编语言,这是深入理解Linux内核的…

界面控件DevExpress WinForm的垂直网格,让数据展示更灵活(二)

DevExpress WinForm Vertical Grid(垂直网格)组件设计用于提供UI灵活性,它允许显示数据集中的单个行,或在其90度反向网格容器中显示多个数据集行。此外,开发者还可以将其用作属性网格,就像在Visual Studio …

Python使用pytorch深度学习框架构造Transformer神经网络模型预测红酒分类例子

1、红酒数据介绍 经典的红酒分类数据集是指UCI机器学习库中的Wine数据集。该数据集包含178个样本,每个样本有13个特征,可以用于分类任务。 具体每个字段的含义如下: alcohol:酒精含量百分比 malic_acid:苹果酸含量&a…

用手机APP操作使用井用采样器更省时省力

井用采样器的主要功能特点就是:机身小巧,方便操作。可用于井下作业,手机APP可实时查看采样数据,节省人力。 利用自动采样器进行水样采集可以说节省很大的人力物力,但是有时为了采到更具代表性的水样,我们需…

JAVA-6-[Spring框架]Bean的作用域和生命周期

1 Spring Bean 1、Spring有两种类型bean,一种普通bean,另外一种工厂bean(FactoryBean)。 2、普通bean:在配置文件中定义的bean类型就是返回的类型。 3、工厂bean:在配置文件中定义的bean类型可以和返回类型不一样。 第一步 创建类…

React超级简单易懂全面的有关问题回答(面试)

目录 React事件机制: 2、React的事件和普通的HTML有什么不同: - 事件命名的规则不同,原生事件采用全小写,react事件采用小驼峰 3、React组件中怎么做事件代理?他的原理是什么? 4、React高阶组件、Rend…

mysql 如何避免索引失效

案例演示 建表及初始化数据 CREATE TABLE staffs (id INT PRIMARY KEY AUTO_INCREMENT,NAME VARCHAR(24) NOT NULL DEFAULT ,age INT NOT NULL DEFAULT 0,pos VARCHAR(20) NOT NULL DEFAULT ,#职位add_time TIMESTAMP NOT NULL DEFAULT CURREN…

【源码解析】SpringBoot日志系统源码分析

LoggingApplicationListener 日志组件的处理是LoggingApplicationListener实现的。LoggingApplicationListener#onApplicationEvent&#xff0c;监听事件。如果实现接口GenericApplicationListener&#xff0c;可以允许适配事件类型。 private static final Class<?>[]…

链接sqlite

一.sqlite库函数 1.sqlite3_open()函数 语法&#xff1a;*sqlite3_open(const char *filename, sqlite3 *ppDb) 作用&#xff1a;该例程打开一个指向 SQLite 数据库文件的连接&#xff0c;返回一个用于其他 SQLite 程序的数据库连接对象。 参数1&#xff1a;如果 filename …

8个免费的PNG素材网站推荐

很多设计小白都不知道什么是PNG。事实上&#xff0c;PNG是一种支持透明度的图像格式。当你想在设计中将图像与背景或文本混合时&#xff0c;它就会派上用场。 如果你没有时间为你正在处理的设计创建透明的PNG图像&#xff0c;你也可以使用我收集的PNG素材网站&#xff0c;以便…

Mysql-SQL优化

SQL优化 插入数据优化1&#xff09;批量插入数据2&#xff09;手动控制事务3&#xff09;主键顺序插入大批量插入数据 主键优化order by优化group by优化limit优化count优化update优化小结 插入数据优化 插入数据优化主要是对于insert进行批量插入时优化&#xff0c;下面我们就…

d3.js学习笔记②搭建服务器(含报错解决)

强烈建议自己搭建一个服务器&#xff0c;否则在后续往js里导入本地数据&#xff08;比如csv、json文件等&#xff09;的时候会报错。我用的是Apache服务器&#xff0c;下载、安装过程参考这篇文章&#xff1a;Apache安装配置 在浏览器输入http://localhost/或者http://127.0.0…

excel实战小测第四

【项目背景】 本项目为某招聘网站部分招聘信息&#xff0c;要求对“数据分析师”岗位进行招聘需求分析&#xff0c;通过对城市、行业、学历要求、薪资待遇等不同方向进行相关性分析&#xff0c;加深对数据分析行业的了解。 结合企业真实招聘信息&#xff0c;可以帮助有意转向数…

一文看懂数据分析必备计算功能—内存计算

各位数据的朋友&#xff0c;大家好&#xff0c;我是老周道数据&#xff0c;和你一起&#xff0c;用常人思维数据分析&#xff0c;通过数据讲故事。 接下来&#xff0c;我们准备讲一系列的奥威BI软件的内存计算在各种分析场景中的应用。在正式开讲之前&#xff0c;我先简单说一下…

嵌入式设备显示屏相关概念汇总

嵌入式设备常用的显示屏接口 LCD 接口&#xff1a;是一种常见的数字电路接口&#xff0c;支持多种显示器件&#xff0c;如字符型液晶显示器和点阵型液晶显示器等。 VGA 接口&#xff1a;是一种视频接口标准&#xff0c;用于连接显示器和计算机。该接口提供模拟 RGB 信号&#…

快速多关键字统计

实例需求&#xff1a;在每个章节中统计关键字&#xff08;“√”, “”, “〇”, “空缺”&#xff09;的个数&#xff0c;B列中的章节编号作为章节划分的标识&#xff0c;例如1.1.1 ~ 1.1.5为第1.1章节&#xff0c;对应工作表的12 ~ 16行&#xff0c;其中黄色列为需要统计的数…