如果没有开始乱用额外的列等,是否有更好的方法来连接两列中的字符串,而不是使用双重for-loop,如下面的代码所示?
Sub test(endra_celle As Range)
Dim plass_i_årsakslister, c1 As Range, c2 As Range
Dim i As Long, endra_rad As Long
Dim ovnsnummer() As String
endra_rad = endra_celle.Row
Set plass_i_årsakslister = Range(Årsakslister.Range("C1"), _
Årsakslister.Range("XFD1").End(xlToLeft)).Find(What:= _
registrering.Range("C" & endra_rad).Value, _
LookIn:=xlValues, LookAt:=xlWhole, MatchCase:=False)
If Not plass_i_årsakslister Is Nothing Then
With plass_i_årsakslister
i = 0
For Each c1 In Range(.Offset(2, 1), .Offset(1048575, 1).End(xlUp))
For Each c2 In Range(.Offset(2, 3), .Offset(1048575, 3).End(xlUp))
ReDim Preserve ovnsnummer(i)
ovnsnummer(i) = CStr(c1) & CStr(c2)
i = i + 1
Next
Next
End With
End If
End Sub
详细说明;第一列中的每个单元格应与第二列中的每个单元格组合,并且所有组合应存储在数组(或其他集合)中。
答案 0 :(得分:0)
像这样:
Dim a
a = WorksheetFunction.Transpose(Evaluate("A1:A9&B1:B9"))
只需将A1:A9
和B1:B9
替换为您的列范围。
这是有效的,因为Evaluate()
正确地将其检测为数组公式并依次对每个单元格进行操作。但是,默认情况下,它将返回一个二维数组(列始终等于1)。 Transpose()
交换行和列,以便行始终为1,因此Excel可以返回1D数组。
答案 1 :(得分:0)
可能有另一种方法,测试它是否适用于行数......
在SQL语句中,用&替换2列之间的彗差。 (连接col1和col2的值)并添加WHERE条件,如之后的示例代码中所示。您可能需要根据命名列和范围的方式进行调整。
SELECT FirstCol.Col1 & SecondCol.Col2
FROM `C:\temp\Book1.xlsx`.FirstCol FirstCol,
`C:\temp\Book1.xlsx`.SecondCol SecondCol
WHERE (FirstCol.Col1>'') AND (SecondCol.Col2>'')
通过在没有正确连接条件的情况下进行表的连接,您将执行SQL中已知的"笛卡尔积"该表的含义,意味着第一个表的每一行将与第二个表的每一行组合。如果你在FirstCol中有50行而在secondCol中有10行,你将在结果中完成500行......
当然,如果您有机会使用正确的数据库引擎,它可能会好得多,例如使用您在ORACLE DB中作为外部表加载的.csv文件 但是,这对我有用,但需要使用您的数据集进行测试,因为如果您有大量行,响应时间可能非常糟糕......
希望有所帮助