Способ извлечь граф из описания - PullRequest
1 голос
/ 17 мая 2019

Мне постоянно поручено извлекать информацию из другого источника и получать информацию без обозначения размера. Размер или количество указаны в описании, и вы хотите написать формулу Excel со следующей логикой:

если ячейка содержит капсулы, таблетки, жидкость и т. Д., То сделайте эту ячейку равной тоже капсуле, таблеткам, жидкости и т. Д. + Число, которое стоит перед ней

Несколько примеров элементов:

Nature's Bounty Magnesium 500 mg, 200 Tablets    
Aerobic Life Mag 07 Oxygen Digestive System Cleanser Capsules, 180 Count    
Natural Vitality Natural Calm Anti Stress Drink 30 count Raspberry Lemon

Хотите, чтобы в следующем столбце были Таблетки или Количество, если это указано в описании.

Я пытался использовать операторы if и then, но не знаю, как их объединить для создания 'or' и 'и'

Ожидается, что столбцы из приведенных выше примеров будут выглядеть следующим образом:

200 Tablets
180 Count
30 Count

Ответы [ 3 ]

1 голос
/ 17 мая 2019

Если значения находятся в столбце A, формула будет выглядеть следующим образом:

=+IF(ISERROR(VALUE(RIGHT(LEFT(A3,SEARCH(IF(ISERROR(SEARCH("Tablets",A3)),IF(ISERROR(SEARCH("Capsules",A3)),IF(ISERROR(SEARCH("Count",A3)),"","Count"),"Capsules"),"Tablets"),$A3)-1),4))),0,VALUE(RIGHT(LEFT(A3,SEARCH(IF(ISERROR(SEARCH("Tablets",A3)),IF(ISERROR(SEARCH("Capsules",A3)),IF(ISERROR(SEARCH("Count",A3)),"","Count"),"Capsules"),"Tablets"),$A3)-1),4)))&" "&IF(ISERROR(SEARCH("Tablets",A3)),IF(ISERROR(SEARCH("Capsules",A3)),IF(ISERROR(SEARCH("Count",A3)),"","Count"),"Capsules"),"Tablets")

Поскольку формула длинна, см. Ниже, разделенную на две разные ячейки, первый поиск, который является элементом мыищет (Таблетки, Капсулы или Количество) и возвращает его, второй ищет предыдущее число:

+IF(ISERROR(SEARCH("Tablets",A4)),IF(ISERROR(SEARCH("Capsules",A4)),IF(ISERROR(SEARCH("Count",A4)),"","Count"),"Capsules"),"Tablets")

+IF(ISERROR(VALUE(RIGHT(LEFT(A4,SEARCH(B4,$A4)-1),4))),0,VALUE(RIGHT(LEFT(A4,SEARCH(B4,$A4)-1),4)))

Формула имеет ограничение относительно числа получаемых, и оно ограничено 9999, больше, чемформула соединяет результат.Также для чисел от 1 до 9 формула может возвращать ошибку # значение.Это может быть решено путем изменения второй формулы, если это необходимо.

0 голосов
/ 18 мая 2019

Вот слегка протестированный UDF с использованием RegExp:

Function Amounts(txt)
    Dim re As Object, allMatches, m, rv, sep

    Set re = CreateObject("VBScript.RegExp")
    re.Pattern = "(\d+\s?(tablets|tablet|count|liquid))"
    re.ignorecase = True
    re.MultiLine = True
    re.Global = True

    Set allMatches = re.Execute(txt)
    For Each m In allMatches
        rv = rv & sep & m
        sep = ","
    Next m
    Amounts = IIf(rv <> "", rv, "(none)")
End Function

Использование:

=Amounts(A2)

enter image description here

0 голосов
/ 18 мая 2019

Я бы сделал что-то вроде этого:

  • Начните с оператора IF IF(-test-, -true-, -false-)
  • Заполните часть -test. Скажем, я сначала хотел найти «планшет». Я мог бы использовать ...FIND("Tablet",A2)... Однако проблема здесь в том, что если «Tablet» не найден, он выдаст ошибку, поэтому я бы исправил ошибку, например, такую: ...IFERROR(Find("Tablet",A2), FALSE)..., которая вернет FALSE, если «Tablet» не найден в ячейке A2 .
  • Но я также хочу поискать «Счет», чтобы я мог использовать ИЛИ вместе с тем, что я уже построил ...OR( IFERROR(Find("Tablet",A2), FALSE), IFERROR(Find("Count",A2), FALSE) ), так что это ИЛИ объединит результаты - если найдены «Таблетка» или «Счет», это функция возвращает число (и так как это число, оно читается как ИСТИНА!)
  • Теперь я добавляю это уравнение ИЛИ () в свой ЕСЛИ для -true-, тогда, конечно, я могу сделать это как «Таблетка» или «Счет» или поместить новое уравнение, чтобы конкретно сказать, что оно нашло. И мой ложный я могу сделать ""

В этот момент у меня будет полное уравнение, которое проверит «Счет» или «Таблетку» и выплюнет все, что есть в моем уравнении-истинности. В противном случае ячейка останется пустой: IF(OR( IFERROR(Find("Tablet",A2), FALSE), IFERROR(Find("Count",A2), FALSE) ), "Count/Tablet", "")

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...