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

Я создаю инструмент, с помощью которого пользователи могут запрашивать 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

Если бы столбец данных выглядел так:

тест1 тест2

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

в ('тест2', 'тест1')

ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
1
0
94
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

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

Это сработало отлично и дало результат "в ('Test1','Test2','Test3','Test4','Test5','Test6','Test7','Te‌​st8','Test9',' Test10‌​’, ‘Test11’, ‘Test12’,‌​’Test13’, ‘Test14’, ‘T‌​est15’, ‘Test16’)» из выбранного столбца. Спасибо за помощь!

m00n_land37 31.05.2019 10:27

Другие вопросы по теме