1

我正在尝试制作一个将通过电子表格的宏,并根据 2 行的名字和姓氏相同,将种族列的内容添加到第一行。

例如。

FirstN|LastN |Ethnicity                                       |ID      |

Sally |Smith |Caucasian                                       |55555   |
Sally |Smith |Native American                                 |        |
Sally |Smith |Black/African American                          |        | 

(宏运行后)

Sally |Smith |Caucasian/Native American/Black/African American|55555   |

关于如何做到这一点的任何建议?我阅读了几种不同的 VBA 方法,但对创建此宏的方法感到困惑。

编辑可能需要组合超过 2 行,并且需要以某种方式删除或删除较低的行。

4

2 回答 2

2

如果您可以使用公式,那么您可以执行以下操作:

我正在做的几个假设:

  • Sally 在单元格中A2(第 1 行有标题)。
  • 没有人拥有超过 2 个种族。

现在,对于步骤:

  1. 放置一个过滤器并按姓名和姓氏排序。这规定任何人的姓名分开。(即,如果顶部有一个“Sally Smith”,那么在不同的人之后,表格中的某处就没有更多的“Sally Smith”了)。
  2. 在 D 列中,输入公式=if(and(A2=A3,B2=B3),C2&"/"&C3,"")
  3. 将过滤器扩展到 D 列并过滤掉所有空白。

也就是说,它查看名称单元格 A2 和 A3 是否相等(名称相同),以及单元格 B2 和 B3 是否相等(姓氏相同)。

如果两者都是真的,那就是同一个人,所以我们连接(使用&是连接除了使用之外的另一种方式concatenate())两个种族。

否则,如果名称或用户名或两者不同,则留空。

要完全删除冗余行,请在 D 列复制/粘贴值,过滤 D 列中的空白单元格并删除。之后排序。

编辑:根据问题的编辑:

新步骤:

  1. 放置一个过滤器并按姓名和姓氏排序。(上面已经解释过了)
  2. 在E列中,输入公式=IF(AND(A1=A2,B1=B2),E1&"/"&C2,C2)(我更改了公式以适应新方法)
  3. 在 F 列中,输入公式=if(and(A1=A2,B1=B2),F1+1,1)
  4. 在 G 列中,输入公式=if(F3<F2,1,0)
  5. 在 H 列中,输入公式=if(and(D2="",A1=A2,B1=B2),H1,D2)(无论走到哪里都会用到 ID)。

将公式从第 2 行开始。第 3 步所做的是为同名的人添加一个递增数字。

第 4 步所做的是检查 F 列何时返回 1。这将确定您的“要保留的最后行”。

这是我从这些公式中得到的输出: 在此处输入图像描述

绿色行是您保留的(请注意,1在列G中可让您快速发现它们),A、B、C、E 和 H 列是您保留在最终工作表中的列。完成公式后和删除行之前,不要忘记复制/粘贴值!

于 2013-05-01T16:42:34.093 回答
1

如果第一个SallyA1然后=IF(AND(A1=A2,B1=B2),C1&"/"&C2,"")适当地复制下来可能适合。假设在不相同的地方,空格 ("") 比重复C值更受欢迎。

于 2013-05-01T16:29:23.417 回答