excel中的数学转置

时间:2013-02-14 10:45:13

标签: excel vbscript excel-formula excel-2010 transpose

大家好日子! 我现在正试图在excel中实现一些东西,然后再在VBScript中实现。我必须以数学方式在一个矩阵中转置一些单元格(10 * 10或5r * 10c):

-------------------------------
| .. | .. | .. | .. | .. | .. |
| 21 | 22 | 23 | 24 | 25 | .. |
| 11 | 12 | 13 | 14 | 15 | .. |
|  1 |  2 |  3 |  4 |  5 | .. |
-------------------------------

必须成为

-------------------------------
| .. | .. | .. | .. | .. | .. |
|  3 | 13 | 23 | 33 | 43 | .. |
|  2 | 12 | 22 | 32 | 42 | .. |
|  1 | 11 | 21 | 31 | 41 | .. |
-------------------------------

现在我不是数学家(我现在更不是程序员了),但我想出了:F(y)=((MOD(x,10)-1)*10)+(1+((x-MOD(x,10))/10))x是前块a中的值顶部,y是下面预阻区中的值。)现在这可以正常工作(例如10)。

在VBScript中,我首先写了下面的内容:

Function GetPosInSrcRack(Pos)
    Dim PlateDef(9), x, y, i, tmp

    ' Plate Definition
    ReDim tmp(UBound(PlateDef))
    For x = 0 To UBound(PlateDef)
        PlateDef(x) = tmp
    Next

    i = 1
    For x = 0 To UBound(PlateDef)
        For y = 0 To UBound(PlateDef(x))
            PlateDef(x)(y) = i
            i = (i + 1)
        Next
    Next

    'Dim msg ' Check definition
    'For x = 0 To (UBound(PlateDef))
    '    msg = Join(PlateDef(x), ", ") & vbCrLf & msg
    'Next

    ' Get the Position
    y = (pos Mod 10)
    x = ((pos - y) / 10)

    GetPosInSrcRack = PlateDef(y)(x)
End Function

当然,这很有效,但很糟糕。

使用上面的公式我会写:

Function GetPosInSrcRack(Pos)
    Pos = (((Pos MOD 10)-1)*10)+(1+((Pos - (Pos MOD 10))/10))
End Function

但就像我说的那样,这仍然是不正确的(10给出-8) 有人可以帮帮我吗?

2 个答案:

答案 0 :(得分:2)

只需使用Paste Special > Transpose选项。

答案 1 :(得分:1)

y=(MOD(x-1,10))*10+INT((x-1)/10)+1

(顺便说一句,你所做的不是矩阵换位,但这样做会做你做的,只会做得更好。)