Soru Şarta Bağlı Otomatik Satır Gizleme ve Gösterme

Katılım
29 Mart 2013
Mesajlar
429
Excel Vers. ve Dili
Office 2016 Professional Türkçe 32 Bit
Altın Üyelik Bitiş Tarihi
14-03-2022
Biz yazılacak kodu başka bir alanda kullanacaz. Bu nedenle çok kısa ve öz olursa çok iyi olacak. Ayrıca butona bağlı olmaması gerekiyor. Excel dosyamızın boyutu çok büyük ve yavaş çalışıyor. Bu nedenle en hızlı nasıl çalışması gerekiyorsa ona göre kodlara ihtiyacım vardı.

Kodlar Sayfa 2 için yazılması gerekiyor. Ayrıca A1 - A7 arasını kontrol edecek sadece. İçinde formül olan hücreleri dolu olarak algılayıp gizlemeyecek.
Değeri 0
yada ""
yada sonucu 0
yada sonucu "" olan A sütunundaki hücrelere ait satırları gizleyecek.

Eğer sonradan FORMÜL SONUCU "" dan farklı ve 0 dan büyükse otomatik satır gösterilecek. Fakat hücrelerde formül olduğu için dolu algılamaması gerekiyor.
Şimdiden teşekkür ederim herkese.
 

Ekli dosyalar

Son düzenleme:

Ömer BARAN

Uzman
Katılım
8 Mart 2011
Mesajlar
13,002
Excel Vers. ve Dili
Office 2013 ( 32 bit ) TÜRKÇE
Altın Üyelik Bitiş Tarihi
(18.03.2020) - Uzman olduğu için tarih geçersiz oldu.
Merhaba.
Bu işlem için; Worksheet_SelectionChange kodu yerine, bir düğme kullanmanızı öneriyorum.
İllede Worksheet_SelectionChange kodu kullanacağım derseniz, bu kod blokunun içerisine Call A_SIFIR_BOS_GIZLE satırı eklemeniz yeterlidir.
Aşağıdaki kod'u deneyiniz.
Rich (BB code):
Sub A_SIFIR_BOS_GIZLE()
Dim s1 As Worksheet, a(), adres As Range
Dim brn, i As Integer
Set s1 = Sheets("Sayfa1")
Application.Calculation = xlCalculationManual: Application.ScreenUpdating = False
s1.Rows.EntireRow.Hidden = False
    a = s1.Range("A1:A" & s1.Cells(Rows.Count, "A").End(3).Row).Value
    For i = 1 To UBound(a)
        If a(i, 1) = 0 Or a(i, 1) = "" Then
            brn = brn + 1
            If brn = 1 Then: Set adres = Cells(i, 1)
            If brn > 1 Then: Set adres = Union(adres, Cells(i, 1))
        End If
    Next i
    If brn > 0 Then adres.EntireRow.Hidden = True
    Application.ScreenUpdating = True: Application.Calculation = xlCalculationAutomatic
    MsgBox "İşlem tamamlandı." & vbLf & brn & _
        " adet satır gizlendi.", vbInformation, "..:: Ömer BARAN ::.."
    Erase a: Set adres = Nothing: Set s1 = Nothing: brn = Empty: i = Empty
End Sub
 
Son düzenleme:

okan32

Altın Üye
Katılım
12 Mayıs 2016
Mesajlar
361
Excel Vers. ve Dili
Ofis 2019- 32 Bit - Türkçe
Altın Üyelik Bitiş Tarihi
16-04-2026
Boş satırları göster için kod nasıl olacak ömer bey
 

Ömer BARAN

Uzman
Katılım
8 Mart 2011
Mesajlar
13,002
Excel Vers. ve Dili
Office 2013 ( 32 bit ) TÜRKÇE
Altın Üyelik Bitiş Tarihi
(18.03.2020) - Uzman olduğu için tarih geçersiz oldu.
Aşağıdaki kod gizli satırların görünmesini sağlar.
Rich (BB code):
Sub GOSTER()
    Sheets("Sayfa1").Rows.EntireRow.Hidden = False
End Sub
 
Son düzenleme:

okan32

Altın Üye
Katılım
12 Mayıs 2016
Mesajlar
361
Excel Vers. ve Dili
Ofis 2019- 32 Bit - Türkçe
Altın Üyelik Bitiş Tarihi
16-04-2026
Teşekkür ederim ömer bey
 
Katılım
29 Mart 2013
Mesajlar
429
Excel Vers. ve Dili
Office 2016 Professional Türkçe 32 Bit
Altın Üyelik Bitiş Tarihi
14-03-2022
Ömer BARAN Hocam çok teşekkür ederim. Örnek dosya ekledim.

Biz yazılacak kodu başka bir alanda kullanacaz. Bu nedenle çok kısa ve öz olursa çok iyi olacak. Ayrıca butona bağlı olmaması gerekiyor. Excel dosyamızın boyutu çok büyük ve yavaş çalışıyor. Bu nedenle en hızlı nasıl çalışması gerekiyorsa ona göre kodlara ihtiyacım vardı.

Kodlar Sayfa 2 için yazılması gerekiyor. Ayrıca A1 - A7 arasını kontrol edecek sadece. İçinde formül olan hücreleri dolu olarak algılayıp gizlemeyecek.
Değeri 0
yada ""
yada sonucu 0
yada sonucu "" olan A sütunundaki hücrelere ait satırları gizleyecek.

Eğer sonradan FORMÜL SONUCU "" dan farklı ve 0 dan büyükse otomatik satır gösterilecek. Fakat hücrelerde formül olduğu için dolu algılamaması gerekiyor.
Eğer mümkünse tekrar bakabilir misiniz?
 

Ekli dosyalar

Son düzenleme:

Ömer BARAN

Uzman
Katılım
8 Mart 2011
Mesajlar
13,002
Excel Vers. ve Dili
Office 2013 ( 32 bit ) TÜRKÇE
Altın Üyelik Bitiş Tarihi
(18.03.2020) - Uzman olduğu için tarih geçersiz oldu.
Gerçek belgeyle aynı yapıda olmayan bir örnek belge yüklediğiniz kanattinde olduğumu belirteyim.
Durumu böyle olan örnek belgelerle ilgili cevap yazmayı pek hazzetmiyorum doğrusu ama yine de açıklama yazayım dedim.

-- Hele hele cevabınızdaki "çok kısa ve öz" ibaresini hiç anlamadım.
-- İlk kod cevabımı okuduğunuzdan ve denediğinizden emin misiniz? (hız olayını belirttiğiniz için denemediğiniz sonucunu çıkartıyorum)
Örneğin konu sayfasına cevap yazan Sayın @okan32 kod'u denemiş ve sonuç almış olmalı ki cevaplar yazmış.

-- Kod'daki sayfa adını değiştirip (yani Sayfa 2 yapıp), Sayfa1'in Worksheet_SelectionChange kod blokunun içerisine de
Call A_SIFIR_BOS_GIZLE şeklinde bir satır yazmanız yeterli olur.

Yani özetle kod'da sayfa adı dışında bir değişikliğe ihtiyaç yok.

SelectionChange kodu önermeme sebebim, sayfadaki her hareketinizin, kodun tekrar ve tekrar çalışması anlamına geldiğini bilin.
Ben olsam Sayfa1'e bir düğme eklerim ve bu düğmeyle kod'u ilişkilendiririm.
.
 
Son düzenleme:

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
41,449
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Alternatif,

Eğer verilerinize başlık satırı ekleme şansınız varsa ekteki dosyayı kullanabilirsiniz.

Kod Sayfa2 aktif olduğunda çalışacaktır. Böylece dosyanız daha performanslı çalışacaktır.
 

Ekli dosyalar

Katılım
29 Mart 2013
Mesajlar
429
Excel Vers. ve Dili
Office 2016 Professional Türkçe 32 Bit
Altın Üyelik Bitiş Tarihi
14-03-2022
Ömer BARAN ve Korhan AYHAN hocam çok teşekkür ederim hepinize. İşimi gördü bu uygulamalar
 

Ömer BARAN

Uzman
Katılım
8 Mart 2011
Mesajlar
13,002
Excel Vers. ve Dili
Office 2013 ( 32 bit ) TÜRKÇE
Altın Üyelik Bitiş Tarihi
(18.03.2020) - Uzman olduğu için tarih geçersiz oldu.
Kolay gelsin.
 
Katılım
29 Mart 2013
Mesajlar
429
Excel Vers. ve Dili
Office 2016 Professional Türkçe 32 Bit
Altın Üyelik Bitiş Tarihi
14-03-2022
2. mesajınızda paylaştığınız kod satırlarından
Application.ScreenUpdating = True: Application.Calculation = xlCalculationAutomatic
satırı ne işe yarıyor, görevi nedir? 5. satırda da kullanmışsınız da.

Erase a: Set adres = Nothing: Set s1 = Nothing: brn = Empty: i = Empty
satırı ne işe yarıyor. Görevi nedir ?

Öğrenmek için soruyorum. Saygılarımla....
 

Ömer BARAN

Uzman
Katılım
8 Mart 2011
Mesajlar
13,002
Excel Vers. ve Dili
Office 2013 ( 32 bit ) TÜRKÇE
Altın Üyelik Bitiş Tarihi
(18.03.2020) - Uzman olduğu için tarih geçersiz oldu.
Application.ScreenUpdating =.... kısmı yapılan işlemin ekranda görüntülenip/görüntülenmeyeceğini,
Application.Calculation=..... kısmı da varsa, sayfadaki formüllerin hesaplama yapmaya devam edip/etmeyeceğini
belirliyor.

-- Hacimli/formül yoğunluğu olan sayfalara yönelik kodlarda; işlemin başlangıcında ekran tazelemeyi ve hesaplamayı geçici olarak durdurmak,
makronun kendisinden beklenen işlemleri tamamlamasının ardından tekrar eski haline getirmek, makroların performansını artırdığı için faydalıdır.

-- Erase .... Set...=Nothing kısımları ise; kodun işlemleri yapmasının ardından, kodun üst kısımlarında tanımlanan veya değer yüklenen değişkenlerin
(a değişkeni bir dizi olup A sütunundaki tüm alanın değerlerini, Set... kısımları ise sayfa adı gibi değişkenleri hafızada -- RAM Bellekte -- tututuyor)
türlerine göre boşaltılması/silinmesi işlemi içindir.
.
 
Katılım
29 Mart 2013
Mesajlar
429
Excel Vers. ve Dili
Office 2016 Professional Türkçe 32 Bit
Altın Üyelik Bitiş Tarihi
14-03-2022
Allah razı olsun hocam sağolun.
Peki hocam o kodları a19 - a219 arasına uygulamak için ne yapmalıyız.
 

Ömer BARAN

Uzman
Katılım
8 Mart 2011
Mesajlar
13,002
Excel Vers. ve Dili
Office 2013 ( 32 bit ) TÜRKÇE
Altın Üyelik Bitiş Tarihi
(18.03.2020) - Uzman olduğu için tarih geçersiz oldu.
200 satırlık veri için dizi değişkeni üzerinden (a değişkeni) işlem yapmaya gerek olmadan,
basit for next döngüsüyle de işlem yapılabilir aslında.

Sorunuzun cevabı: Kod'daki a = s1.Range("A1:A" & s1.Cells(Rows.Count, "A").End(3).Row).Value
kısmını a = s1.Range("A19:A219").Value olarak değiştirmeniz yeterli olur.
.
 
Katılım
29 Mart 2013
Mesajlar
429
Excel Vers. ve Dili
Office 2016 Professional Türkçe 32 Bit
Altın Üyelik Bitiş Tarihi
14-03-2022
Ömer BARAN Hocam belirtilen satır aralıklarından farklı satırları gizledi.

Aşağıdaki kod VERİ sayfasının Private Sub Worksheet_Change(ByVal Target As Range)
olayına yazılacaktır.
Bu kod butonun olduğu sayfada Modül içine yazılırsa, butona basınca 1 sayfada düzgün çalışıyor.
Fakat benim yapmak istediğim;

Başka sayfalar VERİ sayfasından veri çekiyor. VERİ sayfasına girilen verilere göre, diğer sayfalarda satır gizlemesi yapacak.
Bu kodu nasıl düzenleyebiliriz. Ayrıca birden fazla Sayfada satır gizlemesi için ( her sayfada farklı satır aralıkları gizlenecek ) uyarlamam gerekiyor.
Sizden ricam PUANTAJ, TOPLUBORDROMAAŞ, TOPLUBORDROTEDİYE sayfalarına uygulanacak. Yardımcı olacak hocam sayfalardaki satır aralıklarını rastgele yazabilir.

Ben kendi çalışmama uyarlarım. Dosya boyutu büyük olduğu için eklemek istemedim.
Yukarıdaki açıklamaya göre Ayrıca BUTON ile gizlemeyide eklerseniz çok mutlu olurum. Saygılarımla. Şimdiden teşekkür ederim.

Sub YuvarlatılmışDikdörtgen1_Tıklat()
Dim xRg As Range
Application.ScreenUpdating = False
For Each xRg In Range("A1:A20")
If xRg.Value = "" Or xRg.Value = 0 Then
xRg.EntireRow.Hidden = True

ElseIf xRg.Value <> "" Or xRg.Value > 0 Then
xRg.EntireRow.Hidden = False
End If
Next xRg
Application.ScreenUpdating = True
End Sub
 
Son düzenleme:
Katılım
29 Mart 2013
Mesajlar
429
Excel Vers. ve Dili
Office 2016 Professional Türkçe 32 Bit
Altın Üyelik Bitiş Tarihi
14-03-2022
Konu Günceldir
 

Ömer BARAN

Uzman
Katılım
8 Mart 2011
Mesajlar
13,002
Excel Vers. ve Dili
Office 2013 ( 32 bit ) TÜRKÇE
Altın Üyelik Bitiş Tarihi
(18.03.2020) - Uzman olduğu için tarih geçersiz oldu.
Tekrar merhaba.
-- Verdiğim kod blokunu, belgeye ekleyeceğiniz BOŞ BİR MODULE yapıştırın ve kod'daki Set s1 = Sheets("Sayfa1") kısmını
Set s1 = Activesheet olarak değiştirin. İsterseniz kod'un sonundaki MsgBox.... satırını silin.
-- Ardından da satır gizleme/gösterme işlemi yapılacak olan sayfaların tümünün kod bölümüne ayrı ayrı aşağıdaki kod blokunu yapıştırın.
(Alt taraftan işlem yapılacak sayfaların tümü için tek tek, ismine fareyle sağ tıklayıp KOD GÖRÜNTÜLEyi seçtiğinizde açılacak ekranda sağ taraf)
Böylece ilgili sayfalarda A sütunundaki formüllerin sonucunun değişmesine neden olacak veri değişiklikleri yapıp sonucu gözlemleyin.
Rich (BB code):
Private Sub Worksheet_Activate()
    Call A_SIFIR_BOS_GIZLE
End Sub
 
Katılım
29 Mart 2013
Mesajlar
429
Excel Vers. ve Dili
Office 2016 Professional Türkçe 32 Bit
Altın Üyelik Bitiş Tarihi
14-03-2022
Ömer BARAN Hocam
Amaç 15. mesajda belirttiğim sayfalara uygulaması gerekiyor. Uygulanacak sayfalarında gizleme aralığı farklı. Bu yüzden sayfa aralığını size bıraktım. Ben kendime uygularım diye.
 

Ömer BARAN

Uzman
Katılım
8 Mart 2011
Mesajlar
13,002
Excel Vers. ve Dili
Office 2013 ( 32 bit ) TÜRKÇE
Altın Üyelik Bitiş Tarihi
(18.03.2020) - Uzman olduğu için tarih geçersiz oldu.
-- Örnek belgenize göre; Worksheet_Activate kod blokunun sadece Sayfa 2 'nin kod bölümüne yapıştırılması gerekiyor.
Zira Sayfa 1, satır gizleme/gösterme işlemi yapılacak sayfa değil, veri giriş sayfası değil mi?

-- Her sayfada 0/BOŞ kotrolünün yapılacağı sütunlar birbirinden farklı sütunlar mıdır?
-- Eğer öyle ise, sayfa adının kontrolüne ilişkin olarak kod'a ekleme yapılabilir.
-- Sıkça yazdığım ve cevaplarımın altındaki İMZA bölümünde de belirttiğim gibi,
soruların gerçek belgenin özel bilgi içermeyen kopyası şeklinde hazırlanması gerekiyor.
Ki; bu tür uyarlama sorunları yaşanmasın değil mi?
 
Katılım
29 Mart 2013
Mesajlar
429
Excel Vers. ve Dili
Office 2016 Professional Türkçe 32 Bit
Altın Üyelik Bitiş Tarihi
14-03-2022
Haklısınız hocam. Örnek dosya ekledim.
Sadece PUANTAJ, TOPLU BORDRO MAAŞ, TOPLU BORDRO TEDİYE sayfaları gizlenecek.
Gerektiğinde ben başka sayfalara ait gizleme işlemleri için kodlara kolayca ekleme yapabilmeliyim.
Gizleme Sayfalardaki Veri Giriş sayfasından çekilen Sıra No alanına göre yapılıyor.
Amaç kodda belirtilen her sayfa için ayrı ayrı gizlenecek alan yazılmalı.
 

Ekli dosyalar

Son düzenleme:
Üst