将排名分配给按顺序变化的项目

时间:2018-01-03 15:19:08

标签: excel excel-vba vba

我正在尝试从在线调查问卷中构建数据集。在本调查问卷中,参与者被要求列出6个项目。这些项目用1到6的数字表示(提及的顺序无关紧要)。之后,参与者被要求将这些项目从最重要的项目排列到最不重要的项目(在这里订购事项)。现在我有三列"命名项目","项目排名"和"排名。"最后一列表示每个案例的排名位置。因此,我们的想法是查看第一列中的数字"命名项目"并在第二栏中搜索其位置"排名"并将其位置返回到第三列对应的行。

由于数字从1到6,每6行进程必须在第7行再次开始。我共有186名参与者,这意味着共有1116项。什么是最有效的方法来防止人为错误?

以下是手动完成工作表的示例:

+----------------------+-----------------------------+------+
| Order of named items | Items ranked (# = Identity) | Rank |
+----------------------+-----------------------------+------+
|                    1 |                           2 |    4 |
|                    2 |                           5 |    1 |
|                    3 |                           6 |    6 |
|                    4 |                           1 |    5 |
|                    5 |                           4 |    2 |
|                    6 |                           3 |    3 |
|                    1 |                           1 |    1 |
|                    2 |                           2 |    2 |
|                    3 |                           3 |    3 |
|                    4 |                           4 |    4 |
|                    5 |                           5 |    5 |
|                    6 |                           6 |    6 |
|                    1 |                           1 |    1 |
|                    2 |                           2 |    2 |
|                    3 |                           3 |    3 |
|                    4 |                           4 |    4 |
|                    5 |                           5 |    5 |
|                    6 |                           6 |    6 |
|                    1 |                           5 |    3 |
|                    2 |                           6 |    4 |
|                    3 |                           1 |    5 |
|                    4 |                           2 |    6 |
|                    5 |                           3 |    1 |
|                    6 |                           4 |    2 |
|                    1 |                           2 |    2 |
|                    2 |                           1 |    1 |
|                    3 |                           6 |    4 |
|                    4 |                           3 |    5 |
|                    5 |                           4 |    6 |
|                    6 |                           5 |    3 |
+----------------------+-----------------------------+------+

2 个答案:

答案 0 :(得分:0)

假设第一列开始于A2,第二列开始于B2,请使用C2中的此公式复制

=MATCH(A2,OFFSET(B$2,6*INT((ROWS(C$2:C2)-1)/6),0,6),0)

OFFSET返回所需的6个单元格区域,MATCH找到相关项目的位置

见下面的截图

enter image description here

答案 1 :(得分:0)

您可以使用此非易失性功能:

=MATCH(A2,INDEX(B:B,INT((ROW(1:1)-1)/6)*6+2):INDEX(B:B,INT((ROW(1:1)-1)/6)*6+7),0)

enter image description here