Membalikkan meja (tidak mentransposisi)

2

Saya bekerja dengan analisis gambar jaringan mikro-array (TMA) untuk proyek patologi molekuler. TMA adalah slide dengan banyak gambar kecil, dan setelah slide dipindai, harus disesuaikan dengan peta ID unik.

Terkadang slide diputar, jadi yang saya butuhkan adalah cara membalik tabel Excel, tetapi tidak mentransposisi jika itu masuk akal.

Sebagai contoh

Dari:

masukkan deskripsi gambar di sini

untuk:

masukkan deskripsi gambar di sini

Bantuan apa pun akan sangat dihargai

dougzy
sumber

Jawaban:

1

Saya biasanya lebih suka menyelesaikan masalah tanpa makro, namun saya tidak dapat menemukan solusi mudah tanpa mereka sekarang.

Di bawah makro membalikkan matriks yang dipilih dan menulisnya kembali ke lokasi asli atau ke lembar kerja baru.

Untuk menjalankan makro:

  • Tekan Alt + F11 untuk membuka editor Visual Basic
  • rekatkan kode dalam modul (masukkan - modul)
    • Catatan: setelah menambahkan kode, Anda harus menyimpan buku kerja Anda sebagai buku kerja yang diaktifkan makro jika Anda ingin menyimpan makro (jika Anda tidak akan membutuhkannya di masa depan, daripada menyimpannya sebagai .xlsx)
  • simpan opsi yang Anda butuhkan (timpa data asli atau buat lembar baru) dan hapus yang lain
  • pilih seluruh tabel yang Anda butuhkan untuk membalikkan
  • pergi ke "view" - "macro" - "view macro" - pilih makro (InvertTable) dan tekan run

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
Máté Juhász
sumber
2

Anda dapat membuat baris pembantu dengan 9 hingga 1 mulai dari sel N2 dan kolom pembantu dengan 12 hingga 1 mulai dari sel O1.

Sekarang, masukkan formula berikut dan seret ke kanan dan ke bawah:

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

Lihat Gambar berikut:

masukkan deskripsi gambar di sini

Anwar
sumber
2

Anda dapat melakukan ini dengan 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))

Ini mengasumsikan meja Anda berada dalam kisaran $A$1:$C$3,

Anda harus masuk ke formula saya dan mengubah rentang sesuai dengan kebutuhan Anda.

Ubah $A$1:$C$3agar sesuai dengan rentang penuh meja Anda. Ubah $A$1:$A$3agar sesuai dengan BARIS atas meja Anda. Ubah $A$1:$C$1agar sesuai dengan kolom pertama dari tabel Anda.

Pastikan Anda memiliki tanda $ di sana.

masukkan deskripsi gambar di sini

EDIT untuk OP

Di Sel M1kami rumus di bawah ini:

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

Seret ke seberang X1, lalu ke bawah X9, untuk secara langsung membalikkan tabel asli Anda.

PeterH
sumber
Hai Peter, Terima kasih atas jawabannya. Saya yakin saya melakukan sesuatu yang konyol tetapi saya tidak bisa membuatnya bekerja. Data saya ada di kisaran A1 hingga L9
dougzy
@dougzy lihat hasil edit saya
PeterH