Matriz Transposta
Vamos, agora, transpor matrizes no VBA.
Transpor uma matriz significa, basicamente, tornar o que é linha dela uma coluna.
Vamos ver aqui por esse exemplo bem coloridinho para ficar bem claro para a gente.
Linha um dessa matriz aqui, quatro por três, então quatro linhas e três colunas, virou a primeira coluna dela.
Segunda virou segunda coluna.
Terceira linha, terceira coluna e assim por diante.
Independente de quantas linhas e colunas tivessem, esse processo se repetiria.
No VBA, a gente vai usar uma ferramenta bastante interessante e bastante intuitiva que é literalmente inverter i por j.
Então a gente vai ter aqui uma matriz, certo?
Recebendo uma matriz normal.
Então a gente tem nossa matriz normal aqui, uma matriz i, j qualquer...
i e j...
deixar bem coloridinho...
i e j.
E a gente vai fazer a j, i receber essa matriz i e j.
Então a gente faz aqui uma inversão do que é linha, ou seja, o j, que significa, em geral, coluna, vai estar na posição da linha, e o que é linha vai estar na posição da coluna.
Assim a gente faz aí uma inversão do que é linha e coluna e a gente já resolve grande parte do nosso problema.
Vamos aplicar agora essa teoria na prática para ver quais os impedimentos da prática, mesmo, em aplicar essa teoria.
Faça uma macro para transpor uma matriz n por m, ordem pedida por input box, então uma ordem diferente, não necessariamente é quadrada, digitada nas células com distância de uma coluna, ou seja...
Ou seja tem aqui a matriz original, já está digitada, vou pedir a ordem dela por input box, e vou transpor ela para a mesma...
para as mesmas...
para a mesma posição
horizontal, só que verticalmente...
Perdão, para a mesma posição vertical, só que horizontalmente eu vou deslocá-la aqui para a direita.
Ou seja, eu vou ter ela aqui, aqui do ladinho, ao invés de tê-la aqui em cima, a gente nunca transpõe matriz uma em cima da outra, aliás, porque a gente vai causar vários problemas, a gente vai perder dados...
Um problema parecido com aquele problema da troca, então a gente vai perder vários dados simultaneamente, é bem caótico.
Então a gente sempre transpõe para outro lugar, aqui ele pede para transpor para o lado, a gente vai jogar ela para o lado direito.
Dado que aqui tinham três colunas, a gente precisou jogar tudo três lugares para o lado, se a gente quisesse coladinho aqui do lado.
Só que nesse caso, a gente quer mais do que do lado, a gente quer três posições do lado, ou seja, o tamanho dessas colunas, mais uma posição ainda, que é a coluna D.
Então a gente vai querer ela aqui com um afastamento de uma coluna.
Na prática, vai ser da seguinte forma.
Aqui eu já tenho digitado, tá?
Tenho digitado os dimensionamentos i, j, n e m.
i e j porque a gente está trabalhando com matrizes, trabalhou com matrizes, vai ter i e j, nem precisa pensar nisso, já dimensiona.
M sendo n, enezinho de navio, sendo aqui a quantidade de linhas, m a quantidade de colunas, pediu os dois por input box...
E agora a gente vai começar entrando com os fors, então for i começando em um...
A leitura disso daqui é bem importante, então for i começando de um indo até n.
For j começando em um, opa!
For j começando em um até m, a gente vai fazer aquela famosa inversão, que é falar a j vírgula i, certo?
Recebida pela...
Recebe, na verdade, a i,j, de forma que a gente faça a inversão.
Só que a gente tem um problema.
Que ele não quer que inverta, na verdade, a gente nunca inverte uma em cima da outra.
Nesse caso a gente estaria invertendo, bugando toda a matriz.
Para que a gente consiga colocar, com uma coluna de distância do lado, a gente precisa fazer a matriz que está recebendo, na coluna, ou seja, por mais que aqui esteja j,i e não i,j, aqui, na a segunda ca...
o segundo parâmetro continua sendo ainda de qualquer forma as colunas de nossa matriz.
Então a gente vai fazer um acréscimo nas colunas.
Se fossem sempre três colunas, a gente colocaria três para o lado mais a coluna D, ou seja, mais uma coluna ainda.
Então a gente jogaria tudo três lugares para o lado...
Então aqui...
Opa, a gente jogaria três colunas para o lado.
Então esse daqui estaria aqui, esse daqui estaria aqui, e assim por diante.
Mas a gente não quer só três para o lado, a gente quer ainda mais, a gente quer a coluna D ainda em branco, então a gente vai jogar quatro posições.
Seguinte...
Para então que isso aconteça da forma correta, a gente faria esse ajuste aqui, somando três mais um, só que não necessariamente a nossa coluna...
A nossa matriz vai ter três colunas.
A gente pediu aqui m justamente para isso, é o usuário quem define.
Então não vai ser sempre três, mas sim sempre o que o usuário mandar que seja.
Se ele mandar vinte, vai ser vinte, e isso vai estar dentro de m porque eu peço aqui por input box.
Então eu vou colocar um espaçamento de m mais um, que é uma coluna em branco, do ladinho.
E é assim que a gente faz o ajuste.
Vamos limpar aqui a nossa planilha para rodar aqui com essa planilha de exemplo mesmo, para ver se deu certinho.
Então ela é uma matriz quatro por três.
Vou botar aqui no código, vou executar aqui na...
no botãozinho azul.
Ele pergunta o número de linhas...
Número de linhas, são quatro, e três colunas.
Vamos ver aqui se deu certo.
A gente tem aqui a transposição feita dessa matriz.
Super tranquilinho, e é um algoritmo muito importante.