Excel VBAstring操作
我需要做一些string操作,它有点击败我真正的好。
我需要从string中提取一些子string。
这是string:
"Modified by: Coanda Oana Amalia coanoa1 (coanoa1) on Mon Oct 14 08:53:11 EEST 2013 Modified Fields: Actual target date: 17.10.2013 GMT+02:00 Effects of change: --------------------------------- [ErrH] Regenerate error configuration. Effort: 2h Design: 1h --------------------------------- [Ist] Rename error. Effort: 1h Design: 1h --------------------------------- [RTE] Rename the runnable according to the change. Check internal errors mapping. Effort: 2h Design: 1h"
我需要提取每个模块,一个模块的意思是从---------------------------------
到Design: 1h
。 所以子串应该是这样的:
"[RTE] Rename the runnable according to the change. Check internal errors mapping. Effort: 2h Design: 1h"
"[ErrH] Regenerate error configuration. Effort: 2h Design: 1h"
"[Ist] Rename error. Effort: 1h Design: 1h"
请帮忙!
您可以使用InStr和Mid函数:
Dim s as String, sPart as String, remainingString as String s = "your initial string here" remainingString = s While(InStr(1,remainingString,"--") > 0) sPart = Mid(remainingString , InStr(1,remainingString ,"--"), _ InStr(1,remainingString ,"Design: 1h") - InStr (1,remainingString ,"--") + Len("Design: 1h")) remainingString = Mid(remainingString , _ InStr(1,remainingString ,"Design: 1h") + Len("Design: 1h")) Msgbox sPart '' do whatever with sPart Wend
您可以使用Split
function,并使用您的'------'
string作为分隔符。 例如:
Dim bigText As String bigText = ... Dim allModules() As String allModules = Split(bigText, "---------------------------------")
现在allModules是一个持有每个模块的string数组,但跳过第一个(这是文本到第一个“—-”)。
如果'------'
string不是固定的并且必须从相同的文本中读取,那么使用InStr
search“变更的效果”,find下面的行尾(也是InStr
),并使用Mid
提取'------'
。 喜欢:
Const delimiterPreAmble As String = "Effects of change: " Dim startDelimiterPos As Long startDelimiterPos = InStr(bigText, delimiterPreAmble) + Len(delimiterPreAmble) Dim endDelimiterPos = InStr(startDelimiterPos, bigText, vbNewLine) Dim moduleDelimiter As String moduleDelimiter = Mid(bigText, startDelimiterPos, endDelimiterPos - startDelimiterPos)
并使用moduleDelimiter
而不是Split
中的'-----'
string。