从 ColumnA 中的多行在 CELL B1 中创建字符串

Create string in CELL B1 from multiple rows in ColumnA

我在工作表中有一列:

ColumnA
wer
rfvg
swe
dfe

我想创建一个字符串 'wer','rfvg','swe','dfe' 用于 TSQL 查询

SELECT value
FROM table 
WHERE code IN ('wer','rfvg','swe','dfe')

我现在做什么:

1. put CONCATENATE("'";A1;"',") in B1
2. drag it all the way down
3. copy+ paste the generated values in ColumnB into my query

我得到的是这样的:

SELECT value
FROM table 
WHERE code IN ('wer',
'rfvg',
'swe',
'dfe')

因为这些最后可以包含多达 100 个代码,这真的很烦人。 我想在单元格 B1 中创建一个连续的字符串。

有办法吗? 感谢和我一起思考

这个怎么样:

  • 放入C1=CONCATENATE("'",A1,"'")
  • 放入D1 =CONCATENATE(B1,",'",INDIRECT("A" & COLUMN()-2),"'")
    • COLUMN returns 列的数字:A 是 1,B 是 2,等等
    • INDIRECT 采用字符串条目和 returns 单元格地址的内容,在本例中为 A 列、行 [根据列号计算] 中单元格的内容。所以 D (4) 列查看第 2 (4 - 2) 行,E (5) 列查看第 3 (5 - 2) 行,等等
  • 将 D1 复制并粘贴到任意多列(100 列将粘贴到 CX 列)
  • 放入其他一些单元格,为了这个 post,我们会说 B3,=COUNTA(A1:A100) 以显示您在 A 列中有多少条目
  • 在 B1(你想要最终字符串的单元格)中放置公式 =INDIRECT(ADDRESS(1,B3+2)) - 当然将 B3 替换为你实际放置 COUNTA 公式的地方
    • ADDRESS 采用(行号,列号)- 这里是 [第 1 行,列(无论 A + 2 列中有多少条目)] 和 returns 一个 LetterNumber 单元格地址

这是一个执行此操作的宏:

Sub BuildListForQuery
    Dim oCells As Object, aCell As Object, oDoc As Object
    Dim iColumnA As Integer, sList As String
    oDoc = ThisComponent
    iColumnA = 0
    oColumn = oDoc.Sheets(0).Columns(iColumnA)
    oRanges = oDoc.createInstance("com.sun.star.sheet.SheetCellRanges")
    oRanges.insertByName("", oColumn)
    oCells = oRanges.Cells.createEnumeration
    If Not oCells.hasMoreElements Then Print "Sorry, no text to display"
    While oCells.hasMoreElements
        aCell = oCells.nextElement
        If sList = "" Then
            sList = "'" + aCell.String + "'"
        Else
            sList = sList + ",'" + aCell.String + "'"
        End If
    Wend
    aCell = oDoc.Sheets(0).getCellRangeByName("B1")
    aCell.setString(sList)
End Sub

B1 中的结果是 'wer','rfvg','swe','dfe'