作者:xaony23625 | 来源:互联网 | 2023-09-11 13:35
在上述的excel文件中,我希望将第一列中的每个单词(共12个)和第二列中的每个单词(共4个)组合为第三列中生成的短语。我应该得到12 * 4 = 48个短语。使用我如下编写的代码,只有不到30个
在上述的excel文件中,我希望将第一列中的每个单词(共12个)和第二列中的每个单词(共4个)组合为第三列中生成的短语。我应该得到12 * 4 = 48个短语。使用我如下编写的代码,只有不到30个带有空值单元格的代码。请告诉我为什么我无法达到48岁。谢谢。
Sub WordsCombiner()
For i = 1 To 12
For m = 1 To 4
Cells(i * m,3).Value = Cells(i,1).Value + Cells(m,2).Value
Next
Next
End Sub
以下是原始单词:
(第一列)
from
the
on
this
Oh
and
FYI
prices
accurate
and
items
in
第二列
as
time
of
publication
尝试以下方法:
Sub WordsCombiner()
Dim i As Long
For i = 1 To 12
Dim j As Long
For j = 1 To 4
Dim k As Long
k = k + 1
Cells(k,3).Value = Cells(i,1).Value & " " & Cells(j,2).Value
Next
Next
End Sub
,
这是动态的,因此它将针对Column A
和Column B
中的每个值运行。正如您在输出中所显示的那样,它还会对分组之间的间隔进行广告。
lra =最后一行a
lrb =最后一行b
i = c列的计数器
Sub Combine()
Dim ws As Worksheet: Set ws = ThisWorkbook.Sheets("Sheet1")
Dim lra As Long,lrb As Long,a As Long,b As Long
Dim i As Long: i = 1
lra = ws.Range("A" & ws.Rows.Count).End(xlUp).Row
lrb = ws.Range("B" & ws.Rows.Count).End(xlUp).Row
For b = 1 To lrb
For a = 1 To lra
ws.Range("C" & i) = ws.Range("A" & a) & Chr(32) & ws.Range("B" & b)
i = i + 1 '<--Next Row on Column C
Next a
i = i + 1 '<--Add Space Between Groupings
Next b
End Sub
,
分配结果行的逻辑是错误的。当您拥有i * m
时,因为1 * 2和2 * 1都等于2,所以对于“ from time”和“ as”都可以得到该值。要么使用单独的计数器变量,要么更改表达式。弄清这一点的最佳方法是定义三组值及其应为的行,并找到合适的行。
,
对于该任务,我希望使用SQL。
Select
t1.Col1,t2.col2,t1.col1 & " " & t2.col2
FROM
(Select col1 From [Sheet1$] WHERE col1 Is Not Null) as t1,(Select col2 From [Sheet1$] WHERE col2 Is Not Null) as t2
该查询将创建两列的笛卡尔乘积-