Консультация № 53695
29.08.2006, 19:35
0.00 руб.
0 9 6
Уважаемые эксперты, у меня вопрос как в VBA можно обратиться к строке как к массиву. то есть например
у меня набор символов str = "фыамм,ауапапююывпы....000аывп345"
как мне организовать средсвами VBA вычлинение цыфр из это строки?

заранее благодарен

Обсуждение

Неизвестный
29.08.2006, 19:45
общий
это ответ
Здравствуйте, Blajimir!

Такого счастья как в C++ конечно нет, но есть функция instr, которая выбирает подстроку

Используйте так X = mid(CTPOKA,n,1) - в Х будет символ с номером n (отсчёт с 1)

Количество символов - len(CTPOKA)

Для ускорения можно использовать instr(from,where,what)
from - номер символа, с которого начинаем поиск
where - строка в которой ищем
what - искомая подстрока

Функция возвращает номер первого символа первого вхождения подстроки или
ноль, если ничего не найдёт.
Неизвестный
29.08.2006, 19:56
общий
наверное я не так выразился, потому что вы меня не совсем правельно поняли. Мне нужно узнать какими средствами можно из строки "фыамм,ауапапююывпы....000аывп345" получить строку "фыамм,ауапапююывпы....аывп", т.е. без цыфр к примеруКак их можно оттуда убрать? И как можно получить доступ строке как к массиву, если это возможно стредствами VBA?
Неизвестный
29.08.2006, 20:06
общий
это ответ
Здравствуйте, Blajimir!

Например так , как в приложении. В строку цифр не попадут разделители целой и дробной части, т.е. только цифры от 0 до 9 .
Результат будет строковым выражением.

С уважением.

Приложение:
dim str as string ‘полная строкаdim num as string ‘строка цифрdim sim as string ‘строка остальных символовdim i as longstr = "фыамм,ауапапююывпы....000аывп345"num=""sim=""for i=1 to len(str) if mid(str,i,1)>="0" and mid(str,i,1)<="9" then num=num & mid(str,i,1) else sim=sim & mid(str,i,1) endifnext
Неизвестный
29.08.2006, 20:10
общий
Открой EXCEL, создай макрос и помести в него код из приложения. На последней строке поставь ОСТАНОВ и запусти. Я так и проверял работу кода.Результат как раз две строки - только цифры и без цифр
Неизвестный
29.08.2006, 20:14
общий
это ответ
Здравствуйте, Blajimir!
В приложении код, не самый изящный но работает.
Удачи!

Приложение:
Dim Str As String, NewStr As String Str = "фыамм,ауапапююывпы....000аывп345" For i = 1 To Len(Str) On Error Resume Next NewStr = NewStr & CStr(CInt(Mid(Str, i, 1))) Next
Неизвестный
29.08.2006, 20:46
общий
это ответ
Здравствуйте, Blajimir!
После приведённого ниже цикла:
str=""
str1="<цифры из бывшего str>"
Суть проста: берём 1 символ слева строки, сравниваем его ascii код с 0 и 9-кой и если он между ними(то есть мы имеем дело с цифрой), то записываем его в str1, и потом удаляем его.

Приложение:
For i = 0 To Len(str) If str <> "" Then If Asc(Left(str, 1)) >= Asc("0") And Asc(Left(str, 1)) <= Asc("9") Then str1 = str1 + Left(str, 1) End If str = Right(str, Len(str) - 1) End IfNext
Неизвестный
30.08.2006, 09:31
общий
это ответ
Здравствуйте, Blajimir!
это очень просто
с помощью функций

mid
left
rigth
Неизвестный
30.08.2006, 09:31
общий
это ответ
Здравствуйте, Blajimir!
Для этого выдергиваем по одному символу из строки, сравниваем с кодом таблицы ASCII.

dim a as string
txt = "фыамм,ауапапююывпы....000аывп345"
for i=0 to len(txt)
if asc(mid(txt,i,1))<48 or asc(mid(txt,i,1)>57 then txt1=txt1 & mid(txt,i,1)
next
Неизвестный
02.09.2006, 14:04
общий
Например, можно еще так:Dim b() as bytedim s as string, sRet as stringdim i as longs="фыамм,ауапапююывпы....000аывп345"b=strconv(s,vbFromUnicode)for i=lbound(b) to ubound(b)if isnumeric(chr$(b(i))=False thensRet=sRet & chr$(b(i))end ifnext iMsgBox sRet
Форма ответа