Fungsi Excel menentukan apakah sebuah sel terlihat

11

Dalam pemformatan bersyarat saya ingin mendeteksi apakah baris di atas sel saat ini tersembunyi atau terlihat. Bagaimana saya bisa mendeteksi apakah sel terlihat atau tidak?

Satu-satunya peretasan yang bisa saya pikirkan adalah:

  1. Buat kolom dengan semua 1 nilai-nilai.
  2. Gunakan formula seperti subtotal(109,c2:c2)=1 (mis. hanya di sel yang ingin saya periksa) untuk menentukan apakah itu terlihat atau disembunyikan.

Apakah ada cara melakukan ini tanpa kolom sementara yang harus dibiarkan terlihat ketika baris ditampilkan?


Untuk menghindari Masalah XY , yang ingin saya lakukan adalah memiliki kolom yang merupakan kategori untuk baris. Baris VISIBLE pertama dengan kategori tertentu harus memiliki gaya yang berbeda; baris selanjutnya dengan kategori yang sama sedikit berbeda. Di ASCII:

cat.   item
+AAA+  aaaa
(AAA)  bbbb
(AAA)  cccc
+BBB+  dddd
(BBB)  eeee
(BBB)  ffff

Jika filter saya menyembunyikan baris dengan dddd maka saya ingin baris dengan eeee untuk memiliki +BBB+ styling bukan.

Phrogz
sumber

Jawaban:

10

Alih-alih subtotal menggunakan jumlah pada kolom lain, Anda bisa menggunakan subtotal menggunakan counta untuk melihat apakah sel (dikenal-kosong) disembunyikan atau tidak. Misalnya, jika kolom A biasanya akan terlihat (kecuali baris disembunyikan)

= IF( SUBTOTAL(103,A2)=1, "VISIBLE", "HIDDEN (or blank)" )

Anda bisa meletakkan rumus ini di kolom yang mungkin disembunyikan, dan itu akan tetap berfungsi.

Dalam pemformatan bersyarat, Anda dapat menggunakan: = SUBTOTAL(103,$A2)=1 untuk menentukan apakah baris terlihat.

Phrogz
sumber
5

Sebagai tambahan untuk jawaban Phrogz, jika Anda perlu memeriksa apakah sel dalam a kolom disembunyikan, coba salah satu dari yang berikut,

Pemformatan Bersyarat

=CELL("width",TargetCell)=0

Pembaruan ini secara otomatis segera setelah kolom disembunyikan.

Pemeriksaan Formula

=IF(CELL("width",TargetCell)=0, "Cell is hidden.", "Cell is visible.")

Formula ini tidak akan diperbarui secara otomatis dan Anda harus mengarahkan Excel ke "Calculate Now" dengan memilih opsi menu atau menekan "F9".

Tom Bombadil
sumber
1

Ini mirip dengan pendekatan Siswa Gary. Tentukan fungsi VBA berikut:

Function MyRowHidden(ref As Range)
    MyRowHidden = Rows(ref.Row).Hidden
End Function

Lihat Bagaimana cara menambahkan VBA di MS Office? jika Anda butuh bantuan untuk itu. Sekarang kamu bisa menggunakannya MyRowHidden( sel ) untuk memeriksa apakah baris mengandung cell tersembunyi.

Cara saya merencanakan untuk menyelesaikan masalah menggunakan kolom pembantu, tetapi Anda dapat menyembunyikannya. Dengan asumsi bahwa data Anda mulai di Row 2, dengan kategori di Kolom A, masuk

=OR($A1<>$A2, AND(H1,MyRowHidden(H1)))

ke dalam sel H2, dan seret ke bawah. Rumus ini bernilai TRUE jika

  • kategori di baris ini ( A2 ) berbeda dari kategori pada baris sebelumnya ( A1 ); yaitu, ini adalah baris pertama dari kategori baru, atau
  • baris sebelumnya harus disorot, tetapi disembunyikan.

Kemudian cukup gunakan Pemformatan Bersyarat untuk menyorot sel A2 jika =H2 adalah benar.

Contoh: data mentah:

full data set

Ya, saya seorang tradisionalis; Saya masih menganggap Pluto sebagai planet. Ini dia lagi dengan baris bilangan prima (2, 3, 5, 7, 11, dan 13) disembunyikan:

filtered data

Tentu saja Anda harus mengaktifkan makro di buku kerja Anda.

G-Man
sumber
0

Untuk mendeteksi apakah baris di atas sel aktif adalah Tersembunyi , jalankan makro ini:

Sub WhatsAboveMe()
Dim r As Range
Set r = Selection
With r
    If .Row = 1 Then
        Exit Sub
    End If
    If .Offset(-1, 0).EntireRow.Hidden = True Then
        MsgBox "the row above is hidden"
    Else
        MsgBox "the row above is visible"
    End If
End With
End Sub
Gary's Student
sumber
1
Bagaimana mereka menjalankannya dari Pemformatan Bersyarat (ditanyakan dalam pertanyaan)?
CharlieRB
0

Utas ini agak lama, tetapi jika bermanfaat bagi siapa pun, berikut adalah cara untuk memformat duplikat pada tabel yang difilter tanpa harus menggunakan VBA.

  1. Buat kolom diisi dengan 1's
  2. Buat kolom lain dan masukkan formula seperti ini di dalamnya

    =IF(SUBTOTAL(103, [@ColumnWithOnlyOnesInIt])=1, [@ColumnYouWantToCheckForDuplicates], "")

  3. Masukkan pemformatan bersyarat duplikat normal pada kolom yang ingin Anda periksa.

Rumus dari langkah 2 akan menyalin nilai dari kolom yang ingin Anda periksa tetapi hanya ketika baris terlihat. Dengan begitu, ketika duplikat diperiksa, Anda hanya mendapatkan yang berlaku untuk tabel yang difilter. Saya pikir ini mungkin tidak berfungsi untuk nol (atau "" atau apa pun yang Anda pilih sebagai nilai "lain" dalam pernyataan if Anda). Jadi dimungkinkan untuk mendapatkan nilai garis nol di daftar Anda yang disorot sebagai duplikat. Selain itu saya beruntung dengan metode ini.

JFrizz
sumber
0

Saya akan mengusulkan untuk menggunakan rumus berikut (pada kisaran mis. $ A: $ A):

=AND(A1=OFFSET(A1;-1;0);SUBTOTAL(103;OFFSET(A1;-1;0))=1)

Apa yang dilakukan:

Jika keduanya

  1. sel sama dengan yang di atas: A1=OFFSET(A1;-1;0)
  2. sel di atas terlihat: SUBTOTAL(103;OFFSET(A1;-1;0))=1

maka hasilnya Benar sehingga sel adalah duplikat dari sel yang terlihat tepat di atas dan harus mis. berwarna abu-abu.

Sidenote: Menggunakan OFFSET fungsi membuat pemformatan bersyarat tidak akan rusak ketika baris tambahan dimasukkan.

Joma
sumber
-1

Inilah solusi yang baru saja saya gunakan:

Saya Membuat kolom C baru (dan HID yang asli (Kolom B)). Di kolom baru saya menggunakan rumus = SUBTOTAL (9, B2) SUMS mana SATU baris yang Anda minati. Saya kemudian menyalinnya semua baris!

Sekarang, saat Anda memfilter menggunakan filter lanjutan. Nilai-nilai semua NOL di kolom ini kecuali jika terlihat (tidak difilter).

Kemudian, normal = SUMIF () berfungsi seperti jagoan. Hanya saja, jangan sengaja menggunakan kolom tersembunyi untuk menjumlahkan. Jumlahkan seluruh kolom SUBTOTAL () yang baru saja Anda buat.

Captain Kirk
sumber