2013-02-14 2 views
1

Добрый день, всем! Я сейчас пытаюсь понять что-то в excel, прежде чем внедрять в него VBScript. Я должен математически переставлять несколько ячеек (10 * 10 или 5г * 10c) в матрице для:Математическая транспозиция в excel

------------------------------- 
| .. | .. | .. | .. | .. | .. | 
| 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) Может кто-нибудь мне помочь?

ответ

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

(Кстати, то, что вы делаете, это не транспонирования матрицы, но это делать то, что вы делаете, только лучше.)

+0

Это похоже на трюк! Благодаря! Это не математически безупречно, но я не был моим, и, как вы сказали, он делает то, что я хочу! Спасибо! Маленькое редактирование: '+ 1-1'' '' ', поэтому мы можем отказаться от этого ;-) – JvN

+0

@JvN Обратите внимание, что за пределами 10 строк или столбцов вы наверняка столкнетесь с проблемами. Простая причина состоит в том, что, например, число 11 появляется в двух местах, а его «транспозиции» - это числа 2 _ и 101. Таким образом, для больших матриц формула, которую вы ищете, не может существовать. –

2

Просто используйте Paste Special > Transpose вариант.

+0

Это было бы, но я должен сделать это программно-то еще , Где-то у меня нет диапазона ячеек, но где мне нужно найти, например, F (i), где i = 5 (будет 41). Спасибо заранее, конечно! – JvN

+0

А как насчет функции 'TRANSPOSE'? Введенный как формула массива с правильными размерами, он также вернет желаемый результат. –

+0

'Transpose' Не будет и трюк. Я пытаюсь понять это в excel, как это. Но потом у меня не будет массива, поэтому функциональность Transpose Excel не будет работать. Однако я знаю количество строк и столбцов. Спасибо за комментарии! – JvN

Смежные вопросы