Деление текстовой переменной на текстовую и цисленную части.
Sashagor1982
Дата: Среда, 17.02.2016, 20:42 |
Сообщение № 1
Группа: Проверенные
Ранг: Обитатель
Сообщений: 287
Репутация:
-6
±
Замечаний:
0% ±
Excel 2007
Здравствуйте форумчане. Подскажите пожалуйста, как можно с помощью функции vba разделить текстовую функцию разделить на части "иван" и "18", при этом текстовая переменная: 1. Численная часть всегда в конце; 2. Может содержать в первой половине цифры и пробелы например "1 иван18"; Заранее спасибо.
Здравствуйте форумчане. Подскажите пожалуйста, как можно с помощью функции vba разделить текстовую функцию разделить на части "иван" и "18", при этом текстовая переменная: 1. Численная часть всегда в конце; 2. Может содержать в первой половине цифры и пробелы например "1 иван18"; Заранее спасибо. Sashagor1982
Сообщение отредактировал Sashagor1982 - Среда, 17.02.2016, 20:42
Ответить
Сообщение Здравствуйте форумчане. Подскажите пожалуйста, как можно с помощью функции vba разделить текстовую функцию разделить на части "иван" и "18", при этом текстовая переменная: 1. Численная часть всегда в конце; 2. Может содержать в первой половине цифры и пробелы например "1 иван18"; Заранее спасибо. Автор - Sashagor1982 Дата добавления - 17.02.2016 в 20:42
_Boroda_
Дата: Среда, 17.02.2016, 21:01 |
Сообщение № 2
Группа: Модераторы
Ранг: Местный житель
Сообщений: 16675
Репутация:
6479
±
Замечаний:
0% ±
2003; 2007; 2010; 2013 RUS
Что-то в этом роде хотели? [vba]Код
Sub tt() k_ = "иван18" If IsNumeric(Right(k_, 1)) Then n_ = Len(k_) - 1 For i = 1 To n_ ki_ = Right(k_, 1 + i) If IsNumeric(ki_) Then kn_ = ki_ Else kt_ = Left(k_, n_ - i + 1) Exit For End If Next i End If End Sub
[/vba]
Что-то в этом роде хотели? [vba]Код
Sub tt() k_ = "иван18" If IsNumeric(Right(k_, 1)) Then n_ = Len(k_) - 1 For i = 1 To n_ ki_ = Right(k_, 1 + i) If IsNumeric(ki_) Then kn_ = ki_ Else kt_ = Left(k_, n_ - i + 1) Exit For End If Next i End If End Sub
[/vba] _Boroda_
Скажи мне, кудесник, любимец ба’гов... Платная помощь: Boroda_Excel@mail.ru Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
Ответить
Сообщение Что-то в этом роде хотели? [vba]Код
Sub tt() k_ = "иван18" If IsNumeric(Right(k_, 1)) Then n_ = Len(k_) - 1 For i = 1 To n_ ki_ = Right(k_, 1 + i) If IsNumeric(ki_) Then kn_ = ki_ Else kt_ = Left(k_, n_ - i + 1) Exit For End If Next i End If End Sub
[/vba] Автор - _Boroda_ Дата добавления - 17.02.2016 в 21:01
Sashagor1982
Дата: Среда, 17.02.2016, 22:51 |
Сообщение № 3
Группа: Проверенные
Ранг: Обитатель
Сообщений: 287
Репутация:
-6
±
Замечаний:
0% ±
Excel 2007
А функцией наверное никак не сделать.... [moder]"Функцией" - в смысле "без макроса"? А почему тогда вопрос в ветке VBA? Сделать-то можно, только примерчик бы.
А функцией наверное никак не сделать.... [moder]"Функцией" - в смысле "без макроса"? А почему тогда вопрос в ветке VBA? Сделать-то можно, только примерчик бы. Sashagor1982
Сообщение отредактировал _Boroda_ - Среда, 17.02.2016, 23:58
Ответить
Сообщение А функцией наверное никак не сделать.... [moder]"Функцией" - в смысле "без макроса"? А почему тогда вопрос в ветке VBA? Сделать-то можно, только примерчик бы. Автор - Sashagor1982 Дата добавления - 17.02.2016 в 22:51
StoTisteg
Дата: Среда, 17.02.2016, 23:54 |
Сообщение № 4
Группа: Авторы
Ранг: Старожил
Сообщений: 1161
Репутация:
103
±
Замечаний:
0% ±
Excel 2010
Одной функцией — никак. Можно ещё перебирать символы справа, пока не найдётся буква, но вариант Бороды надёжнее. [vba]Код
Const Фиговина = "121432риотло413024" Dim i, Number As Integer i = 1 Do While IsNumeric(Right(Фиговина, i)) Number = Val(Right(Фиговина, i)) i = i + 1 Loop
[/vba]
Одной функцией — никак. Можно ещё перебирать символы справа, пока не найдётся буква, но вариант Бороды надёжнее. [vba]Код
Const Фиговина = "121432риотло413024" Dim i, Number As Integer i = 1 Do While IsNumeric(Right(Фиговина, i)) Number = Val(Right(Фиговина, i)) i = i + 1 Loop
[/vba] StoTisteg
Интуитивно понятный код - это когда интуитивно понятно, что это код.
Ответить
Сообщение Одной функцией — никак. Можно ещё перебирать символы справа, пока не найдётся буква, но вариант Бороды надёжнее. [vba]Код
Const Фиговина = "121432риотло413024" Dim i, Number As Integer i = 1 Do While IsNumeric(Right(Фиговина, i)) Number = Val(Right(Фиговина, i)) i = i + 1 Loop
[/vba] Автор - StoTisteg Дата добавления - 17.02.2016 в 23:54
Sashagor1982
Дата: Четверг, 18.02.2016, 07:31 |
Сообщение № 5
Группа: Проверенные
Ранг: Обитатель
Сообщений: 287
Репутация:
-6
±
Замечаний:
0% ±
Excel 2007
Спасибо
Ответить
Сообщение Спасибо Автор - Sashagor1982 Дата добавления - 18.02.2016 в 07:31
RAN
Дата: Четверг, 18.02.2016, 08:34 |
Сообщение № 6
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
[vba]Код
Function Мяу(s$) With CreateObject("VBScript.RegExp") .Pattern = "\d+$" If .test(s) Then Мяу = .Execute(s)(0) Мяу = Val(Мяу) ' преобразовать в число Else Мяу = CVErr(xlErrValue) End If End With End Function
[/vba]
[vba]Код
Function Мяу(s$) With CreateObject("VBScript.RegExp") .Pattern = "\d+$" If .test(s) Then Мяу = .Execute(s)(0) Мяу = Val(Мяу) ' преобразовать в число Else Мяу = CVErr(xlErrValue) End If End With End Function
[/vba] RAN
Быть или не быть, вот в чем загвоздка!
Сообщение отредактировал RAN - Четверг, 18.02.2016, 08:56
Ответить
Сообщение [vba]Код
Function Мяу(s$) With CreateObject("VBScript.RegExp") .Pattern = "\d+$" If .test(s) Then Мяу = .Execute(s)(0) Мяу = Val(Мяу) ' преобразовать в число Else Мяу = CVErr(xlErrValue) End If End With End Function
[/vba] Автор - RAN Дата добавления - 18.02.2016 в 08:34
sv2014
Дата: Четверг, 18.02.2016, 10:28 |
Сообщение № 7
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 226
Репутация:
61
±
Замечаний:
0% ±
Excel 2013
Sashagor1982 , еще вариант функции yyy1 и yyy2 [vba]Код
Function yyy1%(t$) Dim i% For i = Len(t) To 1 Step -1 If Mid(t, i, 1) Like "[а-яё]" Then yyy1 = Mid(t, i + 1): Exit Function Next End Function
[/vba] [vba]Код
Function yyy2$(t$) Dim i% For i = Len(t) To 1 Step -1 If Mid(t, i, 1) Like "[а-яё]" Then yyy2 = Left(t, i): Exit Function Next End Function
[/vba]
Sashagor1982 , еще вариант функции yyy1 и yyy2 [vba]Код
Function yyy1%(t$) Dim i% For i = Len(t) To 1 Step -1 If Mid(t, i, 1) Like "[а-яё]" Then yyy1 = Mid(t, i + 1): Exit Function Next End Function
[/vba] [vba]Код
Function yyy2$(t$) Dim i% For i = Len(t) To 1 Step -1 If Mid(t, i, 1) Like "[а-яё]" Then yyy2 = Left(t, i): Exit Function Next End Function
[/vba]sv2014
Сообщение отредактировал sv2014 - Четверг, 18.02.2016, 10:38
Ответить
Сообщение Sashagor1982 , еще вариант функции yyy1 и yyy2 [vba]Код
Function yyy1%(t$) Dim i% For i = Len(t) To 1 Step -1 If Mid(t, i, 1) Like "[а-яё]" Then yyy1 = Mid(t, i + 1): Exit Function Next End Function
[/vba] [vba]Код
Function yyy2$(t$) Dim i% For i = Len(t) To 1 Step -1 If Mid(t, i, 1) Like "[а-яё]" Then yyy2 = Left(t, i): Exit Function Next End Function
[/vba]Автор - sv2014 Дата добавления - 18.02.2016 в 10:28
Udik
Дата: Четверг, 18.02.2016, 15:02 |
Сообщение № 8
Группа: Друзья
Ранг: Старожил
Сообщений: 1588
Репутация:
192
±
Замечаний:
0% ±
Excel 2016 х 64
просмотрел условие
вот вам барабан яд 41001231307558 wm R419131876897 udik1968@gmail.com
Сообщение отредактировал Udik - Четверг, 18.02.2016, 15:03
Ответить
Сообщение просмотрел условие Автор - Udik Дата добавления - 18.02.2016 в 15:02
Sashagor1982
Дата: Четверг, 18.02.2016, 22:17 |
Сообщение № 9
Группа: Проверенные
Ранг: Обитатель
Сообщений: 287
Репутация:
-6
±
Замечаний:
0% ±
Excel 2007
sv2014 , Спасибо
Ответить
Сообщение sv2014 , СпасибоАвтор - Sashagor1982 Дата добавления - 18.02.2016 в 22:17
Gustav
Дата: Пятница, 19.02.2016, 22:36 |
Сообщение № 10
Группа: Друзья
Ранг: Участник клуба
Сообщений: 2733
Репутация:
1136
±
Замечаний:
0% ±
начинал с Excel 4.0, видел 2.1
Мои "5 копеек" в копилочку - без циклов: [vba]Код
Sub io() Dim ss$, p1$, p2$ ss = "15 иван 18965000" p2 = StrReverse(Mid(Val(1 & StrReverse(ss)), 2)) p1 = Trim(Left(ss, Len(ss) - Len(p2))) Debug.Print p1 & " --- " & p2 '15 иван --- 18965000 End Sub
[/vba]
Мои "5 копеек" в копилочку - без циклов: [vba]Код
Sub io() Dim ss$, p1$, p2$ ss = "15 иван 18965000" p2 = StrReverse(Mid(Val(1 & StrReverse(ss)), 2)) p1 = Trim(Left(ss, Len(ss) - Len(p2))) Debug.Print p1 & " --- " & p2 '15 иван --- 18965000 End Sub
[/vba] Gustav
МОИ: Ник , Tip box: 41001663842605
Сообщение отредактировал Gustav - Пятница, 19.02.2016, 22:40
Ответить
Сообщение Мои "5 копеек" в копилочку - без циклов: [vba]Код
Sub io() Dim ss$, p1$, p2$ ss = "15 иван 18965000" p2 = StrReverse(Mid(Val(1 & StrReverse(ss)), 2)) p1 = Trim(Left(ss, Len(ss) - Len(p2))) Debug.Print p1 & " --- " & p2 '15 иван --- 18965000 End Sub
[/vba] Автор - Gustav Дата добавления - 19.02.2016 в 22:36