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

Katılım
29 Mart 2013
Mesajlar
390
Beğeniler
1
Excel Vers. ve Dili
Office 2016 Professional Türkçe 32 Bit
#1
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:
Katılım
8 Mart 2011
Mesajlar
12,387
Beğeniler
475
Excel Vers. ve Dili
Office 2013 ( 32 bit ) TÜRKÇE
#2
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
Altın Üye
Katılım
12 Mayıs 2016
Mesajlar
110
Beğeniler
5
Excel Vers. ve Dili
2010 türkçe
#3
Boş satırları göster için kod nasıl olacak ömer bey
 
Katılım
8 Mart 2011
Mesajlar
12,387
Beğeniler
475
Excel Vers. ve Dili
Office 2013 ( 32 bit ) TÜRKÇE
#4
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:
Katılım
29 Mart 2013
Mesajlar
390
Beğeniler
1
Excel Vers. ve Dili
Office 2016 Professional Türkçe 32 Bit
#6
Ö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:
Katılım
8 Mart 2011
Mesajlar
12,387
Beğeniler
475
Excel Vers. ve Dili
Office 2013 ( 32 bit ) TÜRKÇE
#7
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

Moderatör
Yönetici
Katılım
15 Mart 2005
Mesajlar
24,008
Beğeniler
183
Excel Vers. ve Dili
OFFICE 2013-2016 PRO TR
#8
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
390
Beğeniler
1
Excel Vers. ve Dili
Office 2016 Professional Türkçe 32 Bit
#9
Ömer BARAN ve Korhan AYHAN hocam çok teşekkür ederim hepinize. İşimi gördü bu uygulamalar
 
Katılım
29 Mart 2013
Mesajlar
390
Beğeniler
1
Excel Vers. ve Dili
Office 2016 Professional Türkçe 32 Bit
#11
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....
 
Katılım
8 Mart 2011
Mesajlar
12,387
Beğeniler
475
Excel Vers. ve Dili
Office 2013 ( 32 bit ) TÜRKÇE
#12
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
390
Beğeniler
1
Excel Vers. ve Dili
Office 2016 Professional Türkçe 32 Bit
#13
Allah razı olsun hocam sağolun.
Peki hocam o kodları a19 - a219 arasına uygulamak için ne yapmalıyız.
 
Katılım
8 Mart 2011
Mesajlar
12,387
Beğeniler
475
Excel Vers. ve Dili
Office 2013 ( 32 bit ) TÜRKÇE
#14
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
390
Beğeniler
1
Excel Vers. ve Dili
Office 2016 Professional Türkçe 32 Bit
#15
Ö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
8 Mart 2011
Mesajlar
12,387
Beğeniler
475
Excel Vers. ve Dili
Office 2013 ( 32 bit ) TÜRKÇE
#17
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
390
Beğeniler
1
Excel Vers. ve Dili
Office 2016 Professional Türkçe 32 Bit
#18
Ö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.
 
Katılım
8 Mart 2011
Mesajlar
12,387
Beğeniler
475
Excel Vers. ve Dili
Office 2013 ( 32 bit ) TÜRKÇE
#19
-- Ö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
390
Beğeniler
1
Excel Vers. ve Dili
Office 2016 Professional Türkçe 32 Bit
#20
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