Invertendo uma tabela (não transpondo)

3

Estou trabalhando com análise de imagens de tissue-array (TMA) para um projeto de patologia molecular. Os TMAs são slides com muitas imagens pequenas e, depois que o slide é digitalizado, ele precisa ser combinado com o mapa de IDs exclusivos.

Às vezes, os slides são girados, então o que eu preciso é uma maneira de inverter uma tabela do Excel, mas não de transpor se isso fizer algum sentido.

Por exemplo

De:

para:

Qualquer ajuda seria muito apreciada

    
por dougzy 24.04.2018 / 16:56

3 respostas

1

Geralmente, prefiro resolver problemas sem macros, mas não consegui encontrar uma solução fácil sem eles agora.

Abaixo, a macro inverte a matriz selecionada e a grava de volta no local original ou em uma nova planilha.

Para executar a macro:

  • Pressione Alt + F11 para abrir o editor do Visual Basic
  • cole o código em um módulo (insert - module)
    • nota: depois de adicionar um código, você precisará salvar sua pasta de trabalho como uma pasta de trabalho habilitada para macro se quiser manter a macro (se não for necessária no futuro, também é bom mantê-la como .xlsx )
  • mantenha a opção necessária (substitua os dados originais ou crie uma nova planilha) e exclua os outros
  • selecione a tabela inteira para inverter
  • vá para "visualizar" - "macros" - "visualizar macros" - selecione a macro (InvertTable) e pressione executar
Option Explicit

Sub InvertTable()
    Dim originalData As Variant
    Dim nRows As Integer
    Dim nColumns As Integer
    Dim newData As Variant
    Dim x As Integer
    Dim y As Integer

    originalData = Selection
    nRows = UBound(originalData, 1)
    nColumns = UBound(originalData, 2)
    newData = originalData

    For x = 1 To CInt(nColumns / 2)
        For y = 1 To CInt(nRows / 2)
            newData(y, x) = originalData(nRows - y + 1, nColumns - x + 1)
            newData(nRows - y + 1, nColumns - x + 1) = originalData(y, x)
            newData(y, nColumns - x + 1) = originalData(nRows - y + 1, x)
            newData(nRows - y + 1, x) = originalData(y, nColumns - x + 1)
        Next y
    Next x

    ' --- option 1: overwrite data ---
    Selection = newData
    ' --- end of option 1 ---

    ' --- option 1: insert new sheet ---
    Dim newSheet As Worksheet

    Set newSheet = Selection.Parent.Parent.Worksheets.Add
    newSheet.Range(Cells(1, 1), Cells(nRows, nColumns)) = newData
    ' --- end of option 1 ---
End Sub
    
por 25.04.2018 / 09:12
2

Você pode criar uma linha auxiliar com 9 para 1, começando pela célula N2 e uma coluna auxiliar com 12 para 1, começando pela célula O1.

Agora, coloque a seguinte fórmula e arraste para a direita e para baixo:

=INDEX($A$1:$L$9,$N2,O$1)

Veja a seguinte foto:

    
por 24.04.2018 / 19:27
2

Você pode fazer isso com o ÍNDICE:

=INDEX($A$1:$C$3,((ROWS($A$1:$A$3))+1)-ROWS($G$1:$G1),((COLUMNS($A$1:$C$1))+1)-COLUMNS($G$1:G1))

Isso pressupõe que sua tabela esteja no intervalo $A$1:$C$3 ,

Você precisará entrar em minha fórmula e alterar os intervalos para atender às suas necessidades.

Altere $A$1:$C$3 para se adequar a toda a gama da sua tabela. Altere $A$1:$A$3 para se adequar ao topo da linha da sua mesa. Altere $A$1:$C$1 para se adequar à primeira coluna da sua tabela.

Certifique-se de ter os sinais $ lá.

EDIT para OP

Na célula M1 us, a fórmula abaixo:

=INDEX($A$1:$L$9,((ROWS($A$1:$A$9))+1)-ROWS($N$1:$N1),((COLUMNS($A$1:$L$1))+1)-COLUMNS($N$1:N1))

Arraste-o para X1 e, em seguida, para X9 , para inverter diretamente sua tabela original.

    
por 24.04.2018 / 17:55