如何基于两个表中的两列生成矩阵?

时间:2017-09-27 18:55:25

标签: excel excel-vba matrix excel-formula pivot-table vba

我正在创建一个授权矩阵,以便分发给我的客户。我的Excel工作簿包含两个表:应用程序和权限/角色。

我想获取每个表的第一列,并在另一个工作表上动态生成X,Y矩阵,我的客户端可以在其中标记所需的应用程序/角色组合。

到目前为止,我已尝试过数据透视表,但无法编辑。我想远离宏,因为这将发给外部客户。

最后,我想得到一个动态生成的矩阵,如下所示:

Role 1 | Role 2 | Role 3 | Role 4 | ... | Role n |
App 1  |        |        |        |     |        |
App 2  |        |        |        |     |        |
App 3  |        |        |        |     |        |
App 4  |        |        |        |     |        |
...    |        |        |        |     |        |
App n  |        |        |        |     |        |

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

如果下面的图片是您正在寻找的图片,那么您可以使用下面的方法,然后在发送给客户端的工作表上复制并粘贴为值。

Pivot View

您需要手动创建唯一的应用列表。

每个应用程序旁边都会有几个数组公式来提取相关的角色。

jclass thisClass = (*env)->GetObjectClass(env, obj); jfieldID sendId = (*env)->GetFieldID(env, thisClass, "sendBuffer", "[B");

如果您的数据位于Excel表格中,则公式更易于创建和阅读。

=IFERROR(INDEX($B$3:$C$14,SMALL(IF(($B$3:$B$14=$C17),ROW($B$3:$C$14)-2),ROW($1:$1)),2),"")

这是一个数组公式,因此你需要使用 Ctrl + Shift + Enter 来提交公式。

公式可以自动填充,但您将在每个角色下获得相同的值。您需要将角色2下的=IFERROR(INDEX(Table1,SMALL(IF((Table1[App Name]=$C16),ROW(Table1)-2),ROW($1:$1)),2),"")更改为ROW($1:$1),将角色3等下的ROW($2:$2)更改为您认为需要的角色。记得在每次更改后使用 Ctrl + Shift + Enter

然后只需填写,它将填充列表中每个应用的所有角色。

将副本另存为模板,并使用复制和粘贴作为值,以便在将其结束到客户端之前删除所有可怕的公式。