加在一起 ​​- vba

时间:2009-04-19 17:14:25

标签: excel-vba vba excel

如果可能的话,我希望通过代码执行以下操作...

B列有10种不同的内容变体,总长度为10个字符,从单元格B2开始。

我想将B列中10种不同的内容变体放入C列开头的第1行标题中。

接下来我希望宏从A2开始查看A列中的内容。然后我想使用B2中的内容来区分A2中的内容属于哪个头,(分别在同一行)。现在,我不想将A2的实际内容放在标题下,而是将数字1放入。

现在我想为A列中的每一行继续这种模式:B。

当出现重复时,我想删除副本出现的行,并将原始出现次数增加1.

我意识到我可以使用数据透视表,但我想尝试使用宏。

3 个答案:

答案 0 :(得分:0)

你知道如何使用循环吗?我的猜测是肯定的,因为你在编程网站上。

我记得当我做一些VBA工作时看到大多数使用Range(a:b)的Excel VBA教程,这对于循环来说并不优雅。

您可以使用单元格(x,y)访问单个单元格,这样可以指定x和y坐标,因此A1变为1:1,A10变为10:1等。

这应该可以帮助您入门。从那里你需要逻辑思考和google你不知道的东西。进行谷歌搜索“Excel VBA范围重复”,这将为您提供查找范围内重复项的建议。

您要求的大多数内容需要简单的逻辑或一些谷歌搜索。如果您遇到特定问题,请尝试自己动手,然后发布这些特定问题。

答案 1 :(得分:0)

第一部分很简单,下面的代码应该完成您的工作,只需将其放入标准代码模块:

Private Sub transposeHeadings()

    '//Use built-in filter function to get all unique entries from column B and paste to C1
    Range("B:B").AdvancedFilter Action:=xlFilterCopy, CopyToRange:=Range("C1"),unique:=True

    '//Copy this filtered list
    Range("C2:C11").Copy

    '//Paste into row 1, using transpose to change the rows into columns
    Range("C1").PasteSpecial Paste:=xlPasteAll, Transpose:=True

    '//Delete the temporary filtered list
    Range("C2:C11").ClearContents

    '//Remove the copy bounding box
    Application.CutCopyMode = False
End Sub

请注意,这使用了硬编码范围,您可以使用命名/ dynamic ranges来使其更加健壮。

但是我担心你的问题的第二部分有太多的未知因素试图提供一些有用的代码,我甚至不确定我是否理解你想要做什么。

正如阿库尔建议的那样,自己做一个抨击,然后回来处理你正在努力解决的任何细节。

答案 2 :(得分:0)

我想我明白了。

如果数据看起来像这样

BRAND   ITEM
Bic     Eraser
Bic     Pencil
Bic     Pencil
Pentel  Marker
Sharpie Marker
Sharpie Marker

最终结果应如下所示?

BRAND   ITEM    Marker  Eraser  Pencil
Bic     Eraser          1
Bic     Pencil                  2
Pentel  Marker  1
Sharpie Marker  2

如果是这样,那么我建议你按“Brand”(key1)和“Item”(key2)排序。这样,重复项将彼此相邻。如果您将“Brand”和“Item”组合在一起然后使用该键进行排序,比较和计数,则可能会更容易。

我通常喜欢在最后一行开始,因为我可能要删除行。这样,我可以使用一个很好的for循环。咦?试试吧。