热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

为什么用VBAfor循环无法获得完整结果

在上述的excel文件中,我希望将第一列中的每个单词(共12个)和第二列中的每个单词(共4个)组合为第三列中生成的短语。我应该得到12 * 4 = 48个短语。使用我如下编写的代码,只有不到30个

为什么用VBA for循环无法获得完整结果

在上述的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 AColumn 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

该查询将创建两列的笛卡尔乘积-


推荐阅读
author-avatar
xaony23625
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有