如何将多维Excel表格转换为一维?

14 浏览
0 Comments

如何将多维Excel表格转换为一维?

我正在使用的表格看起来像这样:

X    x1    x1    x1    x1    x1    x1    x1    x1    x2    x2    x2    x2   
Y    y1    y1    y1    y1    y2    y2    y2    y2    y1    y1    y1    y1
Z    z1    z2    z3    z4    z1    z2    z3    z4    z1    z2    z3    z4
30%  23    22    25    19    24    27    22    32    21    19    31    29 
31%  25    23    27    22    26    29    24    33    24    22    33    31
32%  29    26    31    25    28    33    27    36    27    25    35    33
.    .     .     .     .     .     .     .     .     .     .     .     .
.    .     .     .     .     .     .     .     .     .     .     .     .
.    .     .     .     .     .     .     .     .     .     .     .     .
.    .     .     .     .     .     .     .     .     .     .     .     .
300% 500   520   613   476   512   312   324   754   432   345   421   444

我想要的结果是这样的:

X   Y   Z   百分比  值
x1  y1  z1  30%  23
x1  y1  z1  31%  25
x1  y1  z1  32%  29
.   .   .   .    .
.   .   .   .    .
x1  y1  z1  300% 500
x1  y1  z2  30%  22
x1  y1  z2  31%  23
x1  y1  z2  32%  26
.   .   .   .    .
.   .   .   .    .
x1  y2  z1  30%  24
x1  y2  z1  31%  26
.   .   .   .    .
.   .   .   .    .
x1  y2  z4  30% 32
x1  y2  z4  31% 33  
.   .   .   .    .
.   .   .   .    .
.   .   .   .    .
x10 y3  z7  300% 431

我尝试使用此线程中提供的宏 How to "flatten" or "collapse" a 2D Excel table into 1D?,但无法使其工作,可能是因为我的表格不止是二维的,更像是四维的。我不是一个宏专家。

有没有办法将第一个表格转换成像第二个表格那样的形式,无论是宏还是其他方式。我意识到这会大大增加行数,但这不是问题。

0
0 Comments

在Excel中,有时候我们会遇到多维表格的情况,即表格中存在多行多列的数据。然而,在某些情况下,我们可能需要将这种多维表格转换为一维表格,以方便进行数据处理或分析。

为了解决这个问题,可以使用VBA代码来实现。下面是一个示例代码,用于将多维表格转换为一维表格:

Option Explicit

Option Base 1

Sub Flatten()

Dim inArr As Variant, col As Long, rw As Long

Dim outArr() As String, rwcount As Long, outRng As Range

inArr = Range("A1:M7").Value '将范围修改为正确的范围

Set outRng = Range("A12") '将范围修改为正确的范围

ReDim outArr(1 To (UBound(inArr, 2) - 1) * (UBound(inArr, 1) - 3) + 1, 5)

rwcount = 1

outArr(1, 1) = "X": outArr(1, 2) = "Y": outArr(1, 3) = "Z"

outArr(1, 4) = "Per.": outArr(1, 5) = "Value"

For col = 2 To UBound(inArr, 2)

For rw = 4 To UBound(inArr, 1)

rwcount = rwcount + 1

outArr(rwcount, 1) = inArr(1, col)

outArr(rwcount, 2) = inArr(2, col)

outArr(rwcount, 3) = inArr(3, col)

outArr(rwcount, 4) = inArr(rw, 1)

outArr(rwcount, 5) = inArr(rw, col)

Next rw

Next col

outRng.Resize(UBound(outArr, 1), UBound(outArr, 2)).Value = outArr

End Sub

这段代码的作用是将名为"A1:M7"范围内的多维表格转换为名为"A12"范围内的一维表格。在转换过程中,代码会将表头信息复制到目标范围中,并将每个单元格的行和列数据复制到相应位置。

通过运行这段代码,我们可以将多维表格转换为一维表格,使得数据处理和分析更加方便和高效。这对于需要对大量数据进行操作的用户来说,尤其有用。

0
0 Comments

如何将一个多维的Excel表格转换为一维?

问题的出现原因:需要将一个多维的Excel表格转换为一维,但没有使用VBA的要求。

解决方法:

1. 在数据集的顶部插入一行,用于进行列查找时的匹配。

2. 在第20行,使用以下公式:

- A20: `=B20 & C20 & D20`

- B20: `x1`

- C20: `y1`

- D20: `z1`

- E20: `0.3`

- F20: `=INDEX($C$5:$N$12,MATCH(E20,$B$5:$B$12),MATCH(A20,$C$1:$N$1,0))`

列F使用`index(array, rowValue, columnValue)`函数。`array`是数据表的位置,`rowValue`是百分比列与数据表左侧标题列的匹配,`columnValue`使用连接的xyz列与第一步插入的标题行进行匹配。

3. 现在只需构建出表格即可。以下是从右到左的第21行。

- 列E:每一行的列E都增加1%,直到达到301%,然后重新开始。公式为:`=IF(E20+0.01 < 3.001 , E20 + 0.01 , 0.3)`。由于浮点漂移的问题,我们每次四舍五入到最近的0.01:`=MROUND(IF(E20+0.01<3.001,E20+0.01,0.3),0.01)`

- 列D:只有当列E重置为0.3时,列D的值才会改变。否则保持不变:`=IF(E21=0.3,IF(D20="z4","z1","z"&RIGHT(D20,1)+1),D20)`

- 列C:类似地,只有当E和D刚刚重置时,列D才会改变:`=IF(AND(D21="z1",E21=0.3),IF(C20="y1","y2","y1"),C20)`

- 列B:类似地,只有当其他三个列都重置时,此列才会改变:`=IF(AND(C21="y1",D21="z1",E21=0.3),"x"&RIGHT(B20,1)+1,B20)`(如果数据超过x!0,需要稍作调整)

4. 然后从第21行向下填充到第21701行,即可完成转换。

解决方法的结果:

由于没有完整的数据表供参考,因此可能有许多空白。但在数据存在的地方,看起来与预期相符。

文章整理完毕。

(注意:此文章是根据提供的内容进行整理,可能存在理解错误或遗漏的情况)

0