从excel

时间:2016-10-05 18:07:39

标签: excel excel-vba excel-formula vba

我有这样的样本表:

ID | 1 | 2 | 3
-------------
1  | 0 | 1 | 0
--------------
2  | 1 | 1 | 1

然后我想从该表生成一个新表。然后将第二行(1)与每列(1,2,3)进行比较,然后打印矩阵的值(0-1-0)。例如:

Row_ID | Column_ID | Value
--------------------------
1      | 1         | 0
--------------------------
1      | 2         | 1
--------------------------
1      | 3         | 0
--------------------------
2      | 1         | 1
--------------------------
2      | 2         | 1
--------------------------
2      | 3         | 1

我不确定使用公式如何或从哪里开始。请帮忙。谢谢,

1 个答案:

答案 0 :(得分:1)

好。显然,没有单一的公式可以完成这项工作,但我们可以使用一些选项。我假设新表将从Sheet2的单元格A1开始。相应调整。

从手动输入的标题开始 Row_ID | Column_ID | Value

在第一列第一行输入1.在下面的行中,使用以下公式:=IF(B3<B2,A2+1,A2)每次第二列重置其编号时,这将使第一列中的值增加1。

在第二列第一行输入1.我们将使用的公式需要进行一些调整,但基本版本为:=IF(MOD(ROW()**+1**,**3**)=0,1,B2+1)

此公式基本上会计入某个点,然后重置其编号。它将计入的点数以及它将重置的位置将根据您拥有的数据量以及您从哪一行开始而有所不同。将 3 替换为您拥有的数据列数,然后删除**。需要+1才能将Row()计数器增加到SAME NUMBER作为数据列的数量。所以在我的例子中,有3个数据列并从第2行开始,ROW()函数给出了2,所以我们需要加1来获得总数为3.如果我有5个数据列,我会总数增加3。希望这是有道理的。

这两个公式应该为您提供一组行号和列号。向下复制公式将强制值根据需要增加,因此:

Row_ID | Column_ID | Value
   1   |     1     |
   1   |     2     |
   1   |     3     |
   2   |     1     |

...等

最后,为了引入这些值,我们将在“值”列中使用OFFSET公式:=OFFSET(Sheet1!$A$1,A2,B2)该公式从参考单元格开始 - 在这种情况下为A1 - 然后移动向下x行数和y数列以返回值。 X和Y由我们已有的公式提供。你的最终结构将是这样的:

Row_ID | Column_ID | Value
   1   |     1     |=OFFSET(...
=IF(...|=IF(MOD(...|=OFFSET(...

我希望所有这些都是有道理的。如果有任何问题,请告诉我,我会尝试进行问题排查。

已编辑添加: 如果行ID类似于需要包含在每个值中的键,我们可以相当容易地得到它。我们将包含另一个具有略微修改的OFFSET公式的列:=OFFSET(Sheet1!$A$1,A2,0)

使用此版本的公式,我们不会在我们向下时更改列,而只是更改时的行。它允许在表的每一行中重复第一行中的值。所以这是我的意见:

This is my test input

这是我的输出:

And this is my output

请注意,ID在同一项的输出的每一行上重复。