
改成下面的这个吧
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 ExplicitSub 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中怎么调用公式等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)