首先让我解释一下我想要实现的目标。
我目前有一个像这样的Excel:
Names | Standards
James | Standard 1
James | Standard 2
James | Standard 3
Francis | Standard 1
Francis | Standard 2
Francis | Standard 3
Leon | Standard 2
Leon | Standard 3
Peter | Standard 2
Michael | Standard 3
我想创造这样的东西:
Standard | Name 1 | Name 2 | Name 3 | Name 4
Standard 1 | James | Francis | |
Standard 2 | James | Francis | Leon | Peter
Standard 3 | James | Francis | Leon | Michael
我真正的Excel有超过300个标准,所以我想使用Excel公式自动化。我知道这是可能的,但我暂时没有使用过Excel,所以我可以在正确的方向上使用。
我需要的一些事情(我认为):
需要计算名称列中人们提到标准的次数。所以我想知道标准1需要2个名称,标准3需要4个名字。我想我可以使用COUNTIF方法做到这一点。
我们需要搜索标准的位置。我想我可以通过使用Match功能来做到这一点。这为我们提供了原始Excel中第一场比赛的位置。通过对原始的Excel a-z进行排序并将其与countif结果相结合,我知道所有匹配的位置(第一个匹配+ countif =最后一个匹配的位置,其间的所有内容也是该标准)。
对于提到标准的第一个名称,我将引用第一个匹配项左边的单元格(因为名称位于我找到的标准左侧的单元格中)。对于第二个名称,我将引用第一个匹配项下方单元格左侧的单元格。我一直这样做,直到找到与Countif提到的名字一样多的名字。所以我需要一个IF语句,确保如果2个人提到标准1只获得2个名称和2个单元格带有“”。
我如何参考细胞?通过另一个使用它的if语句:Excel Reference To Current Cell,如果我错了,请纠正我,但我不能只说这个.CELL =我找到的单元格位置(可能应该在这里使用INDIRECT?)。
这只是我的头脑风暴,但我很想知道人们是否对我的问题有任何其他想法或对我目前的计划有一些反馈。
值得一提的是,我想使用Excel Formula来做到这一点。我确实意识到这并不总是最好的,但VBA不是一个选择。我也不担心性能问题,因为我认为在使用公式找到所有名称之后我只会复制所有值。
提前致谢!
答案 0 :(得分:0)
根据您希望如何设置布局,我认为您应该使用数据透视表。将“标准”和“名称”字段拖到“行”数据框,然后右键单击标准,单击“字段设置” - “布局和打印” - “以表格形式显示项目标签”。 (见下面的例子。)
如果你肯定需要问题格式的数据,我会通过将'names'字段拖到'columns'数据框来编辑数据透视表。然后再次从字段列表中拖出“标准”字段,并将其复制到“值”框中(参见下面的示例)。
在数据透视表下方的空间中,如果有char F_N;
if (scanf("%c%*[^\n]", &F_N) != 1) {
/* XXX: handle scanf error */
}
getchar();
,请使用IF
公式仅复制名称。这种方法显然会非常脆弱,所以如果你能用第一种方法做,我认为你将来会遇到更少的问题。