从 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'
。
我在工作表中有一列:
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'
。