Excel VBA公式

Excel VBA公式,第1张

改成下面的这个吧

Sub find查找()

    Dim arr

    Dim arr1()

    Dim i As Integer

    Dim rng As Range

    Dim temprng As Range

    Dim FirstAddress As String

    arr = Array("A", "B")

    ReDim arr1(0 To UBound(arr))

    For i = 0 To UBound(arr)

        Set rng = Range(Range("A2"), Cells(RowsCount, "A")End(xlUp))Find(what:=arr(i), _

        LookIn:=xlValues, lookat:=xlWhole, MatchCase:=True)

        If Not rng Is Nothing Then

           FirstAddress = rngAddress

           Do

            '前面已经判断了Rng找到了,Not rng Is Nothing表示找到要查找的数据,这个时候Rng肯定是有数据。再用rng Is Nothing判断就多次一举,直接用arr1数组接受结果就好,接着再找下一个。

             arr1(i) = arr1(i) + rngOffset(0, 3)Value

             Set rng = Range(Range("A2"), Cells(RowsCount, "A")End(xlUp))FindNext(rng)

           Loop While rngAddress <> FirstAddress

        End If

    Next

    '明显,arr1只有arr1(0),arr1(1)两个元素,arr1(2)就溢出了。

    MsgBox arr1(0) & Chr(10) & arr1(1)

End Sub

1、你的文件保存慢是因为文件太大,没法从代码解决

2、你可以在关闭的代码之前判断下这个文件是否打开然后执行关闭

x = "V发运统计表xls"

Set xs = Workbooks(x)

If ErrNumber = 0 Then

Biaozhi = "True" '文件已打开

Else

Biaozhi = "False" '文件未打开

3、写关闭进程的代码

For Each Process In GetObject("winmgmts:")ExecQuery("select from Win32_Process where name='EXCELEXE'")

ProcessTerminate (0)

Next

按说Excel函数应该只在工作表中应用,好像VBA不可以用的,但实际上许多Excel函数具有很高的效率,如果能把两者结合起来的话,肯定是事半功倍!但说实在话,开始时我总是想着如何从VBA的角度来解决问题,当初Excel函数这块掌握不较少,导致现在一想才发现自己真的很浅薄!不过回过头来想,如果可以掌握如何在VBA程序中调用Excel函数的话,那事情不是更好吗!!!

所以今天要解决的问题是:如何在VBA程序中调用Excel函数终极目标就是把Excel工作表中的的所有函数都放到VBA中进行调用,完全掌握它们的种种用法

Sub 调用clean函数()

'如何调用clean(text)函数 用途:删除指定文本中所有非打印符号,保证数据的有效性

Range("B1")Value = ApplicationWorksheetFunctionClean("@diahdfias")

Range("B2")Value = "'" & ApplicationWorksheetFunctionClean(Range("A1")Value)

'文本是要从中删除不能打印字符的任何工作表信息,注意第2行命令,clean中的为文本格式,如果在工作表函数中应为如clan(A1),表示在把A1单元格中非打印字符删掉,但如在VBA中调用,就不能这样写,

'必须写成range("A1")value的形式才可以如果也写成range(A1)的形式,那么将不会返回任何数据!!

End Sub

Sub 关于sum函数的调用举例()

ApplicationDisplayAlerts = False

Worksheets("sheet1")Activate

Dim totalR As Integer

Dim mycell As Range

totalR = Range("C65536")End(xlUp)Row

Dim i As Integer

For i = 2 To totalR

Set mycell = Range(Cells(i, 4), Cells(i, 11)) '先设置好mycell的单元格区域,正好可以在sum中使用,不然的话,下一语句中根本无法使用,并且这种种法

'还可以突破sum函数只能对30个数相加的限制

Range(Cells(i, 12), Cells(i, 12))Value = ApplicationWorksheetFunctionSum(mycell)

Next i

End Sub

下面的代码调试通过:

Option Explicit

Sub ygb()

    Dim arr, db, lArr, mArr, tArr, uArr, vArr, wArr, i, n, k, st As Worksheet

    '扫描规律

    Set db = CreateObject("ScriptingDictionary")

    Set st = Sheets("规律")

    arr = stCells(1, 1)CurrentRegion

    For i = 2 To UBound(arr)

        k = Trim(arr(i, 1))

        If k <> "" Then dbAdd k, Array(arr(i, 2), arr(i, 3))

    Next i

    '计算

    Set st = Sheets("数据")

    n = stCells(stRowsCount, "T")End(xlUp)Row

    lArr = stRange(stCells(2, "L"), stCells(n, "L"))

    mArr = stRange(stCells(2, "M"), stCells(n, "M"))

    tArr = stRange(stCells(2, "T"), stCells(n, "T"))

    uArr = stRange(stCells(2, "U"), stCells(n, "U"))

    vArr = stRange(stCells(2, "V"), stCells(n, "V"))

    wArr = stRange(stCells(2, "W"), stCells(n, "W"))

    For i = 1 To UBound(tArr)

        k = Trim(tArr(i, 1))

        If dbExists(k) Then

            vArr(i, 1) = lArr(i, 1)  db(k)(0)

            wArr(i, 1) = lArr(i, 1)  db(k)(1)

            uArr(i, 1) = mArr(i, 1) - vArr(i, 1) - wArr(i, 1)

        Else

            uArr(i, 1) = "#N/A"

            vArr(i, 1) = "#N/A"

            wArr(i, 1) = "#N/A"

        End If

    Next i

    stRange(stCells(2, "U"), stCells(n, "U")) = uArr

    stRange(stCells(2, "V"), stCells(n, "V")) = vArr

    stRange(stCells(2, "W"), stCells(n, "W")) = wArr

End Sub

以上就是关于Excel VBA公式全部的内容,包括:Excel VBA公式、EXCEL的VBA公式,求修改下、Excel 在VBA中怎么调用公式等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/9414760.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-28
下一篇2023-04-28

发表评论

登录后才能评论

评论列表(0条)

    保存