Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 如何添加每个项目23属性_Vba_Excel - Fatal编程技术网

Vba 如何添加每个项目23属性

Vba 如何添加每个项目23属性,vba,excel,Vba,Excel,我不知道如何更好地描述我的问题。下面是一个例子: 我在一个电子表格中有两个选项卡:“A”和“B”。工作表A有一个项目列表,只有一列,但行数可能会更改 然后表B有23行数据。在这个例子中,我并没有把23行都写下来 我想把A和B结合起来,使A中的每一项在B中都有23行属性。如下所示: 由于工作表a可以有1k+行,如何使用宏执行此操作?对于VBA,解决方案如下: Sub adding() Dim Arr1 As Variant, Arr2 As Variant Dim runner1 A

我不知道如何更好地描述我的问题。下面是一个例子: 我在一个电子表格中有两个选项卡:“A”和“B”。工作表A有一个项目列表,只有一列,但行数可能会更改

然后表B有23行数据。在这个例子中,我并没有把23行都写下来

我想把A和B结合起来,使A中的每一项在B中都有23行属性。如下所示:


由于工作表a可以有1k+行,如何使用宏执行此操作?

对于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)
    是打印长列表的表单(您可以将其更改为Sheets(“C”)或您想要/需要的任何内容)
  • i
    用于写入行,在开始处设置
    i=1
    以将第一行作为输出的开始四(您可以将其更改为
    i=2
    以从第二行开始,或者将其更改为您想要/需要的另一个数字)
  • Range(“A1:A25”)
    for
    Arr1
    Arr2
    设置从中获取数据的范围(您可以将其更改为
    Range(“A2:A24”)
    或任何您想要/需要的。它们也不需要相同)
  • runner1
    runner2
    x
    单元格(i,x)(
    x
    是代码中的1和2)告诉您列表中的项目将在哪一列打印(如果您想/需要,请将其更改为不同的数字)
  • 有3个或更多列表,您只需将
    Arr3
    Arr4
    ,…和
    runner3
    runner4
    ,…添加到代码中,然后为Arr3中的每个runner3,
    为Arr4中的每个runner4添加
    。。。(不要忘了为每个
    设置一个
    下一个
    ,并为每个
    运行程序设置一个输出
编辑:
只是为了好玩,没有VBA的解决方案:
(为了更好地理解,我缩短了代码)

第3页中的单元格
A2

=INDEX(Sheet1!A:A,ROUNDUP((ROW()-1)/$C$1,0)+1)
=INDEX(Sheet2!A:A,MOD(ROW()-2,$C$1)+2)
=MAX(IF(ISNUMBER(MATCH({"",-1E+307},Sheet2!A:A,-1)),MATCH({"",-1E+307},Sheet2!A:A,-1)))-1
此代码将
Sheet1
中的每个项目重复x次(1,1,1,2,2,3,3,…),而x是
C1
的值
-1
表示您不用于输出的行。从第二行开始,将漏掉1(
-1
),而从第15行开始,将漏掉14(
-14

+1
表示要在源代码处跳过的行(将源代码从第二行开始将导致
+1
,从第九行开始将是
+8

第3页中的单元格B2

=INDEX(Sheet1!A:A,ROUNDUP((ROW()-1)/$C$1,0)+1)
=INDEX(Sheet2!A:A,MOD(ROW()-2,$C$1)+2)
=MAX(IF(ISNUMBER(MATCH({"",-1E+307},Sheet2!A:A,-1)),MATCH({"",-1E+307},Sheet2!A:A,-1)))-1
此代码无休止地重复整个第二个列表(1,2,3,1,2,3,1,2,3,…)(仅针对您输入公式的范围)
-2
+2
与第一个公式中的相同。但是,每一个都增加了1(或减少了负数部分)。从第四行开始输出的负数部分也是
-4
,从第六行开始的源代码为正数部分提供
+6

第3页中的单元格
C1

=INDEX(Sheet1!A:A,ROUNDUP((ROW()-1)/$C$1,0)+1)
=INDEX(Sheet2!A:A,MOD(ROW()-2,$C$1)+2)
=MAX(IF(ISNUMBER(MATCH({"",-1E+307},Sheet2!A:A,-1)),MATCH({"",-1E+307},Sheet2!A:A,-1)))-1
此代码只搜索
Sheet2!A:A
中的最后一个单元格,该单元格不是空的,而是从第二行开始(第1行只是一个标题),最后是-1,表示列表中的项目数量。但是,填充列表下方的单元格也会对其进行计数(包括介于之间的所有空单元格)因此,您可以将其更改为
Sheet2!$A$2:$A$50
(从第一项开始时,您需要删除结尾处的
-1

如果您不想为此增加一个额外的单元格,只需用此代码替换
$C$1
(没有
=
,如果末尾有
-1
,或者无法正常工作,也可以将其放在
A2
中代码的大括号中
()

您还需要根据需要更改工作表名称(
Sheet1
Sheet2
Sheet3
)和单元格范围

然后简单地自动填充,直到A列只显示“0”(B列将无休止地循环)
是非常动态的,因为每次更改都会放在输出中。(这也可能有缺点)对于很长的列表,最好将其与额外的单元格
C1
(或任何您想要的单元格)一起使用,并且在前两个单元格中不包括第三个代码


玩得开心:)

使用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
        ,在下一行中插入下一个值
您仍然需要将代码更改为您想要的样子。
编辑:
正如评论中所写的,这不是最好的方法,但最容易反驳(在我看来)