1

大家好!我目前正在尝试在 VBScript 中实现之前在 excel 中找出一些东西。我必须在矩阵中以数学方式转置几个单元格(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顶部y的预块中的值,是下面的预块中的值。 ) 现在这可以正常工作到某个点(例如10)。

在 VBScript 中,我首先编写了以下内容:

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

    ' 板定义
    ReDim tmp(UBound(PlateDef))
    对于 x = 0 到 UBound(PlateDef)
        PlateDef(x) = tmp
    下一个

    我 = 1
    对于 x = 0 到 UBound(PlateDef)
        For y = 0 To UBound(PlateDef(x))
            PlateDef(x)(y) = i
            我 = (我 + 1)
        下一个
    下一个

    'Dim msg' 检查定义
    '对于 x = 0 To (UBound(PlateDef))
    ' msg = Join(PlateDef(x), ", ") & vbCrLf & msg
    '下一个

    ' 获取位置
    y = (pos Mod 10)
    x = ((pos - y) / 10)

    GetPosInSrcRack = PlateDef(y)(x)
结束功能

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

使用上面的公式我会写:

函数 GetPosInSrcRack(Pos)
    Pos = (((Pos MOD 10)-1)*10)+(1+((Pos - (Pos MOD 10))/10))
结束功能

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

4

2 回答 2

2

只需使用Paste Special > Transpose选项。

于 2013-02-14T10:48:02.797 回答
1
y=(MOD(x-1,10))*10+INT((x-1)/10)+1

(顺便说一句,你正在做的不是矩阵转置,但这确实做了你所做的,只会更好。)

于 2013-02-14T11:24:22.733 回答