Home |
Search |
Today's Posts |
#1
Posted to microsoft.public.excel.programming
|
|||
|
|||
Accessing substrings quickly
Do I need to use the "Mid" function each time I want
to access a substring?? For example, rather than using the following: mysubstring = Mids(src, 5, 1) ' get 5th character/string can't I use some other array/index notation like the following: mysubstring = src(5) I get the impression that my code would run a lot faster if I could access my substrings by an index, rather than making calls to functions such as Mids(), Instr(), etc.... thank u |
#2
Posted to microsoft.public.excel.programming
|
|||
|
|||
Accessing substrings quickly
The Mid function is one of VB's fastest executing functions... you won't
find a faster way to extract a character from a string than it. -- Rick (MVP - Excel) "Robert Crandal" wrote in message ... Do I need to use the "Mid" function each time I want to access a substring?? For example, rather than using the following: mysubstring = Mids(src, 5, 1) ' get 5th character/string can't I use some other array/index notation like the following: mysubstring = src(5) I get the impression that my code would run a lot faster if I could access my substrings by an index, rather than making calls to functions such as Mids(), Instr(), etc.... thank u |
#3
Posted to microsoft.public.excel.programming
|
|||
|
|||
Accessing substrings quickly
If you need to access several of the individual characters in the string, or
handle the characters as numbers, it can be faster to use a Byte array: Private Sub somebytes() Dim aBytes() As Byte Dim StrLongString As String Dim strChar As String StrLongString = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" aBytes = StrLongString strChar = Chr(aBytes(8)) MsgBox strChar End Sub Charles ___________________________________ The Excel Calculation Site http://www.decisionmodels.com "Robert Crandal" wrote in message ... Do I need to use the "Mid" function each time I want to access a substring?? For example, rather than using the following: mysubstring = Mids(src, 5, 1) ' get 5th character/string can't I use some other array/index notation like the following: mysubstring = src(5) I get the impression that my code would run a lot faster if I could access my substrings by an index, rather than making calls to functions such as Mids(), Instr(), etc.... thank u |
#4
Posted to microsoft.public.excel.programming
|
|||
|
|||
Accessing substrings quickly
This may be a duplicate posting as I can't see the first one I sent
================================================== =================== I think you need to convert this statement... aBytes = StrLongString to this... aBytes = StrConv(StrLongString, vbFromUnicode) in order to get your method to work. Also note that the Byte array that is produced will always be zero-based even if you have your Option Base set to 1, so if you want the 8th character in the text, you have to remember to use 7 as the index to the array. -- Rick (MVP - Excel) "Charles Williams" wrote in message ... If you need to access several of the individual characters in the string, or handle the characters as numbers, it can be faster to use a Byte array: Private Sub somebytes() Dim aBytes() As Byte Dim StrLongString As String Dim strChar As String StrLongString = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" aBytes = StrLongString strChar = Chr(aBytes(8)) MsgBox strChar End Sub Charles ___________________________________ The Excel Calculation Site http://www.decisionmodels.com "Robert Crandal" wrote in message ... Do I need to use the "Mid" function each time I want to access a substring?? For example, rather than using the following: mysubstring = Mids(src, 5, 1) ' get 5th character/string can't I use some other array/index notation like the following: mysubstring = src(5) I get the impression that my code would run a lot faster if I could access my substrings by an index, rather than making calls to functions such as Mids(), Instr(), etc.... thank u |
#5
Posted to microsoft.public.excel.programming
|
|||
|
|||
Accessing substrings quickly
This may be a triplicate posting as I can't see the first two I posted.
I removed your original message in case that was the problem. ================================================== ===================== I think you need to convert this statement... aBytes = StrLongString to this... aBytes = StrConv(StrLongString, vbFromUnicode) in order to get your method to work. Also note that the Byte array that is produced will always be zero-based even if you have your Option Base set to 1, so if you want the 8th character in the text, you have to remember to use 7 as the index to the array. -- Rick (MVP - Excel) |
#6
Posted to microsoft.public.excel.programming
|
|||
|
|||
Accessing substrings quickly
Rick,
Both methods work, but in a slightly different way: aBytes = StrLongString gives you a zero-based Byte array containing two bytes for each character (character number, unicode code page number), so Chr(aBytes(8)) gives you the 5th character (E) as in the OP's example aBytes = StrConv(StrLongString, vbFromUnicode) gives you a zero-based byte array containing one byte for each character (character number in the current default code page) so Chr(Abytes(4)) gives you the 5th character (E) as in the OP's example I favour the 2-byte approach because its easier to recreate strings/substrings by reassigning the Byte array to a string strChar = aBytes gives you back the string from the byte array Private Sub somebytes() Dim aBytes() As Byte Dim StrLongString As String Dim strChar As String StrLongString = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" aBytes = StrLongString strChar = aBytes MsgBox strChar End Sub Charles ___________________________________ The Excel Calculation Site http://www.decisionmodels.com "Rick Rothstein" wrote in message ... This may be a duplicate posting as I can't see the first one I sent ================================================== =================== I think you need to convert this statement... aBytes = StrLongString to this... aBytes = StrConv(StrLongString, vbFromUnicode) in order to get your method to work. Also note that the Byte array that is produced will always be zero-based even if you have your Option Base set to 1, so if you want the 8th character in the text, you have to remember to use 7 as the index to the array. -- Rick (MVP - Excel) "Charles Williams" wrote in message ... If you need to access several of the individual characters in the string, or handle the characters as numbers, it can be faster to use a Byte array: Private Sub somebytes() Dim aBytes() As Byte Dim StrLongString As String Dim strChar As String StrLongString = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" aBytes = StrLongString strChar = Chr(aBytes(8)) MsgBox strChar End Sub Charles ___________________________________ The Excel Calculation Site http://www.decisionmodels.com "Robert Crandal" wrote in message ... Do I need to use the "Mid" function each time I want to access a substring?? For example, rather than using the following: mysubstring = Mids(src, 5, 1) ' get 5th character/string can't I use some other array/index notation like the following: mysubstring = src(5) I get the impression that my code would run a lot faster if I could access my substrings by an index, rather than making calls to functions such as Mids(), Instr(), etc.... thank u |
Reply |
Thread Tools | Search this Thread |
Display Modes | |
|
|
Similar Threads | ||||
Thread | Forum | |||
EXTRACTING SUBSTRINGS !! | Excel Programming | |||
Substituting substrings | Excel Programming | |||
Macro Help for Substrings | Excel Programming | |||
sum wrt substrings! | Excel Worksheet Functions | |||
STRINGS AND SUBSTRINGS ! | Excel Programming |