2014-02-13 3 views
1

Мне нужно сделать некоторые манипуляции с строкой, и это отчасти избивает меня очень хорошо.Управление строкой Excel VBA

Мне нужно извлечь подстроки из строки.

Это строка:

"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" 

Пожалуйста, помогите!

+0

Попробуйте использовать 'Split'. Это не должно быть слишком сложно – sam092

ответ

0

Вы можете использовать функцию Split и использовать строку '------' в качестве разделителя. Например .:

Dim bigText As String 
bigText = ... 
Dim allModules() As String 
allModules = Split(bigText, "---------------------------------") 

К настоящему allModules это строка массив, содержащий каждый модуль, но пропустить 1-й (это текст до первого «----»).

Если '------' строка не фиксируется и должен быть прочитан из того же самого текста, а затем использовать InStr для поиска «Последствия изменения», найти следующий конец строки (также с 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.

+0

Спасибо, много! –

0

Вы можете использовать функции 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 
+0

Спасибо, много! –

Смежные вопросы