Visual Basic & Excel

achilova15

Народ. Кто знает как написать пргогу которая переставляет местами все элементы относительно диогонали в матрице:
1 2 3
4 5 6
7 8 9
Это означает что ВБ должен поменять ячейки 2 и 4, 3 и 7, 8 и 6
Нужна сама идея и логика! Подскажите плз!

artimon

Зачем?
Выдели область скопируй, а потом, вставка - специальная - там галочка есть нужная

maggi14

В экселе VBA для транспонирования не нужен. Выделяешь нужные тебе ячейки, копируешь в буфер и делаешь специальную вставку (Context menu-> Paste special...->Transpose)

achilova15

Неее. Вот пример программы которая переставляет нижние ячейки местами:
Dim r2 As Integer, c2 As Integer
Dim j As Integer, k As Integer
Set wh = Worksheers ("лист2")
r1 = 3
c1 = 5
n = 4
m = 3
r2 = 12
c2 = 8
For j = 1 To n
For k = 1 To m
wh.Cells(r2 + j - 1, c2 + k -1).Value = whCells(r1 + j -1, c1 + k -1).Value
Next k
Next j
End Sub

maggi14

Чего "неее"? Я тебе говорю, все работает и без скриптов. Конечно, если хочется погеморроиться, можешь попробовать. Самый понятный и удобный способ - объявить массив, забить [i, j] элемент этого массива [j, i] элементом исходного, а затем вывести его на место старого.
Или сделать прогонку по i=1,2,3,..,n j=1,2,..,i-1 и выполнить a = Ar[i,j] Ar[i,j]=Ar[j,i] Ar[j,i]=a.

achilova15

Ну мне вариант в таком виде нужен как я написал, только логика для обмена относительно диоганали. Я думаю преподу непонравиться если явно указать ячейки кто с кем меняться должен
Оставить комментарий
Имя или ник:
Комментарий: