Функция / код VBA - преобразование динамического столбца данных в текстовую строку - PullRequest
1 голос
/ 30 мая 2019

Я создаю инструмент, где пользователи могут запрашивать ODBC через Excel.Мне нужна функция, которая будет смотреть на столбец идентификаторов элементов, которые вставил пользователь, а затем создать текстовую строку, которая может быть использована в Sql-части VBA.Количество идентификаторов предметов может варьироваться.

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

'Вот код, который я использовал для существующей функции:

                    Function CreateSQLAndQry(field_input As String, input_string As String) As String
                    cleaned_string = Replace(input_string, " ", "")
                    Dim xArray() As String
                    xArray() = Split(cleaned_string, ",")
                    Dim lenArray As Integer
                    lenArray = UBound(xArray())
                    Dim new_string As String
                    new_string = ""
                    For I = 0 To lenArray
                        xArray(I) = "'" & xArray(I) & "'"
                        new_string = xArray(I) & "," & new_string
                    Next
                    If input_string = "" Then
                    new_string = ""
                    Else: new_string = Left(new_string, Len(new_string) - 1)
                    End If

                    If input_string = "" Then
                    new_qry = ""
                    Else: new_qry = " AND " & field_input & " IN (" & new_string & ") "
                    End If

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

test1 test2

Мне нужно, чтобы вывод выглядел так:

in ('test2', 'test1')

1 Ответ

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

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

enter image description here

Function PullTextTogether(rng As Range) As String
Const xSepx As String = ","
Const preText As String = "in "
Const ignoreText As String = " " ''characters you want stripped out

Dim aCell As Range

For Each aCell In Intersect(rng, rng.Worksheet.UsedRange).Cells

    If aCell.Value2 <> "" Then
    PullTextTogether = PullTextTogether & "'" & xSepx & "'" & aCell.Value2

    'Duplicate this with more text you would want to strip out
    PullTextTogether = Replace(PullTextTogether, ignoreText, "")

    End If

Next aCell

If PullTextTogether <> "" Then
    'cleans up
    PullTextTogether = preText & "('" & Right(PullTextTogether, Len(PullTextTogether) - 3) & "')"
End If

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