VBA小技巧

运用VBA时,可以构造一些函数去实现诸如printf的方便函数。

Public Function printf(mask As String, ParamArray tokens()) As String
    Dim i As Long
    For i = 0 To UBound(tokens)
        mask = Replace(mask, "{" & i & "}", tokens(i))
    Next
    printf = mask
End Function

Sub test()
    
    cc = genSearchedArr(6554, Array("a", "b", "e", "f", "g"))
    
    MsgBox cc
End Sub

Function genSearchedLines(searchedRow As Integer, columns()) As String
    Dim searchedVal As String
        
    Dim i As Long
    
    For i = 0 To UBound(columns)
    
        If i = 0 Then
            searchedVal = printf("{0}{1}", columns(i), searchedRow)
        Else
            searchedVal = searchedVal & printf("&{0}{1}", columns(i), searchedRow)
        End If
    Next
    
    genSearchedLines = searchedVal
    
End Function

Function genSearchedArr(searchedRow As Integer, columns()) As String
    Dim searchedArr As String
    
    Dim i As Long
    
    For i = 0 To UBound(columns)
    
        If i = 0 Then
            searchedArr = printf("{0}1:{0}{1}", columns(i), (searchedRow - 1))
        Else
            searchedArr = searchedArr & printf("&{0}1:{0}{1}", columns(i), (searchedRow - 1))
        End If
    Next
    
    genSearchedArr = searchedArr
    
End Function

 

特别地,将以上辅助函数用于Match,会非常方便:

Sub test()
    
    Dim warehouseWorkbook As Workbook
    Set warehouseWorkbook = Workbooks("测试表.xls")
    Set w1 = warehouseWorkbook.Sheets("terry")

    Dim paraArr()
    paraArr = Array("b", "e", "f", "g", "h", "i")

    eva_exp = printf("Match({0}, {1}, 0)", _
                        genSearchedLines(12, paraArr), _
                        genSearchedArr(12, paraArr))
    
    MsgBox w1.Evaluate(eva_exp)
End Sub

  

 

Sub test()
    
    Dim warehouseWorkbook As Workbook
    Set warehouseWorkbook = Workbooks("测试表.xls")
    Set w1 = warehouseWorkbook.Sheets("terry")

    eva_exp = printf("Match({0}, {1}, 0)", _
                        genSearchedLines(12, "a", "b", "c"), _
                        genSearchedArr(12, "a", "b", "c"))
    
    MsgBox w1.Evaluate(eva_exp)
End Sub

   

 

转载于:https://www.cnblogs.com/kid551/p/7354424.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值