Извлечь число из сложной строки, если оно попадает в заданный диапазон

мне нужна формула Excel (или макрос VBA), которая позволит мне извлечь значение
из строки. Строка представляет собой последовательность слов, разделенных пробелами в одну ячейку. Я хочу, чтобы слово (представляющее размер велосипеда) было либо

  • число (предположительно целое, но это не указано) между 47 и 60
    (или какой-то другой диапазон, возможно, будет указан динамически), или
  • одна из строк "sm", "med"или " lg".

Я ожидаю, что в строке будет ровно одно уточняющее слово,
поэтому любой разумный ответ обработки ошибок на

  • нет уточняющих слов, или
  • несколько отборочных слова

будет приемлемой.
Размер может быть в различных позициях строки. Примеры:

Cervelo P2 105 5800 56 '15                        the number 56 is the desired result
Cervelo P2 105 54 6000 '15                        the number 54 is the desired result
Cervelo P3 105 5800 60 '15                        the number 60 is the desired result
Cervelo P2 105 5800 sm '15                        the string sm is the desired result

меня интересуют только целые слова,
так, 58 (подстрока "5800") не имеет.

прямо сейчас я снимаю '15 и затем извлекаем последний две цифры. Но этот подход работает только в том случае, если размер велосипеда является предпоследним значением. Однако, как показано выше, бывают случаи, когда размер находится в других позициях строки.

Как я могу сделать это с формулой или макросом VBA в Excel?

3
задан Scott
31.03.2023 16:26 Количество просмотров материала 2425
Распечатать страницу

1 ответ

Я сделал решение с помощью VBA:

Public Function BikeSize(MinSize As Integer, MaxSize As Integer, datainput As String)
    Dim dataoutput() As Variant
    ReDim dataoutput(0)
    BikeSize = 0
    datasplitted = Split(datainput, " ")
    arraysize = UBound(datasplitted)
    j = 1
    For i = 0 To arraysize
        m = datasplitted(i)
        If m >= MinSize And m <= MaxSize Then
            ReDim Preserve dataoutput(j)
            dataoutput(j) = m
            j = j + 1
        End If
        If m = "sm" Or m = "med" Or m = "lg" Then
            ReDim Preserve dataoutput(j)
            dataoutput(j) = m
            j = j + 1
        End If
    Next i
    totalresults = UBound(dataoutput)
    Select Case totalresults
        Case 0
            BikeSize = 0
        Case 1
            BikeSize = dataoutput(totalresults)
        Case Else
            For i = 1 To totalresults
                wrongresult = wrongresult & dataoutput(i) & " - "
            Next i
            BikeSize = wrongresult
    End Select
End Function

вы должны открыть макросы / Visual Basic перейдите в Modules _> Add Module и вставьте код на правой стороне (также см. как добавить VBA в MS Office?).

тогда, если ваша строка находится на ячейке A1, ваше минимальное значение на C1, ваше максимальное значение на D1 затем на B1 вы просто поставить =BikeSize(C1,D1,A1) получить результат.

если строка не соответствует номер выводит ноль 0.

если строка имеет более одного совпадающего номера, она выводит все совпадения через дефис.

Он также признает sm,med и lg.

5
отвечен jcbermu 2023-04-02 00:14

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх