Bir masayı ters çevirmek (transposing değil)


2

Bir moleküler patoloji projesi için doku mikro-dizi (TMA) görüntü analizi ile çalışıyorum. TMA'lar çok sayıda küçük resme sahip slaytlardır ve slayt tarandıktan sonra benzersiz kimliklerin haritasıyla eşleştirilmesi gerekir.

Bazen slaytlar döndürülür, bu yüzden ihtiyacım olan şey bir Excel tablosunu çevirmenin bir yoludur, ancak bir anlam ifade ederse aktarım yapmamaktır.

Örneğin

Gönderen:

görüntü tanımını buraya girin

için:

görüntü tanımını buraya girin

Herhangi bir yardım çok takdir edilecektir

Yanıtlar:


1

Genel olarak makroları olmadan problemleri çözmeyi tercih ederim, ancak şimdi onlarsız kolay bir çözüm bulamadım.

Makronun altında seçilen matrisi ters çevirir ve orijinal konumuna veya yeni bir çalışma sayfasına geri yazar.

Makroyu çalıştırmak için:

  • Visual Basic düzenleyicisini açmak için Alt + F11 tuşlarına basın
  • kodu bir modüle yapıştırın (insert - modül)
    • not: bir kod ekledikten sonra, makroyu saklamak istiyorsanız (gelecekte buna ihtiyacınız olmayacaksa, .xlsx olarak da saklamaktan daha iyi), çalışma kitabınızı makro etkin çalışma kitabı olarak kaydetmeniz gerekir.
  • İhtiyacınız olan seçeneği saklayın (orijinal verilerin üzerine yazın veya yeni sayfa oluşturun) ve diğerini silin
  • çevirmen gereken masanın tamamını seç
  • "görünümü" - "makrolar" - "makroları görüntüle" ye gidin - makroyu seçin (InvertTable) ve çalıştır tuşuna basın

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

2

N2 hücresinden başlayarak 9 ila 1 olan bir yardımcı sıra ve O1 hücresinden başlayarak 12 ila 1 olan bir yardımcı sütun oluşturabilirsiniz.

Şimdi, aşağıdaki formülü yerleştirin ve sağa ve aşağı sürükleyin:

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

Aşağıdaki resme bakın:

görüntü tanımını buraya girin


2

Bunu INDEX ile yapabilirsiniz:

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

Bu, tablonun menzilde olduğunu varsayar $A$1:$C$3,

Formülüme girmeniz ve ihtiyaçlarınızı karşılamak için aralıkları değiştirmeniz gerekecektir.

Masanızın $A$1:$C$3tüm aralığına uyacak şekilde değiştirin . $A$1:$A$3Masanızın en üst sırasına uyacak şekilde değiştirin . $A$1:$C$1Tablonun ilk sütununa uyacak şekilde değiştirin .

Orada $ işaretlerinin olduğundan emin ol.

görüntü tanımını buraya girin

OP için EDIT

Hücrede M1bize aşağıdaki formül:

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

Orijinal tablonuzu doğrudan ters çevirmek için, üstüne X1ve sonra aşağı sürükleyin X9.


Merhaba PeterH, Cevabınız için teşekkürler. Aptalca bir şey yaptığımdan eminim ama çalışmasını sağlayamıyorum. Verilerim, A1 ile L9 arasındadır
dougzy

@dougzy benim düzenlememi görün
PeterH
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.