3

Я работаю с анализом изображений микромассивов тканей (TMA) для проекта молекулярной патологии. TMA - это слайды с множеством маленьких изображений, и после сканирования слайда его необходимо сопоставить с картой уникальных идентификаторов.

Иногда слайды поворачиваются, поэтому мне нужен способ перевернуть таблицу Excel, но не транспонировать, если это имеет смысл.

Например

От:

чтобы:

Любая помощь приветствуется

3 ответа3

2

Вы можете сделать это с помощью INDEX:

=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))

Это предполагает, что ваша таблица находится в диапазоне $A$1:$C$3 ,

Вам нужно будет перейти к моей формуле и изменить диапазоны в соответствии с вашими потребностями.

Измените $A$1:$C$3 чтобы соответствовать всему диапазону вашего стола. Измените $A$1:$A$3 чтобы соответствовать верхней строке вашего стола. Измените $A$1:$C$1 чтобы соответствовать первому столбцу вашей таблицы.

Убедитесь, что там есть знаки $.

РЕДАКТИРОВАТЬ для OP

В ячейке M1 используется следующая формула:

=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))

Перетащите его к X1 , а затем к X9 , чтобы напрямую инвертировать исходную таблицу.

2

Вы можете создать вспомогательную строку с 9 до 1, начиная с ячейки N2, и вспомогательный столбец с 12 до 1, начиная с ячейки O1.

Теперь поместите следующую формулу и перетащите вправо и вниз:

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

Смотрите следующую картинку:

1

Обычно я предпочитаю решать проблемы без макросов, но без них я не смог найти легкого решения.

Ниже макрос инвертирует выбранную матрицу и записывает ее обратно в исходное местоположение или на новый лист.

Чтобы запустить макрос:

  • Нажмите Alt+F11, чтобы открыть редактор Visual Basic
  • вставьте код в модуль (insert - module)
    • примечание: после добавления кода вам нужно сохранить рабочую книгу как книгу с поддержкой макросов, если вы хотите сохранить макрос (если он вам не понадобится в будущем, то лучше также сохранить как .xlsx)
  • оставьте нужный параметр (перезаписать исходные данные или создать новый лист) и удалить другой
  • выберите всю таблицу, которую нужно инвертировать
  • перейдите в "просмотр" - "макросы" - "просмотр макросов" - выберите макрос (InvertTable) и нажмите "выполнить"

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .