常用功能加载宏——单元格数字与文本转换
使用Excel主要就是做表格,表格自然离不开数字,特别是对于会计专业的,每天都要处理大量的表格,大量的数字。
Excel为了方便使用者,对于单元格的格式是非常的开放的,数字不但可以作为加减乘除用的常规数字,还可以作为文本。很多新手都会碰到数字存储格式上造成的问题,因为没有注意到数字真正存储的格式。
1、数字的两种存储格式
要判断一个数字是常规的数字还是文本,最简单的判断是:
- 默认单元格是常规的格式下,如果数字是靠右边对齐的,那么它就是常规的数字,如果是靠左边对齐的,那么就是文本。
- 如果数字存储格式是文本,单元格左上角会有一个绿色的小三角,选中这个单元格后,还会出现一个“!”,点击这个“!”可以把数字转换为常规的数字。
2、“眼见为虚”
Excel为了尽量方便操作,对于这些格式都是非常的包容的,很多公式在处理以文本形式存储的数字的时候,也会自动转换。
这也就导致很多Excel的使用者对于数字的存储非常的不在意,因为不管是常规的数字还是文本,都可以正常的进行加减乘除,完全不用太过关心。
但是在某些函数使用的时候,比如VLookup函数,如果要查找的数据和查找范围内的数据是不同存储格式,VLookup函数会返回错误。很多新手就会用Ctrl+F的查找框去查找,然后会非常不理解VLookup函数,明明看见用Ctrl+F的查找框能找到的东西,函数却返回错误!
3、数字格式转换
数字的两种存储格式,在Excel里都有它的用处,常规的数字就不用说了,表格里到处都是这些数字。
文本形式存储的数字也有它的用处,比如身份证号码,如果以常规形式输入的话,你会发现超过了15位后,数字都变为了0,这是因为Excel只能保留16位的有效数字,所以要存储超过了15位的数字,就必须使用文本格式。
在Excel里,假如有一列常规的数字,你想把它转换为文本形式存储的数字,你可能会这样去操作:
- 选中它
- 右键设置格式为文本
- 发现数字左对齐了,这时候你可能以为已经搞定了!
可事实上,这个东西还是“眼见为虚”的,它仅仅是看起来变化了,实际内部存储的还是数字,必须进入编辑状态,再回车才行,这个时候就会出现那个小三角!
反之也是一样的。
对Excel熟悉的人会使用分列功能来完成数字与文本的转换,用VBA来实现转换功能自然也没有问题:
首先在customUI.xml中增加代码:
<menu id="rbmenuNumber" label="数字处理 " size="large" imageMso="FormattingUnique">
<button id="rbbtnText2Num" label="文本转数字" onAction="rbbtnText2Num" imageMso="CombineCharacters"/>
<button id="rbbtnNum2Text" label="数字转文本" onAction="rbbtnNum2Text" imageMso="WrapText"/>
</menu>
回调函数:
Sub rbbtnText2Num(control As IRibbonControl)
Call MRange.Text2Num
End Sub
Sub rbbtnNum2Text(control As IRibbonControl)
Call MRange.Num2Text
End Sub
函数实现:
Sub Text2Num()
Dim selectRng As Range
Dim arr As Variant
'确保选中的是单元格
If TypeName(Selection) = "Range" Then
Set selectRng = Selection
'设置单元格为常规格式
selectRng.NumberFormatLocal = "G/通用格式"
'读取单元格数据,Excel会根据数据的特点自动转换格式
arr = selectRng.Value
selectRng.Value = arr
End If
Set selectRng = Nothing
End Sub
Sub Num2Text()
Dim selectRng As Range
Dim arr() As Variant
Dim i As Long, j As Long
'确保选中的是单元格
If TypeName(Selection) = "Range" Then
Set selectRng = Selection
'设置单元格为文本格式
selectRng.NumberFormatLocal = "@"
If selectRng.Cells.Count > 1 Then
arr = selectRng.Value
For i = 1 To UBound(arr)
For j = 1 To UBound(arr, 2)
'将数据转换为文本
arr(i, j) = VBA.CStr(arr(i, j))
Next
Next
selectRng.Value = arr
Else
selectRng.Value = VBA.CStr(selectRng.Value)
End If
End If
Set selectRng = Nothing
End Sub
- 简单易学的机器学习算法——协同过滤推荐算法(2)
- 详解ROC/AUC计算过程
- 汉字数组排序及如何检测汉字
- 简单易学的机器学习算法——主成分分析(PCA)
- 基于Xgboost + LR + Keras 建模评估用户信用状态
- canvas实现拖动页面时显示窗口视频
- 鼠标滚轮事件介绍
- Understanding delete
- objC与js通信实现--WebViewJavascriptBridge
- 简单易学的机器学习算法——岭回归(Ridge Regression)
- QQ空间(日志、说说、个人信息)python爬虫源码(一天可抓取 400 万条数据)
- 文本分类实战: 机器学习vs深度学习算法对比(附代码)
- ReactJS分析之入口函数render
- 简单易学的机器学习算法——SVD奇异值分解
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 程序员进阶之算法练习(四十七)
- Git 合并多个 commit,保持历史简洁
- Vue开源项目使用探索
- 自定义View | 仿QQ运动步数进度效果
- TS 设计模式05 - 装饰者模式
- 四、学编程语言前,不了解Git,怎么入坑
- 【设计模式系列(三)】彻底搞懂原型模式
- 分享一个可以装逼的开发技巧
- 各位相加,直到得到一个一位的整数
- BFE.dev前端刷题64 - Promise reject的时候自动retry
- 顺序消息管道《Message Pipe》v1.0.1版本发布
- Qt音视频开发23-通用视频控件
- 破解Mariadb5.5密码
- redis学习(七)
- 自己实现一个SAP WebClient UI Repository Information System