傳遞Range提升自定義函數(shù) 巧用屬性分辨公式型內(nèi)容
主要內(nèi)容:
一、使用UBound纵刘,LBound邀窃。代替固定行列數(shù)
舉例1:
dim s(5).UBound(s)=5,LBound(s)=0
dim s(2 to 5,3 to 7).UBouund(s,1)=5,UBound(s,2)=7;LBund(s,1)=2
二假哎、結(jié)構(gòu)化程序互相調(diào)用
舉例2:
Sub 結(jié)構(gòu)化函數(shù)調(diào)用()
? ? Dim ws As Worksheet
? ? For Each ws In Worksheets
? ? ? ? ws.Cells(1, 1) = redCount(ws.UsedRange)
? ? Next ws
End Sub
Function redCount(r As Range)
? ? Dim a As Long, r1 As Range
? ? For Each r1 In r
? ? ? ? If r1.Font.Color = vbRed Then
? ? ? ? ? ? a = a + r1.Value? ?
? ? ? ? End If
? ? Next r1
? ? redCount = a
End Function
提示1:定義一個(gè)fuction redCount的子函數(shù)瞬捕,主程序調(diào)用函數(shù)。這樣結(jié)構(gòu)清晰舵抹。
提示2:主程序接收一個(gè)Range類型的變作為參數(shù),然后掃描每一個(gè)單元格惧蛹,將其中紅色數(shù)字匯總返回。
舉例:3
Function mySum(r As Range)
? ? Dim a&, b&, c&, d&
? ? d = 0
? ? For a = r.Row To r.Row + r.Rows.Count - 1
? ? ? ? c = 1
? ? ? ? For b = r.Column To r.Column + r.Columns.Count - 1
? ? ? ? ? ? c = c * Cells(a, b)
? ? ? ? Next b
? ? ? ? d = d + c
? ? Next a
? ? mySum = d
End Function
提示1:用&代替aslong 迅腔,用符號(hào)聲明變量饱岸,見(jiàn)第三回
提示2:求和的變量初始化為0掺出,但求乘積的變量初始化要為1.
三苫费、Range對(duì)象的轉(zhuǎn)化文本屬性
1.Range.hasFormula屬性
當(dāng)該Range為一個(gè)單元格時(shí)百框,若是公式則返回True闲礼,否則返回False
2.Range.Formula屬性
當(dāng)該Range為一個(gè)單元格時(shí),若是公式則返回公式文本铐维,否則與Value屬性一樣柬泽,返回單元格的內(nèi)容。
3.屬性應(yīng)用嫁蛇,僅粘貼格式
舉例4:
Sub 僅粘貼格式()
? ? Dim w As Worksheet, r As Range
? ? ? ? For Each w In Worksheets
? ? ? ? ? ? For Each r In w.UsedRange
? ? ? ? ? ? ? ? r.Value = r.Value
? ? ? ? ? ? Next r
? ? ? ? Next w
舉例5:? ? ?
End Sub
Sub 僅粘貼格式()
? ? Dim w As Worksheet
? ? ? ? For Each w In Worksheets
? ? ? ? ? ? w.UsedRange.Value = w.UsedRange.Value
? ? ? ? Next w
End Sub
提示1:舉例5為舉例4的簡(jiǎn)化版本锨并,該程序可以作為固定的子程序,用來(lái)將最終結(jié)果轉(zhuǎn)化為僅保留數(shù)值或文本睬棚。
提示2:Formula和Value屬性都可以將單元格的內(nèi)容設(shè)置為公式第煮。
cells(2,3).Formula="=25*2"
cells(2,3).Value="'Sheet3'!C2+10"
以上兩個(gè)表達(dá)方式效果相同。