久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

在VBA中使用Excel公式 | 完美Excel

 超越夢(mèng)想之上 2016-07-07

在VBA中使用Excel公式

2011年03月18日, 2:37 下午 分享到微博:
1 顆星2 顆星3 顆星4 顆星5 顆星 (4 人投票, 平均: 5.00 out of 5)

在VBA中可以利用Excel函數(shù)的強(qiáng)大功能,。
使用WorksheetFunction對(duì)象
WorksheetFunction對(duì)象的成員就是Excel內(nèi)置函數(shù),,因此,利用該對(duì)象可以直接在VBA中使用這些函數(shù),。
例如,,求單元格區(qū)域A1:A5的數(shù)值之和,假如將該區(qū)域命名為“myRange”,,則可以在VBA中使用下列代碼:

Application.WorksheetFunction.Sum(Range("myRange"))
    Application.WorksheetFunction.Sum(Range("A1:A5"))

注意,,在VBA中當(dāng)輸入WorksheetFunction后再輸入一個(gè)句點(diǎn)時(shí),,就會(huì)顯示所有的函數(shù)列表,如下圖所示,。

Evaluate方法
使用Worksheet對(duì)象或Application對(duì)象的Evaluate函數(shù),。該函數(shù)接受字符串參數(shù),,返回引用的公式的值(字符串為公式)或者引用的單元格區(qū)域(字符串代表單元格或單元格區(qū)域,,A1樣式),。其語(yǔ)法為:

表達(dá)式.Evaluate(Name)

將Excel名稱轉(zhuǎn)換為對(duì)象或值,,其中:

  • 表達(dá)式 對(duì)于Application,,表達(dá)式可選,;對(duì)于Chart、DialogSheet和Worksheet,表達(dá)式必需。
  • Name 必需的字符串,。滿足Excel命名規(guī)范的對(duì)象的名稱,,包括:
    (1)A1樣式引用,??梢砸訟1樣式的引用方式使用任意對(duì)單個(gè)單元格的引用,引用都被考慮是絕對(duì)引用,。
    (2)單元格區(qū)域??梢允褂脜^(qū)域,、交叉和聯(lián)合操作符(冒號(hào)、空格和逗號(hào))引用單元格區(qū)域,。
    (3)定義的名稱,。
    (4)外部引用??梢允褂?操作符引用另一工作簿中的單元格或定義的名稱,。例如Evaluate(“[BOOK1.XLS]Sheet1!A1″)。
    (5)Chart對(duì)象,??梢灾付ㄈ我鈭D表對(duì)象名稱,例如“圖例”,、“繪圖區(qū)”或“系列1”,,來(lái)訪問該對(duì)象的屬性和方法。例如,,Charts(“Chart1″).Evaluate(“Legend”).Font.Name返回圖例中使用的字體名,。

也可以使用方括號(hào)代替evaluate函數(shù),使用方括號(hào)(例如,,”[A1:C5]”)與調(diào)用帶字符串參數(shù)的Evaluate方法是相同的,。例如,,下面的代碼等價(jià):

[a1].Value = 25
Evaluate("A1").Value = 25
trigVariable = [SIN(45)]
trigVariable = Evaluate("SIN(45)")
Set firstCellInSheet = Workbooks("BOOK1.XLS").Sheets(4).[A1]
Set firstCellInSheet = Workbooks("BOOK1.XLS").Sheets(4).Evaluate("A1")

使用方括號(hào)的優(yōu)勢(shì)是代碼更簡(jiǎn)短,。使用Evaluate方法的的優(yōu)勢(shì)是參數(shù)是字符串,,因此可以在代碼中構(gòu)造字符串或使用變量。
例如,,下面的代碼將Sheet1中單元格A1加粗:

Worksheets("Sheet1").Activate
boldCell = "A1"
Application.Evaluate(boldCell).Font.Bold = True

更簡(jiǎn)短一些,,如設(shè)置當(dāng)前工作表中單元格B1為加粗:

[B1].Font.Bold = True

下面的代碼返回當(dāng)前工作表中單元格A1的值:

Evaluate("A1")

下面的代碼返回當(dāng)前工作表中單元格區(qū)域A1:A5的值之和:

Evaluate("SUM(A1:A5)")

又例如:

For i = 2 To 10
        Debug.Print Evaluate("A" & i), Evaluate("COUNTIF(A1:A" & (i - 1) & ",A" & i & ")")
Next i

將打印出A1:A10區(qū)域內(nèi),某單元格的值在其上面的單元格中出現(xiàn)的次數(shù)。
輸出結(jié)果為:

可以將上述代碼稍作變化,,以統(tǒng)計(jì)A列中的值,,即可以動(dòng)態(tài)調(diào)整,。

For i = 2 To [COUNTA(A:A)]
        Debug.Print Evaluate("A" & i), Evaluate("COUNTIF(A1:A" & (i - 1) & ",A" & i & ")")
Next i

注意,,上面的代碼中使用[COUNTA(A:A)]來(lái)統(tǒng)計(jì)A列中有多少個(gè)數(shù)值單元格,。
下面的代碼選擇單元格區(qū)域A1:C3:

Range(“offset(a1,,,3,3)”).Select

使用Evaluate函數(shù),,可以使用在VBA中不能使用的工作表函數(shù)。例如,,ISBLANK函數(shù)。下面的示例判斷單元格A1是否為空,,如果為空返回True,,不為空則返回False,。

MsgBox Evaluate(“=ISBLANK(A1)”)
MsgBox [ISBLANK(A1)]

可以更加靈活地編寫代碼。

Sub IsActiveCellEmpty()
    Dim strFunctionName As String, strCellReference As String
    strFunctionName = "ISBLANK"
    strCellReference = ActiveCell.Address
    MsgBox Evaluate(strFunctionName & "(" & strCellReference & ")")
End Sub

但是,,如果只是使用方括號(hào),則不能夠在其中包含變量表達(dá)式,。
示例1
首先,,創(chuàng)建隱藏的名稱來(lái)保存密碼。(在名稱定義對(duì)話框中看不到隱藏的名稱,,因此可以非常方便地存儲(chǔ)信息)

Names.Add Name:="PassWord", RefersTo:="Bazonkas", Visible:=False

接著,,在表達(dá)式中使用隱藏的數(shù)據(jù):

strUserInput = InputBox("請(qǐng)輸入密碼:")
If strUserInput = [Password] Then
...

示例2
下面的表達(dá)式生成一個(gè)二維的Variant型數(shù)組,100行1列,,值為101到200,。

vRowArray = [Row(101:200)]

下面的代碼將101至200的值賦給單元格區(qū)域B1:B100:

[B1:B100] = [Row(101:200)]

以上都比For…Next循環(huán)更有效率。
示例3
自定義函數(shù)——FindOffset函數(shù)
該函數(shù)將在某區(qū)域內(nèi)搜索某值,然后從所發(fā)現(xiàn)的結(jié)果位置偏移x行和x列,。例如:

=FindOffset($A$1:$E$10,”Dog”,2,3)

在$A$1:$E$10區(qū)域查找“Dog”,,2(可選的)告訴該函數(shù)從內(nèi)容為“Dog”的單元格處偏移2列,3(可選的)告訴該函數(shù)從內(nèi)容為“Dog”的單元格處偏移3行,。因此,,如果“Dog”在單元格B5,那么該函數(shù)將返回單元格D8(離B5單元格右側(cè)2列下方3行)中的值,。
代碼如下:

Function FindOffset(LookInRange As Range, FindVal, _
Optional ColOffset As Long, Optional RowOffset As Long)
    Dim lCount As Long, lRow As Long
 
    On Error Resume Next
    For lCount = 1 To LookInRange.Columns.Count
        lRow = Application.WorksheetFunction.Match _
        (FindVal, LookInRange.Columns(lCount), 0)
            If lRow > 0 Then
            FindOffset = LookInRange.Cells(lRow, lCount) _
            (RowOffset + 1, ColOffset + 1)
            Exit For
            End If
    Next lCount
    On Error GoTo 0
End Function

說(shuō)明:
For循環(huán)的循環(huán)次數(shù)為Range變量LookInRange的列數(shù),,即

LookInRange.Columns.Count

在每次循環(huán)中,WorksheetFunction.Match用于查找FindVal代表的值在單元格區(qū)域LookInRange中的列數(shù),,如果找到,,即lRow > 0,將返回真并進(jìn)入If語(yǔ)句,。If語(yǔ)句里面的代碼指定開始偏移的單元格位置,,即

LookInRange.Cells(lRow, lCount)

變量lRow包含要偏稱的行數(shù),lCount為要偏移的列數(shù),。因此,,

=FindOffset($A$1:$E$10,”Dog”,2,3)

如果“Dog”在單元格B5中,LookInRange.Cells(lRow, lCount)將為L(zhǎng)ookInRange.Cells(5, 2) ,,與LookInRange ($A$1:$E$10)相關(guān)的單元格為B5,,即$A$1:$E$10區(qū)域的第5行和第2列。
接著使用Item屬性從該單元偏移,,也就是(RowOffset + 1, ColOffset + 1),。加1是因?yàn)镺ffset屬性的Item方法基于0,即基點(diǎn)單元格,。(注:Offset屬性可以接受負(fù)值,,而Item屬性不能)
一旦找到單元格,Exit For及時(shí)退出該函數(shù)并顯示結(jié)果,。

使用這些技術(shù),,可以將VBA和Excel公式與函數(shù)聯(lián)合,使得更為強(qiáng)大和靈活,。
進(jìn)一步閱讀:在VBA中使用R1C1樣式的公式

參考資源:
How to Use an Excel Formula from VBA
http://www./News/excel-evaluate-formula-VBA.htm
http://msdn.microsoft.com/en-us/library/aa223886(v=office.11).aspx
Excel 2007 VBA參考大全    

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn),。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請(qǐng)點(diǎn)擊一鍵舉報(bào),。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多