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, "&lt;", "<")
    str = Replace(str, "&gt;", ">")
    str = Replace(str, "&amp;", "&")
    str = Replace(str, "&quot;", Chr(34))
    str = Replace(str, "&gt;", 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 常用 自定义函数的更多相关文章

  1. [VBA]用一个简单例子说明如何在Excel中自定义函数

    Excel中的函数无疑是强大的,但是再强大的战士也有他脆弱的脚后跟[1].这两天在使用Excel的时候遇到了一个需求,要在某一个单元格里面自动计算今天是星期几(如显示 Today is Tuesday ...

  2. JS常用自定义函数总结

    JS常用自定义函数总结   1.原生JavaScript实现字符串长度截取 2.原生JavaScript获取域名主机 3.原生JavaScript清除空格 4.原生JavaScript替换全部 5.原 ...

  3. 浅谈Excel开发:六 Excel 异步自定义函数

    上文介绍了Excel中的自定义函数(UDF ),它极大地扩展了Excel插件的功能,使得我们可以将业务逻辑以Excel函数的形式表示,并可以根据这些细粒度的自定义函数,构建各种复杂的分析报表. 普通的 ...

  4. mysql 常用自定义函数解析

    -- /* -- * 用于获取一记录数据,根据传入的分隔字符delim,索引位置pos,返回相对应的value -- * SELECT Json_getKeyValue({"A": ...

  5. php常用自定义函数

    1,写一个函数,算出两个文件的相对路径 有两种方法,一种是利用array的相关方法,如例1,另外一种是使用?:;运算符 先看第一种方法 function getrelativepath2($path1 ...

  6. oracle常用自定义函数集合

    1.Oracle 判断值是否为数字的函数CREATE OR REPLACE FUNCTION ISNUMBER(MyStr VARCHAR2) RETURN NUMBERIS  STR VARCHAR ...

  7. Sql Server 常用自定义函数

    -- select * from [dbo].[SplitToTable]('ADSF','|') -- 分解字符串 ALTER FUNCTION [dbo].[SplitToTable] ( @Sp ...

  8. python 几个常用自定义函数在dataframe上的应用

    最小值与最大值 def f(x): return pd.Series([x.min(),x.max(),index=['min','max']) frame.apply(f) 浮点值的格式化 form ...

  9. SQL常用自定义函数

    1.字符串转Table(Func_SplitToTable) CREATE FUNCTION [dbo].[Func_SplitToTable]      (        @SplitString ...

随机推荐

  1. [Irving]WPF Invalid character in the given encoding. Line xx, position xx.' XML is not valid.

    WPF开发中发现Xaml界面中突然抽风似的提示错误 Invalid character in the given encoding. Line xx, position xx.' XML is not ...

  2. SQL经典笔试题之一

    本题用到下面三个关系表: CARD     借书卡.   CNO 卡号,NAME 姓名,CLASS 班级 BOOKS    图书.     BNO 书号,BNAME 书名,AUTHOR 作者,PRIC ...

  3. reverse the string word by word

    题目:Given an input string, reverse the string word by word. For example,Given s = "the sky is bl ...

  4. 多元线性回归(Linear Regression with multiple variables)与最小二乘(least squat)

    1.线性回归介绍 X指训练数据的feature,beta指待估计得参数. 详细见http://zh.wikipedia.org/wiki/%E4%B8%80%E8%88%AC%E7%BA%BF%E6% ...

  5. ubuntu使用问题与解决记录[持续更新]

    1. 添加到计划任务 为脚本增加可执行权限 sudo chmod +x yeelink.sh 将脚本加入cronjob(计划任务) sudo crontab -e 在cornjob文件中添加下面一行, ...

  6. Cocos2dx-截屏并设置图片尺寸

    猴子原创,欢迎转载.转载请注明: 转载自Cocos2D开发网–Cocos2Dev.com,谢谢! 原文地址: http://www.cocos2dev.com/?p=522 前几天添加微信图片分享的时 ...

  7. HDU 5512 Pagodas (2015沈阳现场赛,找规律+gcd)

    Pagodas Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Sub ...

  8. 咏南DATASNAP中间件提供免费使用了

    咏南DATASNAP中间件提供免费使用了. 百度网盘分享: 链接: http://pan.baidu.com/s/1c06Ivp2 密码: dhhm

  9. ASP.NET Web Api返回对象类型为JSON还是XML

    在Umbraco平台上开发过程中,我用WebApi返回JSON result给前端 前端使用React调用这个web api来获取JSON result 我写的web api方法是返回JSON 类型的 ...

  10. 《数据通信与网络》笔记--SCTP

    SCTP(stream control transmission protocol)是一种新的可靠的,面向报文的传输层控制协议.它兼有UDP和TCP的特性,它是可靠的面向报文的协议,它保存报文的边界, ...