VBA Excel 常用 自定义函数
1. 将 互换 Excel 列号(数字/字母)
Public Function excelColumn_numLetter_interchange(numOrLetter) As String
Dim i, j, idx As Integer
Dim letterArray
letterArray = Array("A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z")
If IsNumeric(numOrLetter) Then
If numOrLetter > 702 Then
MsgBox "只允许输入小于“703”的数字。"
Exit Function
End If
If numOrLetter > 26 Then
idx = 26
For i = 0 To 25
For j = 0 To 25
idx = idx + 1
If idx = numOrLetter Then
excelColumn_numLetter_interchange = letterArray(i) & letterArray(j)
Exit For
End If
Next j
Next i
Else
excelColumn_numLetter_interchange = letterArray(numOrLetter - 1)
End If
Else
numOrLetter = UCase(numOrLetter) '转换为大写
If Len(numOrLetter) > 1 And Len(numOrLetter) < 3 Then
idx = 26
For i = 0 To 25
For j = 0 To 25
idx = idx + 1
If letterArray(i) & letterArray(j) = numOrLetter Then
excelColumn_numLetter_interchange = idx
Exit For
End If
Next j
Next i
ElseIf Len(numOrLetter) = 1 Then
For i = 0 To 25
If letterArray(i) = numOrLetter Then
excelColumn_numLetter_interchange = i + 1
Exit For
End If
Next i
Else
MsgBox "最多只允许输入2个“字母”。"
End If
End If
End Function
2. '将 字符串中的 html实体 转换成正常字符(可用)
Public Function htmlDecodes(str As String) As String
If str = "" Then
htmlDecodes = ""
Else
str = Replace(str, "<", "<")
str = Replace(str, ">", ">")
str = Replace(str, "&", "&")
str = Replace(str, """, Chr(34))
str = Replace(str, ">", Chr(39))
htmlDecodes = str
End If
End Function
3. '返回指定元素值在数组中的 数字下标
Public Function getArrayEleId(arr, val) As Integer
Dim i As Integer
For i = 0 To UBound(arr)
If val = arr(i) Then
getArrayEleId = i
Exit For
End If
Next i
End Function
4. '打开“自动计算”
Public Sub openAutoCompute()
Application.ScreenUpdating = True
Application.DisplayStatusBar = True
Application.Calculation = xlAutomatic
Application.EnableEvents = True
ActiveSheet.DisplayPageBreaks = True
End Sub
5. '关闭“自动计算”
Public Sub closeAutoCompute()
Application.ScreenUpdating = False
Application.DisplayStatusBar = False
Application.Calculation = xlCalculationManual
Application.EnableEvents = False
ActiveSheet.DisplayPageBreaks = False
End Sub
6. '切换打印机
Public Sub changePrinter()
Application.Dialogs(xlDialogPrinterSetup).Show
ThisWorkbook.Sheets("setting").Range("C8") = Application.ActivePrinter
End Sub
7. '数值型 一维数组 排序(冒泡0→1)
Public Function sortUp_numberArray(arr) As Variant
Dim i, j As Integer
Dim t
For i = 0 To UBound(arr)
For j = i + 1 To UBound(arr)
If CDbl(arr(i)) > CDbl(arr(j)) Then
t = arr(i)
arr(i) = arr(j)
arr(j) = t
End If
Next j
Next i
sortUp_numberArray = arr
End Function
8. '数值型 二维数组 排序(冒泡0→1)**未验证**
Public Function sortUp_array2d(arr, keyIdxArray) As Variant
Dim h, i, j As Integer
Dim t
For h = 0 To UBound(keyIdxArray)
For i = 0 To UBound(arr)
For j = i + 1 To UBound(arr)
If CDbl(arr(i, keyIdxArray(h))) > CDbl(arr(j, keyIdxArray(h))) Then
t = arr(i)
arr(i) = arr(j)
arr(j) = t
End If
Next j
Next i
Next h
sortUp_array2d = arr
End Function
9. '删除 一维数组中的 重复值
Function del_arraySameValue(arr As Variant) As Variant
Dim i, j As Long
Dim arr2()
Dim is_same As Boolean
ReDim Preserve arr2(0)
arr2(0) = arr(0)
For i = 1 To UBound(arr)
is_same = False
For j = 0 To UBound(arr2)
If arr2(j) = arr(i) Then
is_same = True
Exit For
End If
Next j
If is_same = False Then
ReDim Preserve arr2(UBound(arr2) + 1)
arr2(UBound(arr2)) = arr(i)
End If
Next i
del_arraySameValue = arr2
End Function
10. '检测 一维数组中 是否包含 某值(仅 Double 类型)(不稳定……原因不明)
Function is_inArray(arr As Variant, ele As Double) As Boolean
Dim i As Long
Dim eles As String
On Error Resume Next
eles = Join(arr, ",")
i = Application.WorksheetFunction.Match(ele, arr, 0)
If Err = 0 Then
is_inArray = True
Exit Function
End If
is_inArray = False
End Function
11. '检测 一维数组中 是否包含 某值
Function is_inArray3(arr, ele) As Boolean
Dim arr1
Dim arr_str As String
is_inArray = False
arr1 = VBA.Filter(arr, ele, True) '筛选所有含 ele 的数值组成一个新数组
arr_str = Join(arr1, ",")
If Len(arr_str) > 0 Then
is_inArray = True
End If
' If Not is_emptyArray(arr1) Then
' is_inArray = True
' End If
End Function
12. '检测 二维数组中 是否包含 某值
Function is_in2dArray(arr() As Variant, ele) As Boolean
If WorksheetFunction.CountIf(Application.Index(arr, 1, 0), ele) > 0 Then
is_inArray = True
Else
is_inArray = False
End If
End Function
13. '判断是否为 “空数组”
'需 api 引用:Public Declare Function SafeArrayGetDim Lib "oleaut32.dll" (ByRef saArray() As Any) As Long
Function is_emptyArray(ByRef X() As String) As Boolean
Dim tempStr As String
tempStr = Join(X, ",")
is_emptyArray = LenB(tempStr) <= 0
End Function
14. 日期处理 函数
'将时间戳(10或13位整数)转换成 yyyy-mm-dd hh:mm:ss 格式的日期
Public Function timeStamp2date(timeStamp As Double, Optional beginDate = "01/01/1970 08:00:00")
If Len(CStr(timeStamp)) = 13 Then timeStamp = timeStamp / 1000
timeStamp2date = DateAdd("s", timeStamp, beginDate)
End Function
'将 yyyy-mm-dd hh:mm:ss 转换成 时间戳(10位整数)
Public Function date2timeStamp(theDate As Date, Optional timeDiff = 28800)
date2timeStamp = DateDiff("s", "01/01/1970 00:00:00", theDate) - timeDiff
End Function
'获取 yyyy-mm-dd hh:mm:ss 中的 yyyy-mm-dd
Public Function getDate(theDate As Date)
getDate = year(theDate) & "-" & month(theDate) & "-" & day(theDate)
End Function
VBA Excel 常用 自定义函数的更多相关文章
- [VBA]用一个简单例子说明如何在Excel中自定义函数
Excel中的函数无疑是强大的,但是再强大的战士也有他脆弱的脚后跟[1].这两天在使用Excel的时候遇到了一个需求,要在某一个单元格里面自动计算今天是星期几(如显示 Today is Tuesday ...
- JS常用自定义函数总结
JS常用自定义函数总结 1.原生JavaScript实现字符串长度截取 2.原生JavaScript获取域名主机 3.原生JavaScript清除空格 4.原生JavaScript替换全部 5.原 ...
- 浅谈Excel开发:六 Excel 异步自定义函数
上文介绍了Excel中的自定义函数(UDF ),它极大地扩展了Excel插件的功能,使得我们可以将业务逻辑以Excel函数的形式表示,并可以根据这些细粒度的自定义函数,构建各种复杂的分析报表. 普通的 ...
- mysql 常用自定义函数解析
-- /* -- * 用于获取一记录数据,根据传入的分隔字符delim,索引位置pos,返回相对应的value -- * SELECT Json_getKeyValue({"A": ...
- php常用自定义函数
1,写一个函数,算出两个文件的相对路径 有两种方法,一种是利用array的相关方法,如例1,另外一种是使用?:;运算符 先看第一种方法 function getrelativepath2($path1 ...
- oracle常用自定义函数集合
1.Oracle 判断值是否为数字的函数CREATE OR REPLACE FUNCTION ISNUMBER(MyStr VARCHAR2) RETURN NUMBERIS STR VARCHAR ...
- Sql Server 常用自定义函数
-- select * from [dbo].[SplitToTable]('ADSF','|') -- 分解字符串 ALTER FUNCTION [dbo].[SplitToTable] ( @Sp ...
- python 几个常用自定义函数在dataframe上的应用
最小值与最大值 def f(x): return pd.Series([x.min(),x.max(),index=['min','max']) frame.apply(f) 浮点值的格式化 form ...
- SQL常用自定义函数
1.字符串转Table(Func_SplitToTable) CREATE FUNCTION [dbo].[Func_SplitToTable] ( @SplitString ...
随机推荐
- NiuTrans 日记 1
这些天把东北大学自然语言实验室的NiuTrans 系统搭建并按照例子将短语系统运行了一遍,写这个日记主要是为了以后能提醒自己在这其中遇到的问题. 环境:短语系统我是windows和linux都运行了, ...
- Ubuntu下命令行cd进不了/home/用户目录
输入命令:cd /home/usr后和刚刚进入终端一样,其实已经进入了usr中,终端默认用usr用户登录,输入ls就可以查看usr目录下的文件
- 如何给10^7个数据量的磁盘文件排序--bitset
题目: 输入:给定一个文件,里面最多含有n个不重复的正整数(也就是说可能含有少于n个不重复正整数),且其中每个数都小于等于n,n=10^7.输出:得到按从小到大升序排列的包含所有输入的整数的列表. 分 ...
- bzoj 2595 [Wc2008]游览计划(斯坦纳树)
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=2595 [题意] 给定N*M的长方形,选最少权值和的格子使得要求的K个点连通. [科普] ...
- MFC使用ShowWindow(SW_MAXIMIZE)任务栏消失的处理
ShowWindow(SW_SHOWMAXIMIZED);//窗口最大化 问题:在写程序时,如果包含了标题栏,但是没有包含最大化按钮或者最小话按钮. 那么人工用ShowWindow(SW_MAXIMI ...
- Tkinter教程之Canvas篇(3)
本文转载自:http://blog.csdn.net/jcodeer/article/details/1811922 ''Tkinter教程之Canvas篇(3)''''''16.移动item'''# ...
- 【更新sql server数据项的长度】////【复制数据到另一张表中】
由于设计时没考虑周全,之后发现长度不够,手动修改又不可以... 重新新建也不行啊>>>>>>>>>里面的数据怎么办 so:直接用代码了.... a ...
- PhoneGap,Cordova[3.5.0-0.2.6]:利用插件Cordova-SQLitePlugin来操作SQLite数据库
在PhoneGap应用程序中,我们可以利用一款名叫Cordova-SQLitePlugin的插件来方便的操作基于浏览器内置数据库或独立的SQLite数据库文件,此插件的基本信息: 1.项目地址:htt ...
- 重新执笔,已是大三!Jekyll自定义主题开发
前言 “一转眼忘了时间 丢了感觉 黑了世界 再逞强 再疯狂 也会伤 不知 不觉 后知 后觉 然后 发现 失去 知觉 ”——<一吻不天荒> 感言 时间是把双刃剑,什么解决不了,忧烦的,慢慢变 ...
- linux下改变文件的字符编码
首先确定文件的原始字符编码: $ file -bi test.txt 然后用 iconv 转换字符编码 $ iconv -f from-encoding -t to-encoding file > ...