0

以下の UDF を使用して参照を連結し、結果を
のような SQL クエリに含めますref in ('ref1', 'ref2', ...)

UDFは通常どおり正常に動作しますが、参照の膨大なリスト
#VALUE
を配置する必要がある場合は、Excel に入り ます

私はすでにこの回答を見ていますが、UDFを機能させることができません...

String関数の型をからVariant(明示的に)に変更しようとしましたが
、何も変わりませんでした...

私も試しConcatSQL2 = A(0)てみConcatSQL2 = Aました出力、
Dim A(0 To 0) As String宣言、...そして再び機能しません...
アイデアが不足しています...

参考までに、結果の文字列の長さは約 220k になると予想されます...
大量のテキストを生成するために、ここで Lorem Ipsum ジェネレーターを使用できます!

Public Function ConcatSQL2(Plage As Range, Optional Doublon As Boolean = True)
Dim A() As String, _
    Cel As Range
ReDim A(0)

A(0) = "('"
For Each Cel In Plage.Cells
    If (Cel.Value <> "" And (InStr(1, A(0), Cel.Value) = 0 Or Doublon)) Then
        A(0) = A(0) & Cel.Value & "', '"
    End If
Next
A(0) = Left(A(0), Len(A(0)) - 3) & ")"

ConcatSQL2 = A(0)
End Function
4

1 に答える 1

2

@Rory のコメントについて:

32767 は、セル内の最大文字数です。

後で再利用するために、出力をテキスト ファイルに書き込むことにしました。

これが最終的な解決策です

Public Function ConcatSQL2(Plage As Range, Optional Doublon As Boolean = True)
Dim A(0 To 0) As String, _
    myFile As String, _
    Cel As Range
'ReDim A(0)

A(0) = "('"
For Each Cel In Plage.Cells
    If (Cel.Value <> "" And (InStr(1, A(0), Cel.Value) = 0 Or Doublon)) Then
        A(0) = A(0) & Cel.Value & "', '"
    End If
Next
A(0) = Left(A(0), Len(A(0)) - 3) & ")"

myFile = "Path\FileName.txt"
Open myFile For Output As #1
Write #1, A(0)
Close #1

ConcatSQL2 = A
End Function
于 2015-12-11T15:20:51.397 に答える