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
    次

    i = 1
    x = 0の場合UBound(PlateDef)へ
        y = 0の場合UBound(PlateDef(x))へ
            PlateDef(x)(y)= i
            i =(i + 1)
        次
    次

    'Dimmsg'定義を確認してください
    'For 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 に答える