Получить очень конкретные значения из строки в VBA Excel - PullRequest
0 голосов
/ 14 ноября 2018

Торговое программное обеспечение под названием Rotman Interactive Trader выдвигает в Excel некоторые «новости» о поставках сырой нефти, которые в той или иной степени соответствуют следующему формату:

НЕДЕЛЯ 3 CL АКТУАЛЬНО СОЗДАТЬ 12 МЛБ BBLSПРОГНОЗ СТРОИТ 4 МЛН БАРЛСА

Я бы хотел взять 12 и 4 и вычесть их (12-4 = 8).Тем не менее, также возможно, что новости будут:

НЕДЕЛЯ, 3 КЛ. ФАКТИЧЕСКОГО СТРОИТЕЛЬСТВА, 12 МЛБ BBLS VS ПРОГНОЗ РИСУНОК 4 МЛН. BBLS

В этом примере мой расчет будет (12 + 4 = 16).Также возможно, чтобы первый 'BUILD' был 'DRAW'

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

[0][0] = BUILD
[0][1] = 14
[1][0] = BUILD
[1][1] = 4

К сожалению, я не владею VBA Excel и хотел бы получить помощь или идеи о том, как этого добиться.Вся помощь приветствуется.Спасибо!

1 Ответ

0 голосов
/ 15 ноября 2018

Regex - самый простой вариант, я думаю.Пожалуйста, взгляните на приведенный ниже код, его можно адаптировать как пользовательскую функцию:

Sub SimpleRegex()

    Dim RegEx As Object, str As String
    Dim objMatch As Object
    Dim i As Integer
    Dim result As String
    Set RegEx = CreateObject("VBScript.RegExp")

    str = "WEEK 3 CL ACTUAL BUILD 12 MLB BBLS VS FORECAST DRAW 4 MLN BBLS"

    With RegEx
      .Global = True
      .Pattern = "\b(BUILD|DRAW) ([0-9]*)\b"
    End With

    Set objMatch = RegEx.Execute(str)

    Debug.Print objMatch.Item(0)
    Debug.Print objMatch.Item(1)

End Sub

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

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