小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

VBA字符串處理(下)

 昵稱QAb6ICvc 2017-06-23
2.6 查找字符串
2.6.1 InStr函數(shù)
可使用InStr函數(shù)返回一字符串在另一字符串中的位置,因此,也可以使用該函數(shù)確定一個字符串中是否包含有另一個字符串。其語法為:
    InStr([Start,]string1,string2[,compare])
其中,參數(shù)Start為可選參數(shù),設置查找的起點,如果省略,則從第一個字符的位置開始查找,當指定了參數(shù)Compare時,則要指定此參數(shù)。參數(shù)string1為被查找的字符串,參數(shù)string2為要查找的字符串,這兩個參數(shù)都是必需的。
如果在String1中沒有找到String2,返回0;如果找到String2,則返回String2第一個出現(xiàn)的首字符位置(即1到String1的長度);如果String2的長度為零,返回Start。
可看看下面的示例:
Sub test()
  Dim SearchString, SearchChar, MyPos
  SearchString = "XXpXXpXXPXXP"   '被搜索的字符串
  SearchChar = "P"   '要查找字符串 "P"
 '從第四個字符開始,以文本比較的方式找起,返回值為 6(小寫 p)
  '小寫 p 和大寫 P 在文本比較下是一樣的
  MyPos = InStr(4, SearchString, SearchChar, 1)
  Debug.Print MyPos
  '從第一個字符開使,以二進制比較的方式找起,返回值為 9(大寫 P)
  '小寫 p 和大寫 P 在二進制比較下是不一樣的
  MyPos = InStr(1, SearchString, SearchChar, 0)
  Debug.Print MyPos
  '缺省的比對方式為二進制比較(最后一個參數(shù)可省略)
  MyPos = InStr(SearchString, SearchChar)    '返回 9
  Debug.Print MyPos
  MyPos = InStr(1, SearchString, "W")   '返回 0
  Debug.Print MyPos
End Sub
2.6.2 InStrRev函數(shù)
也可以使用InStrRev函數(shù)返回一個字符串在另一個字符串中出現(xiàn)的位置,與InStr函數(shù)不同的是,從字符串的末尾算起。其語法為:
    InStrRev(String1,String2[,[Start[,compare])
參數(shù)String1為被查找的字符串,參數(shù)String2為要查找的字符串,這兩個參數(shù)都是必需的。參數(shù)Start為可選參數(shù),設置每次查找開始的位置,若忽略則使用-1,表示從上一個字符位置開始查找。參數(shù)Compare為可選參數(shù),表示所使用的比較方法,如果忽略則執(zhí)行二進制比較。
下面的示例使用了InStr函數(shù)和InStrRev函數(shù),相應的結果不同:
Sub test()
  Dim myString As String
  Dim sSearch As String
  myString = "I like the functionality that InsStrRev gives"
  sSearch = "th"
  Debug.Print InStr(myString, sSearch) '返回8
  Debug.Print InStrRev(myString, sSearch) '返回26
End Sub
- - - - - - - - - - - - - - - - - - - - - - -
2.7 提取字符/字符串
2.7.1 Left函數(shù)
Left函數(shù)可以從字符串的左邊開始提取字符或指定長度的字符串,即返回包含字符串中從左邊算起指定數(shù)量的字符。其語法為:
    Left(String,CharNum)
其中,如果參數(shù)String包含Null,則返回Null;如果參數(shù)CharNum的值大于或等于String的字符數(shù),則返回整個字符串。
例如,下面的代碼返回指定字符串的前兩個字符:
strLeft=Left(“This is a pig.”,2)
Left函數(shù)與InStr函數(shù)結合,返回指定字符串的第一個詞,例如下面的代碼:
str = "This is a pig."
FirstWord = Left(str, InStr(str, " ") - 1)
2.7.2 Right函數(shù)
與Left函數(shù)不同的是,Right函數(shù)從字符串的右邊開始提取字符或指定長度的字符串,即返回包含字符串中從右邊起指定數(shù)量的字符。其語法為:
    Right(String,CharNum)
例如:
AnyString = "Hello World"    ' 定義字符串
MyStr = Right(AnyString, 1)   ' 返回 "d"
MyStr = Right(AnyString, 6)    ' 返回 " World"
MyStr = Right(AnyString, 20)   ' 返回 "Hello World"
如果存放文件名的字符串中沒有反斜杠(),下面的代碼將反斜杠()添加到該字符串中:
If Right(strFileName,1) <> “” Then
  strFileName=strFileName & “”
End If
下面的函數(shù)假設傳遞給它的參數(shù)或者是文件名,或者是包含完整路徑的文件名,從字符串的末尾開始返回文件名。
Private Function ParseFileName(strFullPath As String)
  Dim lngPos As Long, lngStart As Long
  Dim strFilename As String
  lngStart = 1
  Do
    lngPos = InStr(lngStart, strFullPath, "")
    If lngPos = 0 Then
      strFilename = Right(strFullPath, Len(strFullPath) - lngStart + 1)
    Else
      lngStart = lngPos + 1
    End If
  Loop While lngPos > 0
  ParseFileName = strFilename
End Function
2.7.3 Mid函數(shù)
Mid函數(shù)可以從字符串中提取任何指定的子字符串,返回包含字符串中指定數(shù)量的字符的字符串。其語法為:
    Mid(String,Start[,Len])
其中,如果參數(shù)String包含Null,則返回Null;如果參數(shù)Start超過了String的字符數(shù),則返回零長度字符串(“”);如果參數(shù)Len省略或超過了文本的字符數(shù),則返回字符串從Start到最后的所有字符。
例如,下面的代碼:
Str=Mid(“This is a pig.”,6,2)
將返回文本“is”。
下面的代碼:
MyString = "Mid Function Demo"   '建立一個字符串
FirstWord = Mid(MyString, 1, 3)   '返回 "Mid"
LastWord = Mid(MyString, 14, 4)    '返回 "Demo"
MidWords = Mid(MyString, 5)   '返回 "Funcion Demo"
Mid函數(shù)常用于在字符串中循環(huán),例如,下面的代碼將逐個輸出字符:
Dim str As String
Dim i As Integer
Str=”Print Out each Character”
For i=1 to Len(str)
  Debug.Print Mid(str,i,1)
Next i
2.7.4 Mid語句
Mid語句可以用另一個字符串中的字符替換某字符串中指定數(shù)量的字符。其語法為:
    Mid(Stringvar,Start[,Len])=string
其中,參數(shù)Stringvar代表為要被更改的字符串;參數(shù)Start表示被替換的字符開頭位置;參數(shù)Len表示被替換的字符數(shù),若省略則全部使用string;參數(shù)string表示進行替換的字符串。
被替換的字符數(shù)量總小于或等于Stringvar的字符數(shù);如果string的數(shù)量大于Len所指定的數(shù)量,則只取string的部分字符。示例如下:
MyString = "The dog jumps"   ' 設置字符串初值
Mid(MyString, 5, 3) = "fox"    ' MyString = "The fox jumps"
Mid(MyString, 5) = "cow"   ' MyString = "The cow jumps"
Mid(MyString, 5) = "cow jumped over"    ' MyString = "The cow jumpe"
Mid(MyString, 5, 3) = "duck"    ' MyString = "The duc jumpe"
- - - - - - - - - - - - - - - - - - - - - - -
2.8 刪除空格
LTrim函數(shù)刪除字符串前面的空格;
RTrim函數(shù)刪除字符串后面的空格;
Trim函數(shù)刪除兩頭的空格。
示例如下:
MyString = "  <-Trim->  "    ' 設置字符串初值
TrimString = LTrim(MyString)    ' TrimString = "<-Trim->  "
TrimString = RTrim(MyString)   ' TrimString = "  <-Trim->"
TrimString = LTrim(RTrim(MyString))    ' TrimString = "<-Trim->"
' 只使用 Trim 函數(shù)也同樣將兩頭空格去除
TrimString = Trim(MyString)   ' TrimString = "<-Trim->"
- - - - - - - - - - - - - - - - - - - - - - -
2.9 返回字符代碼
Asc函數(shù)返回指定字符串表達式中第一個字符的字符代碼。示例如下:
MyNumber = Asc("A")   ' 返回 65
MyNumber = Asc("a")    ' 返回 97
MyNumber = Asc("Apple")   ' 返回 65
[編程方法和技巧]
(1) 在數(shù)據(jù)驗證中用Asc來決定一些條件,如第一個字符是大寫還是小寫、是字母還是數(shù)字。
Private Sub CommandButton1_Click()
  Dim sTest As String
  Dim iChar As Integer
  sTest = TextBox1.Text
  If Len(sTest) > 0 Then
    iChar = Asc(sTest)
    If iChar >= 65 And iChar <= 90 Then
      MsgBox "第一個字符是大寫"
    ElseIf iChar >= 97 And iChar <= 122 Then
      MsgBox "第一個字符是小寫"
    Else
      MsgBox "第一個字符不是字母"
    End If
  Else
    MsgBox "請在文本框中輸入"
  End If
End Sub
(2) 用Asc函數(shù)和Chr函數(shù)來創(chuàng)建基本加密的方法。
Private Sub CommandButton2_Click()
  Dim MyName As String, MyEncryptedString As String
  Dim MyDecryptedString As String
  Dim i As Integer
  MyName = "fanjy"
  For i = 1 To Len(MyName)
    MyEncryptedString = MyEncryptedString & Chr(Asc(Mid(MyName, i, 1)) + 25)
  Next i
  MsgBox "您好!我的名字是" & MyEncryptedString
  For i = 1 To Len(MyName)
    MyDecryptedString = MyDecryptedString & Chr(Asc(Mid(MyEncryptedString, i, 1)) - 25)
  Next i
  MsgBox "您好!我的名字是" & MyDecryptedString
End Sub
- - - - - - - - - - - - - - - - - - - - - - -
2.10 返回數(shù)值代表的相應字符
Chr函數(shù)返回指定字符碼所代表的字符,其語法為:
    Chr(charcode)
其中參數(shù)charcode代表字符碼,一般為0~255。例如:
MyChar = Chr(65)  ' 返回 A
MyChar = Chr(97)   ' 返回 a
MyChar = Chr(62)  ' 返回 >
MyChar = Chr(37)  ' 返回 %
[編程方法和技巧]
(1) 使用Chr(34)將引號嵌入字符串,如
Chr(34) & sString & Chr(34)
(2) 下面列出了在調(diào)用Chr函數(shù)時比較常用的字符代碼:
代碼  值    描述
0   Null   相當于vbNullChar常數(shù)
8   BS   相當于vbBack常數(shù)
9   TAB   相當于vbTab常數(shù)
10   CR   相當于vbCr和vbCrLf常數(shù)
13   LF   相當于vbLf和vbCrLf常數(shù)
34   “”   引號
- - - - - - - - - - - - - - - - - - - - - - -
2.11 使用字節(jié)的函數(shù)
VBA中返回字符串的函數(shù)有兩種格式,一種以$結尾,返回字符串,不需要進行類型轉換,所以速度較快,但如果輸入值是包含Null的Viarant,則會發(fā)生運行錯誤;一種沒有$,返回Viarant數(shù)據(jù)類型,如果輸入值是包含Null的Viarant,則返回Null。因而,如果要使得程序運行速度快,則使用帶有$的函數(shù)且要避免向這些函數(shù)傳遞空值。
- - - - - - - - - - - - - - - - - - - - - - -
2.12 返回數(shù)組的函數(shù)
2.12.1 Filter函數(shù)
Filter函數(shù)返回一個下標從零開始的數(shù)組,該數(shù)組包含基于指定篩選條件的一個字符串數(shù)組的子集。其語法為:
    Filter(sourcearray,match[,include[,compare]])
其中,參數(shù)sourcearray必需,是要執(zhí)行搜索的一維字符串數(shù)組;參數(shù)match必需,是要搜索的字符串;參數(shù)include可選,Boolean值,表示返回子串包含還是不包含match字符串,如果include為True,返回包含match子字符串的數(shù)組子集,如果include為False,返回不包含match子字符串的數(shù)組子集;參數(shù)compare可選,表示所使用的字符串比較類型,其設置值為:-1(常數(shù)為vbUseCompareOption)表示使用Option Compare語句的設置值來執(zhí)行比較;0(常數(shù)為vbBinaryCompare)表示執(zhí)行二進制比較;1(常數(shù)為vbTextCompare)表示執(zhí)行文字比較;2(常數(shù)為vbDatabaseCompare)只用于Microsoft Access,表示基于數(shù)據(jù)庫信息來執(zhí)行比較。
如果在sourcearray中沒有發(fā)現(xiàn)與match相匹配的值,F(xiàn)ilter函數(shù)返回一個空數(shù)組;如果sourcearray是Null或不是一個一維數(shù)組,則產(chǎn)生錯誤。
Filter函數(shù)所返回的數(shù)組,其元素數(shù)是所找到的匹配項目數(shù)。
[編程方法和技巧]
(1) Filter函數(shù)也可以過濾數(shù)字值。此時,應指定Variant類型的字符串sourcearray,并用數(shù)字值給數(shù)組賦值。同時,也可以將字符串、Variant、Long或Integer數(shù)據(jù)傳遞給match。但應注意,返回的字符串表現(xiàn)為被過濾數(shù)字的字符串的形式。例如:
Sub test()
  Dim varSource As Variant, varResult As Variant
  Dim strMatch As String, i
  strMatch = CStr(2)
  varSource = Array(10, 20, 30, 21, 22, 32)
  varResult = Filter(varSource, strMatch, True, vbBinaryCompare)
  For Each i In varResult
    Debug.Print i
  Next
End Sub
將返回20,21,22,32
(2) Filter函數(shù)可以和Dictionary對象很好地配合使用??梢园袲ictionary對象產(chǎn)生的Key值作為一種過濾Dictionary對象成員的快速方法傳遞給Filter函數(shù),如:
Sub test()
  Dim i As Integer
  Dim sKeys() As Variant
  Dim sFiltered() As String
  Dim sMatch As String
  Dim blnSwitch As Boolean
  Dim oDict As Dictionary
  Set oDict = New Dictionary
  oDict.Add "Microsoft", "One Microsoft Way"
  oDict.Add "AnyMicro Inc", "31 Harbour Drive"
  oDict.Add "Landbor Data", "The Plaza"
  oDict.Add "Micron Co.", "999 Pleasant View"
  sKeys = oDict.Keys
  sMatch = "micro"
  blnSwitch = True
  '尋找包含字符串macro(不區(qū)分大小寫)的所有鍵
  sFiltered() = Filter(sKeys, sMatch, blnSwitch, vbTextCompare)
  For i = 1 To UBound(sFiltered)
      Debug.Print sFiltered(i) & "," & oDict.Item(sFiltered(i))
  Next i
End Sub
2.12.2 Split函數(shù)
Split函數(shù)返回一個下標從零開始的一維數(shù)組,包含指定數(shù)目的子字符串。其語法為:
    Split(expression[,delimiter[,limit[,compare]]])
其中,參數(shù)expression必需,表示包含子字符串和分隔符的字符串,若expression是一個長度為零的字符串(“”),該函數(shù)則返回一個沒有元素和數(shù)據(jù)的空數(shù)組;參數(shù)delimiter用于標識子字符串邊界的字符串字符,若忽略則使用空格(“ “)作為分隔符,若是一個長度為零的字符串則返回僅包含一個元素的數(shù)組,該元素是expression所表示的字符串;參數(shù)limit表示要返回的子字符串數(shù),-1表示返回所有的子字符串;參數(shù)compare表示判別子字符串時使用的比較方式,其值與Filter函數(shù)的設置值相同。
- - - - - - - - - - - - - - - - - - - - - - -
2.13 連接字符串
Join函數(shù)返回連接某數(shù)組中的多個子字符串而組成的字符串,即將數(shù)組中的字符串連接起來。其語法為:
    Join(sourcearray[,delimiter])
其中,參數(shù)sourcearray必需,是包含被連接子字符串的一維數(shù)組;參數(shù)delimiter可選,代表在所返回的字符串中用于分隔子字符串的字符,若忽略則使用空(“ ”)來分隔,若為零長字符串(“”),則所有項目都連接在一起,中間沒有分隔符。
- - - - - - - - - - - - - - - - - - - - - - -
2.14 替換字符串
Replace函數(shù)返回一個被替換了的字符串,該字符串中指定的子字符串已被替換成另一個子字符串,并且替換指定次數(shù)。其語法為:
    Replace(expression,find,replace[,start[,count[,compare]]])
其中,參數(shù)expression必需,表示所要替換的子字符串;參數(shù)find必需,表示要搜索到的子字符串;參數(shù)replace必需,表示用來替換的子字符串;參數(shù)start表示開始搜索的位置,若忽略,則從1開始;參數(shù)count表示進行替換的次數(shù),缺省值是-1,表示進行所有可能的替換;參數(shù)compare表示判別子字符串時所用的比較方式,與Filter函數(shù)的設置值相同。
如果expression的長度為零,Replace返回零長度字符串(“”);如果expression為Null,則返回錯誤;如果find的長度為零,則返回expression的副本;如果replace的長度為零,則返回刪除了所有出現(xiàn)find的字符串的副本;如果start的值大于expression的長度,則返回長度為零的字符串;如果count為0,則返回expression的副本。
Replace函數(shù)返回的字符串是從參數(shù)start所指定的位置開始到expression結尾已經(jīng)進行過替換的字符串。
注意:
(1) 如果沒有使用參數(shù)count,那么當替換較短字符串時就要注意,防止形成一個不相關的字符。
(2) 如果start值大于1,返回的字符串將從start開始,而不是從原有字符串的第一個字符開始。
- - - - - - - - - - - - - - - - - - - - - - -
 
2.15 反向字符串
StrReverse函數(shù)返回與指定字符串順序相反的字符串,其語法為:
    StrReverse(expression)
其中,參數(shù)expression是一個字符串,應用StrReverse函數(shù)后將返回與該字符串順序相反的字符串。如果expression是一個長度為零的字符串(“”),則返回一個長度為零的字符串;如果expression為Null,則產(chǎn)生一個錯誤。

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

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多