Страницы: 1
RSS
VBA: разделение текстовой строки на несколько по критериям
 
Имеется строка вида "x-y-z". Нужно выделить из неё x, y и z.  
x может включать любые символы, y и z состоят только из цифр, разделяются всегда дефисами Например, для значения строки "С-1-1-01" должно рассчитаться x = "C-1", y = 1, z = 1.  
 
Как сделать это формулами, я знаю, а вот VBA только начинаю осваивать.
 
Макрос назван в честь Алексадра, день рождения которого мы (олухи) вчера прозевали :(((( Прости нас и прими наилучшие пожелания.  
Sub ikki_ДР()  
p = Split(Cells(1, 1), "-")  
For i = 0 To UBound(p)  
Cells(1, i + 2) = p(i)  
Next ikki  
End Sub
 
гы. спс, Карен.
фрилансер Excel, VBA - контакты в профиле
"Совершенствоваться не обязательно. Выживание — дело добровольное." Э.Деминг
 
Next i
 
Sub ikki_ДР_2()  
p = Split(Cells(1, 1), "-")  
Cells(1, 2).Resize(1, UBound(p) + 1) = p  
End Sub  
Саша, икни ещё раз :-)
 
{quote}{login=k61}{date=18.02.2012 12:55}{thema=правка:}{post}Next i{/post}{/quote}  
Split  
 
Sub SttrCut()  
Dim myArr As Variant  
Dim x  
myArr = Split("a-b-c-d-e-f-g", "-", -1, vbTextCompare)  
For x = 0 To UBound(myArr)  
Debug.Print myArr(x)  
Next x  
End Sub
 
Sub ikki_ДР_3()  
Cells(1, 1).Parse ParseLine:="[xxx] [x] [xx]", Destination:=Cells(1, 2)
End Sub
 
Вот что у меня получилось в итоге:  
 
Private Function SplitID()  
   p = Split(TextBox3.Value, "-")  
   X = p(0)  
   For i = 1 To UBound(p) - 2  
   X = X & "-" & p(i)  
   Next i  
   Y = p(UBound(p) - 1)  
   Z = p(UBound(p))  
   ComboBox1.Value = X  
   TextBox1.Value = Y  
   TextBox2.Value = Z  
End Function  
 
Всем большое спасибо! Вы мне очень помогли.
 
Можно обойтись без цикла:  
X = p(0) & "-" & p(i)
 
Sub SplitID1()  
p = Split(TextBox3.Value, "-")  
ComboBox1.Value = p(0) & "-" & p(1)  
TextBox1.Value = p(2)  
TextBox2.Value = p(3)  
End Sub
 
{quote}{login=k61}{date=18.02.2012 01:39}{thema=re: Arex}{post}Можно обойтись без цикла:  
X = p(0) & "-" & p(i){/post}{/quote}  
Это если в первой части только один дефис. Но их там может быть произвольное количество. Для этого и цикл.  
 
Кстати, у меня выдалась небольшая проблема с Z. В приведённом примере Z = 01, то есть является текстом. Как его можно перевести в число (в произвольном случае, а не только 01)?
 
Так Z=val(Z)
 
Спасибо.
 
Sub io()  
Dim x  
For Each x In Split("1-2-3", "-")  
   MsgBox x  
Next  
End Sub  
 
>Как его можно перевести в число  
Если целое, то достаточно CLng() или CInt()  
MsgBox CInt("01")  
MsgBox CLng("01")
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук


https://github.com/nervgh
Страницы: 1
Читают тему
Наверх