Vba 尝试在Excel中将列合并在一起

Vba 尝试在Excel中将列合并在一起,vba,excel,Vba,Excel,我很感激有很多类似的问题,但我已经搜索了三天的各种论坛,还没有找到任何符合我需要的东西-所以要么我做了一些非常奇怪的事情,要么我的搜索技能不符合要求 如果有人能告诉我哪里出了问题,或者甚至把我和一个解决方案联系起来,我会非常感激,因为我还没有找到一个解决方案 我目前有一个电子表格和六张工作表。工作表2-6包含从不同来源销售的物品的数据。工作表1当前包含四列,它们使用我拼凑成四列的宏填充项目数据。工作表2包含一个“项目列表”列,我想将工作表2中四列中的每一列的数据复制到该列中 我希望这是有道理的。

我很感激有很多类似的问题,但我已经搜索了三天的各种论坛,还没有找到任何符合我需要的东西-所以要么我做了一些非常奇怪的事情,要么我的搜索技能不符合要求

如果有人能告诉我哪里出了问题,或者甚至把我和一个解决方案联系起来,我会非常感激,因为我还没有找到一个解决方案

我目前有一个电子表格和六张工作表。工作表2-6包含从不同来源销售的物品的数据。工作表1当前包含四列,它们使用我拼凑成四列的宏填充项目数据。工作表2包含一个“项目列表”列,我想将工作表2中四列中的每一列的数据复制到该列中

我希望这是有道理的。目前,我掌握的代码如下:

Sub UpdateList()
  'Clear the current ranges
  Range("PharmacyItems").Clear
  Range("PrelabelItems").Clear
  Range("RestockItems").Clear
  Range("TakehomeItems").Clear
  Range("FullItemList").Clear

  'Populate control with unique list
  Range("PharmacyFullList").AdvancedFilter Action:=xlFilterCopy, CopyToRange:=Range("PharmacyItems"), Unique:=True
  Range("PrelabelFullList").AdvancedFilter Action:=xlFilterCopy, CopyToRange:=Range("PrelabelItems"), Unique:=True
  Range("RestockFullList").AdvancedFilter Action:=xlFilterCopy, CopyToRange:=Range("RestockItems"), Unique:=True
  Range("TakehomeFullList").AdvancedFilter Action:=xlFilterCopy, CopyToRange:=Range("TakehomeItems"), Unique:=True

  'Combine the four ranges into one
  Range("UniqueLists!$A:$A, UniqueLists!$B:$B, UniqueLists!$C:$C, UniqueLists!$D:$D").Copy Sheets("Drug totals").Range("A2")
  'Sort the data
  Range("FullItemList").Sort Key1:=Range("FullItemList").Columns(1), Order1:=xlAscending, Orientation:=xlSortColumns, Header:=xlYes, SortMethod:=xlPinYin, DataOption1:=xlSortNormal, DataOption2:=xlSortNormal, DataOption2:=xlSortNormal
End Sub
为了澄清上述内容,这里给出了以下范围的定义:

PharmacyItems、PrelabelItems、RestockItems和TakehomeItems:这些是包含从每个数据工作表复制的唯一项目的单独列表。 完整列表:以上四个列表中的完整列表是源数据列表,不是唯一列表 FullItemList:我希望唯一列表中的所有数据都结束到其中的列

我之所以有一个范围来指定每一列,而不是使用一个命名的范围,是因为我试图看看这是否会使它变得更好,因为最初它只是给了我一个模糊和模糊的范围问题错误。在范围中定义了列后,它会告诉我目标的大小/形状与源不匹配

确切的错误是: 运行时错误“1004”: 无法粘贴信息,因为复制区域和粘贴区域的大小和形状不同。请尝试以下操作之一: -单击单个单元格,然后粘贴 -选择一个大小和形状相同的矩形,然后粘贴

有人能帮我吗?可悲的是,我是一个SQL Server女孩,我宁愿从数据库中提取数据,但我不被允许在这个数据库中

先谢谢你


Summer

不能将整个列粘贴到从第2行(或除第1行以外的任何其他行)开始的范围,因为这样,列的最后一行将不适合工作表。这就是为什么Excel会说“复制区域和粘贴区域的大小不同”

而不是

Range("UniqueLists!$A:$A, UniqueLists!$B:$B, UniqueLists!$C:$C, UniqueLists!$D:$D").Copy Sheets("Drug totals").Range("A2")
尝试从第一行开始粘贴

Range("UniqueLists!A:D").Copy Sheets("Drug totals").Range("A1")
但我猜你没有数据一直到你的“唯一清单”的最底层?如果是这样,那么为什么要复制整个列?只要复制你需要的部分。然后可以从单元格“A2”开始粘贴。例如:

Range("UniqueLists!A1:D1234").Copy Sheets("Drug totals").Range("A2")

不能将整列粘贴到从第2行(或除1以外的任何其他行)开始的范围,因为这样,列的最后一行将不适合工作表。这就是为什么Excel会说“复制区域和粘贴区域的大小不同”

而不是

Range("UniqueLists!$A:$A, UniqueLists!$B:$B, UniqueLists!$C:$C, UniqueLists!$D:$D").Copy Sheets("Drug totals").Range("A2")
尝试从第一行开始粘贴

Range("UniqueLists!A:D").Copy Sheets("Drug totals").Range("A1")
但我猜你没有数据一直到你的“唯一清单”的最底层?如果是这样,那么为什么要复制整个列?只要复制你需要的部分。然后可以从单元格“A2”开始粘贴。例如:

Range("UniqueLists!A1:D1234").Copy Sheets("Drug totals").Range("A2")

如果您不需要单独的唯一列表,但只想创建一列包含所有唯一值的列表,那么这应该适合您(尽管未经测试…)


如果您不需要单独的唯一列表,但只想创建一列包含所有唯一值的列表,那么这应该适合您(尽管未经测试…)


谢谢-我没有设置列的长度的原因是,当我从其他工作表将数据拉入这些列时,列的长度会发生变化。这些药物按月使用,因此长度将根据销售的药物类型而变化。我已经按照你善意的建议修改了代码,但我仍然得到了与我假设的大小/形状完全相同的问题,因为我复制了一个包含四列的范围,并试图将其粘贴到一列中。由于字符数的限制,我无法将完整的修订代码放在这里,但谢谢您的修订,它比我的代码简单得多!不客气。我在发布之前测试了代码。将修改后的代码作为编辑问题的代码,并指出在哪一行出现错误。此外,如果您发现答案有用,请记住通过单击其左侧的复选标记来接受它。谢谢-我没有设置列的长度的原因是,当我从其他工作表将数据拉入这些列时,列的长度会发生变化。这些药物按月使用,因此长度将根据销售的药物类型而变化。我已经按照你善意的建议修改了代码,但我仍然得到了与我假设的大小/形状完全相同的问题,因为我复制了一个包含四列的范围,并试图将其粘贴到一列中。由于字符数的限制,我无法将完整的修订代码放在这里,但谢谢您的修订,它比我的代码简单得多!不客气。我在发布之前测试了代码。将修改后的代码作为编辑问题的代码,并指出在哪一行出现错误。此外,如果您发现答案有用,请记住通过单击其左侧的复选标记来接受它。要澄清-您希望将四个“唯一”组合在一起通过将它们复制到单个列中来列出?您需要四个唯一的列表还是可以将值直接从xxxFullList复制到DrugTotals表?我需要四个唯一的列表,因为它们用于其他事情。您添加的给出未测试代码的帖子非常棒,谢谢!为了澄清-您想通过将四个“唯一”列表复制到一列中来组合它们?您需要四个唯一列表还是可以将值直接从xxxFullList复制到DrugTotals表?我需要这四个唯一列表,因为它们用于其他用途。你添加的帖子未经测试