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

分享

VBA實(shí)戰(zhàn)技巧精粹015:關(guān)于Split函數(shù)的一些認(rèn)識

 Excel實(shí)用知識 2021-11-21

在前面已經(jīng)用過Split函數(shù)了,,可以方便的獲取指定單元格的行標(biāo)或列標(biāo),,具體的用法可以參見以下代碼:

Sub 獲取指定列的字母()
    Debug.Print Cells(1, 27).Address
    Debug.Print Split(Cells(1, 27).Address, '$')(1)
End Sub
下面是關(guān)于Split函數(shù)的一些認(rèn)識,肯定不全,,但也得記下來,,不然以后怎么再復(fù)習(xí)呢。切記:好記性不如爛筆頭,,更不如臭博客,。

先抄一段官方解釋:

描述

返回一個下標(biāo)從零開始的一維數(shù)組,,它包含指定數(shù)目的子字符串,。

語法

Split(expression[, delimiter[, limit[, compare]]])

Split函數(shù)語法有如下命名參數(shù):

部分 描述
expression 必需的。包含子字符串和分隔符的字符串表達(dá)式 ,。如果expression是一個長度為零的字符串(''),,Split則返回一個空數(shù)組,,即沒有元素和數(shù)據(jù)的數(shù)組,。
delimiter 可選的,。用于標(biāo)識子字符串邊界的字符串字符,。如果忽略,,則使用空格字符(' ')作為分隔符,。如果delimiter是一個長度為零的字符串,,則返回的數(shù)組僅包含一個元素,即完整的 expression字符串,。
limit 可選的。要返回的子字符串?dāng)?shù),,–1表示返回所有的子字符串。
compare 可選的,。數(shù)字值,,表示判別子字符串時使用的比較方式,。關(guān)于其值,,請參閱“設(shè)置值”部分,。





設(shè)置值

compare參數(shù)的設(shè)置值如下:

常數(shù) 描述
vbUseCompareOption –1 Option Compare語句中的設(shè)置值執(zhí)行比較,。
vbBinaryCompare 0 執(zhí)行二進(jìn)制比較,。
vbTextCompare 1 執(zhí)行文字比較,。
vbDatabaseCompare 2 僅用于Microsoft Access,?;谀臄?shù)據(jù)庫的信息執(zhí)行比較,。

連段示例代碼都沒有,看來對這個函數(shù)應(yīng)該是比較好掌握,,也是,語法比較簡單,,但問題的焦點(diǎn)不在這兒,,而是它最終返回的數(shù)值問題:①到底是不是從0開始,?②受不受Option Base 1的約束,?③到底如何理解數(shù)組的上標(biāo)和下標(biāo),是表示數(shù)組長度嗎,?

關(guān)于①與②的問題其實(shí)是一個問題:如果受Opiton Base 1的約束,,那就從1開始,如果不受,,那就從0開始了。幫助里說的很清楚了,,返回一個下標(biāo)從0開始的一維數(shù)組(順便解決一個,,水平方向的一維數(shù)組,!?。酝庵饩褪遣皇躉ption Base 1的約束,。

關(guān)于③:利用Lbound函數(shù)及Ubound函數(shù)可以分別得到指定數(shù)組的下標(biāo)及上標(biāo),,但要注意,,這僅是說明了該數(shù)組的第1個元素及最后1個元素所對應(yīng)的索引號,,而上標(biāo)并不一定是該數(shù)組的長度,如果數(shù)組從0開始計數(shù),,例如Split函數(shù)返回的數(shù)組,,那上標(biāo)只是最后1個元素對應(yīng)的索引號,并不是數(shù)組的長度了,。那不管是下標(biāo)是不是從0開始,,應(yīng)該如何計算數(shù)組的長度呢?或者說有沒有一個通用的方法來計算數(shù)組的長度,?當(dāng)然有啊,就是Ubound(arr)-Lbound(arr)+1,,這就是標(biāo)準(zhǔn)的計算數(shù)組長度的公式,,而不用考慮下標(biāo)是否從0開始了。

下面是關(guān)于以上方法的一個驗(yàn)證:

Sub split函數(shù)賦值給單元格()
    Dim i As Integer, s As String
    For i = 1 To 2
        Cells(i, 1).Value = Split(Cells(i, 1).Address, '$')(1)
        s = s & Cells(i, 1).Address
    Next i
    
    Debug.Print UBound(Split(s, '$')) - LBound(Split(s, '$')) + 1
    Range('C1').Resize(UBound(Split(s, '$')) + 1, 1).Value = Application.WorksheetFunction.Transpose(Split(s, '$'))
    For i = 0 To UBound(Split(s, '$'))
        Cells(i + 1, 4).Value = Split(s, '$')(i)
    Next i
End Sub
需要注意一點(diǎn),在模塊開始部分務(wù)必加上Option Base 1

在上一句的基礎(chǔ)上,,再驗(yàn)證以下代碼:

Sub 驗(yàn)證()
    Dim arr() As Variant
    arr = Array('11', '22', '3')
    Debug.Print UBound(arr)
    Debug.Print arr(0)
End Sub
運(yùn)行后會提示:下標(biāo)超界,,什么原因呢,?原來是由于你在模塊開始部分加上了Option Base 1了,,導(dǎo)致array函數(shù)返回的數(shù)組下標(biāo)(索引號)變成從1開始,你非要輸出arr(0)當(dāng)然要錯了,,那如果不加Opiton Base 1呢,?再輸出arr(0)當(dāng)然沒問題了。

從以下兩段代碼現(xiàn)在可以看出:Split函數(shù)生成的數(shù)組不受Option Base 1的約束,,而Array函數(shù)生成的數(shù)組受Option Base 1的約束,,那么到底哪些返回的結(jié)果是數(shù)組,哪些不是,,在返回數(shù)組的基礎(chǔ)上,又有哪些受Option Base 1的約束,,哪些又不受呢?

慢慢總結(jié)吧,。

再補(bǔ)充:

Sub split函數(shù)賦值給單元格()
    Dim i As Integer, s As String,
y As Variant
    For i = 1 To 2
        Cells(i, 1).Value = Split(Cells(i, 1).Address, '$')(1)
        s = s & Cells(i, 1).Address
    Next i
    s = '$A$1$A$2'
    Debug.Print UBound(Split(s, '$')) - LBound(SplitVariant(s, '$')) + 1
    Range('C1').Resize(UBound(Split(s, '$')) + 1, 1).Value = Application.WorksheetFunction.Transpose(Split(s, '$'))
   
For Each y In Split(s, '$')
        Debug.Print y
    Next y
End Sub

注意到紅體字了嗎?這是利用遍歷的一樣可以輸出每個元素,,但要注意是所有元素,包括前為空的那個,,而實(shí)際上我需要的是后4個,所以方法可以借鑒,,但不如利用for循環(huán)來的更精確。

關(guān)于Variant的解釋:(來自官方解釋,,抄襲,嚴(yán)重的抄襲?。?/font>

Variant 數(shù)據(jù)類型是所有沒被顯式聲明(用如 DimPrivate,、PublicStatic語句)為其他類型變量數(shù)據(jù)類型,。Variant 數(shù)據(jù)類型并沒有類型聲明字符,。

Variant 是一種特殊的數(shù)據(jù)類型,除了定長 String 數(shù)據(jù)及用戶定義類型外,,可以包含任何種類的數(shù)據(jù)。Variant 也可以包含 Empty,、ErrorNothing Null等特殊值,。可以用 VarType 函數(shù)或 TypeName 函數(shù)來決定如何處理 Variant 中的數(shù)據(jù),。

數(shù)值數(shù)據(jù)可以是任何整型或?qū)嵭蛿?shù),,負(fù)數(shù)時范圍從
-1.797693134862315E308 到 -4.94066E-324,,正數(shù)時則從 4.94066E-324 到 1.797693134862315E308。通常,,數(shù)值 Variant 數(shù)據(jù)保持為其 Variant 中原來的數(shù)據(jù)類型,。例如,,如果把一個
Integer賦值給 Variant,,則接下來的運(yùn)算會把此 Variant 當(dāng)成 Integer 來處理,。然而,如果算術(shù)運(yùn)數(shù)針對含 Byte,、IntegerLong Single 之一的Variant 執(zhí)行,,并當(dāng)結(jié)果超過原來數(shù)據(jù)類型的正常范圍時,,則在 Variant 中的結(jié)果會提升到較大的數(shù)據(jù)類型。如 Byte 則提升到 Integer,,Integer 則提升到 Long,,而 LongSingle 則提升為 Double。當(dāng) Variant 變量中有 Currency,、Decimal Double 值超過它們各自的范圍時,會發(fā)生錯誤。

可以用 Variant 數(shù)據(jù)類型來替換任何數(shù)據(jù)類型,,這樣會更有適應(yīng)性,。如果 Variant 變量的內(nèi)容是數(shù)字,它可以用字符串來表示數(shù)字或是用它實(shí)際的值來表示,,這將由上下文來決定,,例如:

 

在前面的例子中,,MyVar 內(nèi)有一實(shí)際值為 98052 的數(shù)值,。像期望的那樣,算術(shù)運(yùn)算子可以對 Variant 變量運(yùn)算,,其中包含數(shù)值或能被解釋為數(shù)值的字符串?dāng)?shù)據(jù)。如果用 + 運(yùn)算子來將 MyVar 與其他含有數(shù)字的 Variant數(shù)值類型的變量相加,,結(jié)果便是一算術(shù)和。

Empty 值用來標(biāo)記尚未初始化(給定初始值)的 Variant 變量,。內(nèi)含 EmptyVariant 在數(shù)值的上下文中表示 0,,如果是用在字符串的上下文中則表示零長度的字符串 (''),。

不應(yīng)將 Empty Null 弄混,。Null 是表示 Variant 變量確實(shí)含有一個無效數(shù)據(jù),。

Variant 中,Error 是用來指示在過程中出現(xiàn)錯誤時的特殊值,。然而,,不像對其他種類的錯誤那樣,程序并不產(chǎn)生普通的應(yīng)用程序級的錯誤處理,。這可以讓程序員,,或應(yīng)用程序本身,,根據(jù)此錯誤值采取另外的行動,??梢杂?CVErr 函數(shù)將實(shí)數(shù)轉(zhuǎn)換為錯誤值來產(chǎn)生 Error 值,。

43 Things: , , , , , , , , , ,
BuzzNet: , , , , , , , , , ,
del.: , , , , , , , , , ,
Flickr: , , , , , , , , , ,
IceRocket: , , , , , , , , , ,
LiveJournal: , , , , , , , , , ,
Technorati: , , , , , , , , , ,
菊子曰 這就是菊子曰啦,!

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

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多