VBA / Excel - сопоставление значений столбца с предопределенными наборами - PullRequest
0 голосов
/ 10 ноября 2019

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

enter image description here

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

Мне нужно сравнить их независимо от последовательности. После сопоставления я хочу получить соответствующее значение из библиотеки и продолжить работу с регистром в моем файле.

Есть идеи, как реализовать его в VBA?

1 Ответ

1 голос
/ 10 ноября 2019

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

Если есть какой-либо символ, который никогда не будет в значениях, вы можете разделитьзначения с этим символом (например, _):

Function GetUniqueValuesString(rng As Range) As String
    Dim rngValues() As Variant
    rngValues = rng.Value

    ' The following line requires a reference to Microsoft Scripting Runtime
    ' (via Tools -> References...)
    Dim dict As New Scripting.Dictionary

    'The function only parses the first row of the range
    Dim i As Integer
    For i = 1 To UBound(rngValues, 2)
        dict(rngValues(1, i)) = 1 ' 1 here is a dummy value
    Next

    GetUniqueValuesString = Join(dict.Keys, "_")
End Function

(Если каждое значение всегда одинаковое количество символов, вы можете просто объединить их без разделителя.)

Использование этой функции для горизонтального диапазона ячеек:

=GetUniqeValuesString(A4:D4)

должен возвращать строку только с уникальными значениями:

BGAA_TGHJ_WETY

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


Обратите внимание, что функция имеет несколько ограничений, которые, возможно, должны быть разрешены:

  • Предполагается, чтопорядок значений будет одинаковым. Другими словами, BGAA, TGHJ, WETY будет преобразован в строку, отличную от BGAA, WETY, TGHJ.
  • Функция присоединяется только к первой строке;другие строки игнорируются.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...