I’m creating a tool where users can query an ODBC through excel. I need a function which will look at a column of item id’s which the user has pasted in and then create a text string which can be used in the Sql part of the VBA. The number of item Id’s can vary.
Using a similar function (not created by myself), I can reference one cell and insert the ‘ and , where needed but I can’t seem to get this to work for multiple cells in one column.
‘Here is the code I have used for the existing function:
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
If the column of data was to look like this:
test1 test2
I need the output to look like this:
in (‘test2’, ‘test1’)
Advertisement
Answer
The formula you have is incomplete, it doesn’t show the ending, but here’s a function that loops through any amount of cells and constructs a string that looks similar to what you’re looking for. You can change the prefix in the constants at the top of the formula or tinker with it to get whatever manipulations you want done.
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