我不知道如何更好地描述我的问题。所以这是一个例子: 我在一个电子表格中有两个标签:“A”和“B”。工作表A包含一个项目列表,只有一列但行数可能会更改。
然后表B有23行数据。好吧,在这个例子中,我并没有真正写完所有23行。
我希望将A和B结合起来让A中的每个项目在B中有23行属性。看起来像这样:
如何使用宏来完成此操作,因为工作表A可以有1k +行?
答案 0 :(得分:4)
这将完全按照您的意愿完成:
.active
注意:这会将结果放在工作表“A”的C和D列中。您可以通过在最后一行的方括号内进行编辑来更改输出的位置。
答案 1 :(得分:1)
没有VBA就很容易了。在A2的第三张表中,并将其复制到适合:
=OFFSET(A!A$2,INT((ROW()-1)/23),)
然后将A2 {A B
的A24复制到第三张纸的B2:B24中,然后双击填充句柄。
答案 2 :(得分:0)
这是另一种方法 - 这次使用ADO创建输出。这将在SQL中创建笛卡尔积或交叉连接。这样做的结果是产生每个工作表中使用一行的每种可能的组合。
如果工作簿保存为.xlsm文件,则此方法有效。如果您使用的是旧版.xls格式,请注释掉Excel 2007以后的连接字符串并删除Excel 97-2003连接字符串周围的注释
{{1}}
答案 3 :(得分:-1)
使用VBA解决方案就像:
Sub adding()
Dim Arr1 As Variant, Arr2 As Variant
Dim runner1 As Variant, runner2 As Variant
Dim i As Long
Arr1 = Sheets(1).Range("A1:A25").Value
Arr2 = Sheets(2).Range("A1:A25").Value
i = 1
For Each runner1 In Arr1
For Each runner2 In Arr2
Sheets(3).Cells(i, 1).Value = runner1
Sheets(3).Cells(i, 2).Value = runner2
i = i + 1
Next
Next
End Sub
它的作用:
i
以插入下一行中的下一个值您仍然需要根据需要更改代码
编辑:
正如它在评论中写的那样,这不是最好的方式,而是最容易解决的(在我看来)。您可能需要/需要做的所有更改:
Sheets(1)
是包含第一项的工作表(您可以将其更改为Sheets("A")
或您想要/需要的任何内容Sheets(2)
是带有第二项的工作表(您可以将其更改为工作表(“B”)或任何您想要/需要的Sheets(3)
是打印长列表的表格(您可以将其更改为表格(“C”)或任何您想要/需要的i
用于写入的行,开头为i = 1
,第一行为 start 四个输出(您可以将其更改为{{ 1}}从第二行开始,或将其更改为您想要/需要的其他数字i = 2
Range("A1:A25")
和Arr1
设置从中获取数据的范围(您可以将其更改为Arr2
或任何您想要/需要的内容。需要是相同的)
Range("A2:A24")
中x
Cells(i, x)
(代码中为{1}}为x
,而runner1
告诉您列表项目的哪一列将打印(如果您需要/需要将其更改为其他数字)runner2
,Arr3
,...和Arr4
,runner3
,...添加到代码中,然后包括runner4
,For Each runner3 In Arr3
,...(不要忘记每个For Each runner4 In Arr4
都有一个Next
,每个For
都有一个输出 修改强>
没有VBA的即兴解决方案:
(我缩短了代码以便更好地理解)
单元格runner
:
A2
此代码重复=INDEX(Sheet1!A:A,ROUNDUP((ROW()-1)/$C$1,0)+1)
x次(1,1,1,2,2,2,3,3,3 ......)中的每一项,而x是Sheet1
的值。
C1
表示您不用于输出的行。从第二行开始,离开1(-1
),而从第15行开始将留下14(-1
)
-14
表示要在源位置跳过的行(从第二行开始的源代码为+1
,从第9行开始为+1
)
单元格+8
:
B2
此代码无休止地重复整个第二个列表(1,2,3,1,2,3,1,2,3 ......)(仅适用于您放入该公式的范围)
=INDEX(Sheet2!A:A,MOD(ROW()-2,$C$1)+2)
和-2
与第一个公式中的相同。然而,每个增加1(或减少负数部分)。对于负面部分,从输出的第4行开始也是+2
,并且从第6行开始,从第{6}行开始,为正面部分提供-4
。
单元格+6
:
C1
这段代码只是搜索=MAX(IF(ISNUMBER(MATCH({"",-1E+307},Sheet2!A:A,-1)),MATCH({"",-1E+307},Sheet2!A:A,-1)))-1
中的最后一个非空的单元格并给你一行,但是从第二行开始(第一行只是一个标题),最后是-1在列表中提供大量项目。但是,在列表下方填充单元格也会计算它们(包括其间的所有空单元格),因此您可以将其更改为Sheet2!A:A
。 (从第一项开始时,您需要删除最后的Sheet2!$A$2:$A$50
。)
如果您不想为此添加额外的单元格,只需使用此代码替换-1
(不使用$C$1
,也可以将其放在大括号=
中以获取()
中的代码{1}}如果最后有A2
,或者根本无法正常工作)
您还需要根据需要更改工作表名称(-1
,Sheet1
,Sheet2
)和单元格范围
然后简单地自动填充直到A列仅显示“0”(B列将无限循环)
非常动态的cus每次更改都会放在你的输出中。 (也可能是这个的缺点)对于很长的列表,最好将它与额外的单元Sheet3
(或你想要的任何单元格)一起使用,而不是在前两个中包含第三个代码。
玩得开心:)