Как найти число в строке vba

I need to find numbers from a string. How does one find numbers from a string in VBA Excel?

ZygD's user avatar

ZygD

21.2k39 gold badges74 silver badges98 bronze badges

asked Aug 30, 2011 at 6:10

user905527's user avatar

0

Assuming you mean you want the non-numbers stripped out, you should be able to use something like:

Function onlyDigits(s As String) As String
    ' Variables needed (remember to use "option explicit").   '
    Dim retval As String    ' This is the return string.      '
    Dim i As Integer        ' Counter for character position. '

    ' Initialise return string to empty                       '
    retval = ""

    ' For every character in input string, copy digits to     '
    '   return string.                                        '
    For i = 1 To Len(s)
        If Mid(s, i, 1) >= "0" And Mid(s, i, 1) <= "9" Then
            retval = retval + Mid(s, i, 1)
        End If
    Next

    ' Then return the return string.                          '
    onlyDigits = retval
End Function

Calling this with:

Dim myStr as String
myStr = onlyDigits ("3d1fgd4g1dg5d9gdg")
MsgBox (myStr)

will give you a dialog box containing:

314159

and those first two lines show how you can store it into an arbitrary string variable, to do with as you wish.

answered Aug 30, 2011 at 6:20

paxdiablo's user avatar

paxdiablopaxdiablo

846k233 gold badges1567 silver badges1941 bronze badges

6

Regular expressions are built to parse. While the syntax can take a while to pick up on this approach is very efficient, and is very flexible for handling more complex string extractions/replacements

Sub Tester()
     MsgBox CleanString("3d1fgd4g1dg5d9gdg")
End Sub

Function CleanString(strIn As String) As String
    Dim objRegex
    Set objRegex = CreateObject("vbscript.regexp")
    With objRegex
     .Global = True
     .Pattern = "[^d]+"
    CleanString = .Replace(strIn, vbNullString)
    End With
End Function

answered Sep 14, 2011 at 8:33

brettdj's user avatar

brettdjbrettdj

54.7k16 gold badges113 silver badges176 bronze badges

4

Expanding on brettdj’s answer, in order to parse disjoint embedded digits into separate numbers:

Sub TestNumList()
    Dim NumList As Variant  'Array

    NumList = GetNums("34d1fgd43g1 dg5d999gdg2076")

    Dim i As Integer
    For i = LBound(NumList) To UBound(NumList)
        MsgBox i + 1 & ": " & NumList(i)
    Next i
End Sub

Function GetNums(ByVal strIn As String) As Variant  'Array of numeric strings
    Dim RegExpObj As Object
    Dim NumStr As String

    Set RegExpObj = CreateObject("vbscript.regexp")
    With RegExpObj
        .Global = True
        .Pattern = "[^d]+"
        NumStr = .Replace(strIn, " ")
    End With

    GetNums = Split(Trim(NumStr), " ")
End Function

answered May 28, 2014 at 22:19

pstraton's user avatar

pstratonpstraton

1,03814 silver badges9 bronze badges

1

Use the built-in VBA function Val, if the numbers are at the front end of the string:

Dim str as String
Dim lng as Long

str = "1 149 xyz"
lng = Val(str)

lng = 1149

Val Function, on MSDN

answered Jul 22, 2018 at 13:26

Rohan Moore's user avatar

3

I was looking for the answer of the same question but for a while I found my own solution and I wanted to share it for other people who will need those codes in the future. Here is another solution without function.

Dim control As Boolean
Dim controlval As String
Dim resultval As String
Dim i as Integer

controlval = "A1B2C3D4"

For i = 1 To Len(controlval)
control = IsNumeric(Mid(controlval, i, 1))
If control = True Then resultval = resultval & Mid(controlval, i, 1)
Next i

resultval = 1234

answered May 22, 2019 at 6:23

Ergin's user avatar

ErginErgin

431 silver badge7 bronze badges

This a variant of brettdj’s & pstraton post.

This will return a true Value and not give you the #NUM! error. And D is shorthand for anything but digits. The rest is much like the others only with this minor fix.

Function StripChar(Txt As String) As Variant
With CreateObject("VBScript.RegExp")
    .Global = True
    .Pattern = "D"
    StripChar = Val(.Replace(Txt, " "))
End With
End Function

answered Sep 25, 2018 at 19:29

Ste's user avatar

SteSte

1,6501 gold badge14 silver badges26 bronze badges

This is based on another answer, but is just reformated:

Assuming you mean you want the non-numbers stripped out, you should be able to use something like:

'
' Skips all characters in the input string except digits
'
Function GetDigits(ByVal s As String) As String
    Dim char As String
    Dim i As Integer
    GetDigits = ""
    For i = 1 To Len(s)
        char = Mid(s, i, 1)
        If char >= "0" And char <= "9" Then
            GetDigits = GetDigits + char
        End If
    Next i
End Function

Calling this with:

Dim myStr as String
myStr = GetDigits("3d1fgd4g1dg5d9gdg")
Call MsgBox(myStr)

will give you a dialog box containing:

314159

and those first two lines show how you can store it into an arbitrary string variable, to do with as you wish.

answered May 5, 2019 at 12:12

Top-Master's user avatar

Top-MasterTop-Master

7,2735 gold badges38 silver badges66 bronze badges

Alternative via Byte Array

If you assign a string to a Byte array you typically get the number equivalents of each character in pairs of the array elements. Use a loop for numeric check via the Like operator and return the joined array as string:

Function Nums(s$)
  Dim by() As Byte, i&, ii&
  by = s: ReDim tmp(UBound(by))                    ' assign string to byte array; prepare temp array
  For i = 0 To UBound(by) - 1 Step 2               ' check num value in byte array (0, 2, 4 ... n-1)
      If Chr(by(i)) Like "#" Then tmp(ii) = Chr(by(i)): ii = ii + 1
  Next i
  Nums = Trim(Join(tmp, vbNullString))             ' return string with numbers only
  End Function

Example call

Sub testByteApproach()
  Dim s$: s = "a12bx99y /:3,14159"                 ' [1] define original string
  Debug.Print s & " => " & Nums(s)                  ' [2] display original string and result
End Sub

would display the original string and the result string in the immediate window:

  a12bx99y /:3,14159 => 1299314159

answered May 22, 2019 at 9:12

T.M.'s user avatar

T.M.T.M.

9,2593 gold badges32 silver badges57 bronze badges

Based on @brettdj’s answer using a VBScript regex ojbect with two modifications:

  • The function handles variants and returns a variant. That is, to take care of a null case; and
  • Uses explicit object creation, with a reference to the “Microsoft VBScript Regular Expressions 5.5” library
Function GetDigitsInVariant(inputVariant As Variant) As Variant
  ' Returns:
  '     Only the digits found in a varaint.
  ' Examples:
  '     GetDigitsInVariant(Null) => Null
  '     GetDigitsInVariant("") => ""
  '     GetDigitsInVariant(2021-/05-May/-18, Tue) => 20210518
  '     GetDigitsInVariant(2021-05-18) => 20210518
  ' Notes:
  '     If the inputVariant is null, null will be returned.
  '     If the inputVariant is "", "" will be returned.
  ' Usage:
  '     VBA IDE Menu > Tools > References ...
  '       > "Microsoft VBScript Regular Expressions 5.5" > [OK]

  ' With an explicit object reference to RegExp we can get intellisense
  ' and review the object heirarchy with the object browser
  ' (VBA IDE Menu > View > Object Browser).
  Dim regex As VBScript_RegExp_55.RegExp
  Set regex = New VBScript_RegExp_55.RegExp
  
  Dim result As Variant
  result = Null
  
  If IsNull(inputVariant) Then
    result = Null
    
  Else
    With regex
      .Global = True
      .Pattern = "[^d]+"
      result = .Replace(inputVariant, vbNullString)
    End With
  End If
  
  GetDigitsInVariant = result
End Function

Testing:

Private Sub TestGetDigitsInVariant()
  Dim dateVariants As Variant
  dateVariants = Array(Null, "", "2021-/05-May/-18, Tue", _
          "2021-05-18", "18/05/2021", "3434 ..,sdf,sfd 444")
  
  Dim dateVariant As Variant
  For Each dateVariant In dateVariants
    Debug.Print dateVariant & ": ", , GetDigitsInVariant(dateVariant)
  Next dateVariant
  Debug.Print
End Sub

answered Jan 4, 2021 at 19:20

John Bentley's user avatar

John BentleyJohn Bentley

1,6381 gold badge16 silver badges18 bronze badges

Public Function ExtractChars(strRef$) As String
'Extract characters from a string according to a range of charactors e.g'+.-1234567890'
  Dim strA$, e%, strExt$, strCnd$: strExt = "": strCnd = "+.-1234567890"
  For e = 1 To Len(strRef): strA = Mid(strRef, e, 1)
    If InStr(1, strCnd, strA) > 0 Then strExt = strExt & strA
  Next e: ExtractChars = strExt
End Function

In the immediate debug dialog:

? ExtractChars(“a-5d31.78K”)

-531.78

answered Nov 6, 2021 at 15:44

Zhou Lei's user avatar

2

An improved version of spere’s answer (can’t edit his answer), which works for any pattern

Private Function GetNumLoc(textValue As String, pattern As String) As Integer
    For GetNumLoc = 1 To (Len(textValue) - Len(pattern) + 1)
        If Mid(textValue, GetNumLoc, Len(pattern)) Like pattern Then Exit Function
    Next

    GetNumLoc = 0
End Function

To get the pattern value you can use this:

Private Function GetTextByPattern(textValue As String, pattern As String) As String
    Dim NumLoc As Integer
    For NumLoc = 1 To (Len(textValue) - Len(pattern) + 1)
        If Mid(textValue, NumLoc, Len(pattern)) Like pattern Then
            GetTextByPattern = Mid(textValue, NumLoc, Len(pattern))
            Exit Function
        End If
    Next    

    GetTextByPattern = ""
End Function

Example use:

dim bill as String
bill = "BILLNUMBER 2202/1132/1 PT2200136"

Debug.Print GetNumLoc(bill , "PT#######")
'Printed result:
'24

Debug.Print GetTextByPattern(bill , "PT#######")
'Printed result:
'PT2200136

Нахождение числа в строке

Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.

Sanya Z
Бывалый
Бывалый
Аватара пользователя

 
Сообщения: 240
Зарегистрирован: 18.08.2003 (Пн) 3:15
Откуда: Москва
  • Сайт
  • ICQ

Нахождение числа в строке

Как из такой строки выбрать только число :?: Например: “pr123st”

Большое спасибо!

И пусть в моих поступках не было логики…


ANDLL
Великий гастроном
Великий гастроном
Аватара пользователя

 
Сообщения: 3450
Зарегистрирован: 29.06.2003 (Вс) 18:55
  • ICQ

Сообщение ANDLL » 06.01.2004 (Вт) 18:09

Код: Выделить всё
dim I as long, pos as long

for i=0 to 9
   pos=instr(stroka,cstr(i))
   if pos>0 then
      number=val(mid(stroka,pos))
      Exit for'а может и не надо...
   enb if
next


Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя

 
Сообщения: 4128
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Сообщение Mikle » 06.01.2004 (Вт) 18:11

Код: Выделить всё
for n = 1 to len(s)
  d= val (mid$(s,n))
  if d<>0 then exit for
next n
debug.print d

найдет ПЕРВОЕ число в строке.


gaidar
System Debugger
System Debugger
 
Сообщения: 3152
Зарегистрирован: 23.12.2001 (Вс) 13:22
  • Сайт

Сообщение gaidar » 06.01.2004 (Вт) 18:35

А через Like [0-9] нельзя?

The difficult I’ll do right now. The impossible will take a little while. (c) US engineers in WWII

I don’t always know what I’m talking about, but I know I’m right. (c) Muhammad Ali


Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя

 
Сообщения: 4128
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Сообщение Mikle » 06.01.2004 (Вт) 18:48

Можно, только еще “.” для дробей и “-” для отрицательных.


ANDLL
Великий гастроном
Великий гастроном
Аватара пользователя

 
Сообщения: 3450
Зарегистрирован: 29.06.2003 (Вс) 18:55
  • ICQ

Сообщение ANDLL » 06.01.2004 (Вт) 18:57

Простите за глупость :oops:

Что такое like??

Это такой оператор, или функция???

Ичто он/она делает.


gaidar
System Debugger
System Debugger
 
Сообщения: 3152
Зарегистрирован: 23.12.2001 (Вс) 13:22
  • Сайт

Сообщение gaidar » 06.01.2004 (Вт) 21:39

Оператор сравнения. Читай msdn.

The difficult I’ll do right now. The impossible will take a little while. (c) US engineers in WWII

I don’t always know what I’m talking about, but I know I’m right. (c) Muhammad Ali


Sanya Z
Бывалый
Бывалый
Аватара пользователя

 
Сообщения: 240
Зарегистрирован: 18.08.2003 (Пн) 3:15
Откуда: Москва
  • Сайт
  • ICQ

Сообщение Sanya Z » 06.01.2004 (Вт) 23:41

Насколько я понял вышеназванные коды находят только первую цифру числа, а как выдрать все число :?: Помню, я где-то видел пример, когда в TextBox можно было вводить только цифры. Возможно, на основ этого можно найти и все число, путем посимвольного опознавания. Если у кого есть, киньте please! :arrow:

И пусть в моих поступках не было логики…


vilin
Начинающий
Начинающий
 
Сообщения: 23
Зарегистрирован: 06.01.2004 (Вт) 22:11
Откуда: Кишинёв

Сообщение vilin » 07.01.2004 (Ср) 0:54

Например, st=”fsdf342hfdg”

Тогда:

dim chislo as string

dim ch as string

for i=1 to len(st)

ch=mid(st,i,1)

if IsInt(ch) =true then ‘ я не помню точно: IsInt или IsInteger… посмотришь сам

chislo = chislo & ch

endif

next i

dim a as integer

a = int(chislo) ‘ а – нужное тебе число

Вроде бы, должно работать, не проверял…

Если что, пиши…


Sanya Z
Бывалый
Бывалый
Аватара пользователя

 
Сообщения: 240
Зарегистрирован: 18.08.2003 (Пн) 3:15
Откуда: Москва
  • Сайт
  • ICQ

Сообщение Sanya Z » 07.01.2004 (Ср) 2:03

На IsInt ругается, а идея правильная.

И пусть в моих поступках не было логики…


GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 07.01.2004 (Ср) 9:51

Короче, в общем виде…

Код: Выделить всё
function filter(byval s as string, byval f as string) as string
  dim i as long, tmpStr as string
  for i=1 to len(s)
    tmpstr=mid$(s,i,1)
    if instr(f,tmpstr) then filter=filter+tmpstr
  next
end function

debug.? filter("dfgsdf04567d","0123456789.")

Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас


Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя

 
Сообщения: 4128
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Сообщение Mikle » 07.01.2004 (Ср) 15:25

Sanya Z

Насколько я понял вышеназванные коды находят только первую цифру числа, а как выдрать все число

Ты бы хоть проверил, что тебе написали, а потом делел выводы. Мой пример дает ВСЕ число, только допиши вначале:

Код: Выделить всё
  DIM n as integer, d as duoble, s as string
  s="jddjk-35.345hkjd lsa "

я это не вписал – думал и так понятно.


Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя

 
Сообщения: 4128
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Сообщение Mikle » 07.01.2004 (Ср) 15:32

GSerg

Вариант более, чем с одним числом, например такой:

Код: Выделить всё
Debug.Print filter("dfgsdf04567d34656", "0123456789.")

или с несколькими десятичными точками, дает неверный результат.


vilin
Начинающий
Начинающий
 
Сообщения: 23
Зарегистрирован: 06.01.2004 (Вт) 22:11
Откуда: Кишинёв

Сообщение vilin » 07.01.2004 (Ср) 16:54

Я тут немного помучался, и нашёл новый способ решения… правда, переменных многовато…

Код: Выделить всё
Dim st As String
    st = "ksjhgk -32542.25 fkgjdf"
Dim i As Integer
Dim ch As String
Dim ch2 As String
Const stroka = "1234567890"
Dim chislo As String

For i = 1 To Len(st)
    ch = Mid(st, i, 1)
    Select Case ch
        Case "-"
            ch2 = Mid(st, i + 1, 1)
            If InStr(stroka, ch2) Then
                chislo = chislo & Mid(st, i, 2)
                i = i + 1
            End If

            Case "."
            If i <> 1 Then
                ch2 = Mid(st, i - 1, 1)
                If InStr(stroka, ch2) Then
                    chislo = chislo & Mid(st, i, 1)
                End If
            End If
    End Select

        If InStr(stroka, ch) Then
        chislo = chislo & Mid(st, i, 1)
    End If

    Next i

chislo – Нужное тебе число (в текстовом виде)

Далее, в зависимости от типа числа (Integer или Double), преобразовываешь его в нужный тебе тип…


Sanya Z
Бывалый
Бывалый
Аватара пользователя

 
Сообщения: 240
Зарегистрирован: 18.08.2003 (Пн) 3:15
Откуда: Москва
  • Сайт
  • ICQ

Сообщение Sanya Z » 07.01.2004 (Ср) 22:35

Всем огромное спасибо! :D Все работает :D

И пусть в моих поступках не было логики…



Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: AhrefsBot, Mail.ru [бот] и гости: 2

1014 / 118 / 2

Регистрация: 26.08.2011

Сообщений: 1,113

Записей в блоге: 2

1

Узнать есть ли в слове цифры

29.12.2020, 16:22. Показов 2045. Ответов 5


Студворк — интернет-сервис помощи студентам

Есть составные определители из слов, чисел и буквочисел
Например CLEAR-ECHO 822 LAUD 1266
CLEAR-ECHO HERSHL354 D-RAC 822

Нужно узнать, есть ли в слове цифры?
Мне нужно такие слова дальше пропускать при обработке.



0



Programming

Эксперт

94731 / 64177 / 26122

Регистрация: 12.04.2006

Сообщений: 116,782

29.12.2020, 16:22

5

КостяФедореев

Часто онлайн

794 / 531 / 239

Регистрация: 09.01.2017

Сообщений: 1,823

29.12.2020, 16:38

2

Лучший ответ Сообщение было отмечено Catstail как решение

Решение

AndreA SN,

Visual Basic
1
If Cells(1, 1).Value Like "*[0-9]*" Then MsgBox "Найдены цифры"



1



2653 / 1652 / 753

Регистрация: 23.03.2015

Сообщений: 5,193

29.12.2020, 17:54

3

AndreA SN,

Цитата
Сообщение от AndreA SN
Посмотреть сообщение

ли в слове цифры

или в ячейке .
Уточните плиз- это разные весчи…



0



Narimanych

2653 / 1652 / 753

Регистрация: 23.03.2015

Сообщений: 5,193

29.12.2020, 21:00

4

AndreA SN,
Привет еще раз…

Вот вариант кода , если в строке НЕ СОДЕРЖИТСЯ буквочисел или числобукв то окрашиваем ячейку в зеленый цвет:

Кликните здесь для просмотра всего текста

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Sub MMM()
    LR = Cells(Rows.Count, 1).End(xlUp).Row
    With CreateObject("VBScript.RegExp")
        i = 1
        Do While i <= LR
             .Pattern = "[A-z]+d+"
             If .Test(Cells(i, 1).Value) Then i = i + 1
             .Pattern = "d+[A-z]+"
             If .Test(Cells(i, 1).Value) Then i = i + 1
             Cells(i, 1).Interior.Color = vbGreen
             i = i + 1
        Loop
    End With
End Sub

Вот вариант проверки каждого слова в строке ..если в слове НЕ СОДЕРЖИТСЯ буквочисел или числобукв то окрашиваем слова в красный и выделяем жирным…

Кликните здесь для просмотра всего текста

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Sub NNN()
    LR = Cells(Rows.Count, 1).End(xlUp).Row
    With CreateObject("VBScript.RegExp")
    On Error Resume Next
        For i = 1 To LR
           SS = Split(Cells(i, 1).Value)
              j = 0
             Do While j <= UBound(SS)
                  .Pattern = "[A-z]+d+"
                  If .Test(SS(j)) Then j = j + 1
                  .Pattern = "d+[A-z]+"
                  If .Test(SS(j)) Then j = j + 1
                L = Len(SS(j))
                X = InStr(Cells(i, 1).Value, SS(j))
                With Cells(i, 1).Characters(X, L).Font
                .Bold = True
                .Color = vbRed
                End With
                j = j + 1
             Loop
         Next
    End With
End Sub

Файл с примером приложил…

Вложения

Тип файла: rar For Andre.rar (19.9 Кб, 2 просмотров)



1



Catstail

Модератор

Эксперт функциональных языков программированияЭксперт Python

35190 / 19407 / 4063

Регистрация: 12.02.2012

Сообщений: 32,408

Записей в блоге: 13

01.01.2021, 10:35

5

Или традиционно:

Visual Basic
1
2
3
4
5
6
7
8
9
Function hasDigits(s as string) As boolean
   for i%=1 to len(s)
        if mid$(s,i%,1)>=0 and mid$(s,i%,1)<=9 then 
           hasDigits=True
           Exit Function
        end if
   next i%
   hasDigits=False
End Function



1



badakhshan

Заблокирован

01.01.2021, 13:30

6

Судя по отмеченному “лучшему ответу” ответ можно чуть сократить:
вместо *[0-9]* написать *#* ?
С Новым Годом!



2



IT_Exp

Эксперт

87844 / 49110 / 22898

Регистрация: 17.06.2006

Сообщений: 92,604

01.01.2021, 13:30

Помогаю со студенческими работами здесь

Узнать, есть ли в каждом из чисел 2 одинаковые цифры, стоящие рядом
Процедуры и Функции.
В задаче вводится 3 числа, надо узнать есть ли там в каждом из чисел 2…

Есть ли какой-то способ узнать, что с консоли введен именно текст, а не цифры
Добрий день!
Есть ли какой-то способ узнать что с консоли введен именно текст, а не цифри не…

Дана строка S. Выяснить есть ли в ней цифры. Если есть, то вывести эти цифры на экран, а также их количество
Дана строка S. Выяснить есть ли в ней цифры. Если есть, то вывести эти цифры на экран, а также их…

Поиск букв в слове. Напишите программу для проверки, есть ли в слове Х буква «а»
Поиск букв в слове. Напишите программу для проверки, есть ли в слове Х буква «а». если есть, то…

Напишите программу, выясняющую, есть ли в слове X буква “к”, и, если есть, то замените все буквы “а” в этом слове на “с”
Напишите программу, выясняющую, есть ли в слове X буква &quot;к&quot;, и, если есть, то замените все буквы…

Написать алгоритм Маркова, который в алфавите {a,b,c} удаляет в слове предпоследнюю букву, если в слове есть буквы b
Написать алгоритм Маркова, который в алфавите {a,b,c} удаляет в слове предпоследнюю букву, если в…

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:

6

 

Chyma

Пользователь

Сообщений: 117
Регистрация: 24.12.2012

Всем привет. Дано: текстовая строка. Например “текст 23 + ура5”. Найти позицию первого появления цифры. В данном случае для двойки это 7. Попробовал worksheetfunction.search(“#”,”текст 23 + ура5″), но VBA ругается. Почему не понимает “#” ? Решение циклом не предлагать.

 

Jack

Пользователь

Сообщений: 352
Регистрация: 01.01.1970

=ЕСЛИ(ЕОШИБКА(ПОИСК(1;D2));ЕСЛИ(ЕОШИБКА(ПОИСК(2;D2));ЕСЛИ(ЕОШИБКА(ПОИСК(3;D2));ЕСЛИ(ЕОШИБКА(ПОИСК(4;D2));ЕСЛИ(ЕОШИБКА(ПОИСК(5;D2));ЕСЛИ(ЕОШИБКА(ПОИСК(6;D2));ЕСЛИ(ЕОШИБКА(ПОИСК(7;D2));ЕСЛИ(ЕОШИБКА(ПОИСК(8;D2));ЕСЛИ(ЕОШИБКА(ПОИСК(9;D2));ЕСЛИ(ЕОШИБКА(ПОИСК(0;D2)); 0; ПОИСК(0;D2)); ПОИСК(9;D2)); ПОИСК(8;D2)); ПОИСК(7;D2)); ПОИСК(6;D2)); ПОИСК(5;D2)); ПОИСК(4;D2)); ПОИСК(3;D2)); ПОИСК(2;D2)); ПОИСК(1;D2))

цифр только 10. последовательным определением позиции цифры от 0 до 9

 

MCH

Пользователь

Сообщений: 3883
Регистрация: 22.12.2012

#3

07.08.2014 11:04:13

Код
=МИН(ЕСЛИ(ЕЧИСЛО(ПОИСК({0:1:2:3:4:5:6:7:8:9};A1));ПОИСК({0:1:2:3:4:5:6:7:8:9};A1)))

Код
=МИН(ПОИСК({0:1:2:3:4:5:6:7:8:9};A1&1234567890))

Изменено: MCH07.08.2014 11:06:08

 

Jack

Пользователь

Сообщений: 352
Регистрация: 01.01.1970

о как. есть и поизящнее решения {}. спс. надо взять на заметку)
MCH, а можно ликбез по синтаксису предложенного решения?

Изменено: Jack07.08.2014 11:11:57

 

Михаил С.

Пользователь

Сообщений: 10514
Регистрация: 21.12.2012

#5

07.08.2014 11:51:59

Цитата
MCH пишет: =МИН(ПОИСК({0:1:2:3:4:5:6:7:8:9};A1&1234567890))

А если изначально нет чисел, как узнаем?

зы. вот так проще набирать (в русском экселе) {1;2;3;4;5;6;7;8;9;0}   :)

 

MCH

Пользователь

Сообщений: 3883
Регистрация: 22.12.2012

#6

07.08.2014 12:07:36

Цитата
Михаил С. пишет: А если изначально нет чисел, как узнаем?

В задании об этом ничего нет, а занулять значение с помощью ОСТАТ не было желания

Цитата
Михаил С. пишет: вот так проще набирать (в русском экселе) {1;2;3;4;5;6;7;8;9;0}

Я не набирал, а воспользовался кнопкой F9

 

Максим Зеленский

Пользователь

Сообщений: 4648
Регистрация: 11.06.2014

Microsoft MVP 2018-2022

#7

07.08.2014 12:56:30

Цитата
MCH пишет: а воспользовался кнопкой F9

не понимаю, как  :)  я пользуюсь вот этим

а как использовать F9 для такого же результата? У меня она просто пересчитывает лист, и всё

F1 творит чудеса

 

Владимир

Пользователь

Сообщений: 8196
Регистрация: 21.12.2012

#8

07.08.2014 14:15:30

Цитата
Максим Зеленский пишет:
не понимаю

Наберите =СТРОКА(A1:A9), нажмите F9 и копируйте результат..

“..Сладку ягоду рвали вместе, горьку ягоду я одна.”

 

ikki

Пользователь

Сообщений: 9709
Регистрация: 22.12.2012

Владимир, а я бы не догадался.
чуть дополнил – чтобы ноль вручную не донабирать: =остат(строка(A1:A10);10)

фрилансер Excel, VBA – контакты в профиле
“Совершенствоваться не обязательно. Выживание — дело добровольное.” Э.Деминг

 

MCH

Пользователь

Сообщений: 3883
Регистрация: 22.12.2012

#10

07.08.2014 20:04:54

Цитата
Максим Зеленский пишет: а как использовать F9 для такого же результата?

https://yadi.sk/i/Q9FJdhmXZF35t

Добавить комментарий