[Yardım]  Şarta Bağlı Olarak Sayfa İsimlerini Listelemek

Excel sayfalarında kullandığımız yerleşik fonksiyonlar ya da kendi yazabileceğiniz fonksiyonlar ile ilgili bilmek istedikleriniz, sorunlar ve çözümleri

Şarta Bağlı Olarak Sayfa İsimlerini Listelemek

İleti#1)  düşünceli » 02 Oca 2021 21:14

Mutlu yıllar....

Grp- ile başlayan sayfa isimlerini ayrı ayrı sütunlarda listelemek istiyorum.
Bu iletideki ekleri görmek için gerekli yetkilere sahip değilsiniz.
Kullanıcı avatarı
düşünceli
Siteye Alışmış
 
Kayıt: 04 Ağu 2017 13:11
Meslek: memur
Yaş: 48
İleti: 206
 
Cinsiyet: Bay
Bulunduğunuz İl / Semt: samsun

Cevap: Şarta Bağlı Olarak Sayfa İsimlerini Listelemek

İleti#2)  okutkan » 02 Oca 2021 21:45

Kod: Tümünü seç

Private Sub CommandButton1_Click()

Dim syf As Worksheet
i = 8
    For Each syf In Worksheets
       
       
If Left(syf.Name, 3) = "GRP" Then
Cells(i, 3).Value = syf.Name

    i = i + 1
    End If
    Next syf

End Sub
Excel VBA konusunda profesyonel değilim. Excel VBA öğrenmeye çalışıyorum.
Sorulara cevap vermek için araştırıyorum; araştırdıkça daha fazlasını öğreniyorum.
Kullanıcı avatarı
okutkan
Site Dostu
 
Kayıt: 27 May 2017 02:45
Meslek: pol. mem.
Yaş: 29
İleti: 764
 
Cinsiyet: Bay
Bulunduğunuz İl / Semt: DENİZLİ

Cevap: Şarta Bağlı Olarak Sayfa İsimlerini Listelemek

İleti#3)  okutkan » 02 Oca 2021 21:50

Son sayfadaki tablonun bulunduğu sayfada buton var deneyin.
Bu iletideki ekleri görmek için gerekli yetkilere sahip değilsiniz.
Excel VBA konusunda profesyonel değilim. Excel VBA öğrenmeye çalışıyorum.
Sorulara cevap vermek için araştırıyorum; araştırdıkça daha fazlasını öğreniyorum.
Kullanıcı avatarı
okutkan
Site Dostu
 
Kayıt: 27 May 2017 02:45
Meslek: pol. mem.
Yaş: 29
İleti: 764
 
Cinsiyet: Bay
Bulunduğunuz İl / Semt: DENİZLİ

Cevap: Cevap: Şarta Bağlı Olarak Sayfa İsimlerini Listelemek

İleti#4)  düşünceli » 02 Oca 2021 21:53

okutkan yazdı:
Kod: Tümünü seç

Private Sub CommandButton1_Click()

Dim syf As Worksheet
i = 8
    For Each syf In Worksheets
       
       
If Left(syf.Name, 3) = "GRP" Then
Cells(i, 3).Value = syf.Name

    i = i + 1
    End If
    Next syf

End Sub


Verdiğiniz kod çalışıyor. Teşekkür ederim. Ancak benim yapmak istediğim sıralamayı yapmıyor. Mümkün ise örnek dosya üzerinde değerlendirmenizi rica ederim.
Kullanıcı avatarı
düşünceli
Siteye Alışmış
 
Kayıt: 04 Ağu 2017 13:11
Meslek: memur
Yaş: 48
İleti: 206
 
Cinsiyet: Bay
Bulunduğunuz İl / Semt: samsun

REKLAM
Excel Logo XML Oluşturucu
Logo Object Designer ile Uyarlama

Cevap: Şarta Bağlı Olarak Sayfa İsimlerini Listelemek

İleti#5)  düşünceli » 02 Oca 2021 22:00

Aynı anda cevap yazmışız. Ama yine aynı değişen bir şey yok. Grp-1.... bila grp-5 hangi grup ismiyle başlıyorsa grup ismiyle gösterdiğim sütuna ayrıştırsın..

Örneğin:
Grp-1 "C" sütunu altına... bila Grp-5 "G" sütunu altına gelecek şekilde.
Kullanıcı avatarı
düşünceli
Siteye Alışmış
 
Kayıt: 04 Ağu 2017 13:11
Meslek: memur
Yaş: 48
İleti: 206
 
Cinsiyet: Bay
Bulunduğunuz İl / Semt: samsun

Cevap: Şarta Bağlı Olarak Sayfa İsimlerini Listelemek

İleti#6)  okutkan » 02 Oca 2021 23:01

Belki daha kısa bir kod yazılabilir. Anladığım kadarıyla yazmaya çalıştım.

Kod: Tümünü seç
Private Sub CommandButton1_Click()

Dim syf As Worksheet
i = 8
j = 8
k = 8
l = 8
m = 8

    For Each syf In Worksheets
       
       
If Left(syf.Name, 5) = "GRP-1" Then
Cells(i, 3).Value = syf.Name
    i = i + 1
    End If
   
If Left(syf.Name, 5) = "GRP-2" Then
Cells(j, 4).Value = syf.Name
    j = j + 1
    End If
   
If Left(syf.Name, 5) = "GRP-3" Then
Cells(k, 5).Value = syf.Name
    k = k + 1
    End If

If Left(syf.Name, 5) = "GRP-4" Then
Cells(l, 6).Value = syf.Name
    l = l + 1
    End If
   
If Left(syf.Name, 5) = "GRP-5" Then
Cells(m, 7).Value = syf.Name
    m = m + 1
    End If
    Next syf

End Sub

Bu iletideki ekleri görmek için gerekli yetkilere sahip değilsiniz.
Excel VBA konusunda profesyonel değilim. Excel VBA öğrenmeye çalışıyorum.
Sorulara cevap vermek için araştırıyorum; araştırdıkça daha fazlasını öğreniyorum.
Kullanıcı avatarı
okutkan
Site Dostu
 
Kayıt: 27 May 2017 02:45
Meslek: pol. mem.
Yaş: 29
İleti: 764
 
Cinsiyet: Bay
Bulunduğunuz İl / Semt: DENİZLİ

REKLAM
ETA - Excel Konsolide Raporlama
ETA Excel Personel Entegre Raporu

Cevap: Cevap: Şarta Bağlı Olarak Sayfa İsimlerini Listelemek

İleti#7)  düşünceli » 02 Oca 2021 23:10

düşünceli yazdı:Aynı anda cevap yazmışız. Ama yine aynı değişen bir şey yok. Grp-1.... bila grp-5 hangi grup ismiyle başlıyorsa grup ismiyle gösterdiğim sütuna ayrıştırsın..

Örneğin:
Grp-1 "C" sütunu altına... bila Grp-5 "G" sütunu altına gelecek şekilde.


Kod: Tümünü seç
Dim syf As Worksheet
i = 8
For Each syf In Worksheets
If Left(syf.Name, 5) = "GRP-1" Then
Cells(i, 3).Value = syf.Name
    i = i + 1
    End If
    Next syf
i = 8
For Each syf In Worksheets
If Left(syf.Name, 5) = "GRP-2" Then
Cells(i, 4).Value = syf.Name
    i = i + 1
    End If
    Next syf
i = 8
For Each syf In Worksheets
If Left(syf.Name, 5) = "GRP-3" Then
Cells(i, 5).Value = syf.Name
    i = i + 1
    End If
    Next syf
i = 8
For Each syf In Worksheets
  If Left(syf.Name, 5) = "GRP-4" Then
Cells(i, 6).Value = syf.Name
    i = i + 1
    End If
    Next syf
i = 8
For Each syf In Worksheets
   If Left(syf.Name, 5) = "GRP-5" Then
Cells(i, 7).Value = syf.Name
    i = i + 1
    End If
    Next syf
End Sub



Kodu yukarıda ki şekilde düzenleyerek işlemi gerçekleştirdim. Bu haliyle kullanılabilir. Ancak, benim bu kodun ktf olarak düzenlenmesine ihtiyacım var.
Kullanıcı avatarı
düşünceli
Siteye Alışmış
 
Kayıt: 04 Ağu 2017 13:11
Meslek: memur
Yaş: 48
İleti: 206
 
Cinsiyet: Bay
Bulunduğunuz İl / Semt: samsun

Cevap: Şarta Bağlı Olarak Sayfa İsimlerini Listelemek

İleti#8)  okutkan » 02 Oca 2021 23:20

Malesef o konuda bilgim yok.
Excel VBA konusunda profesyonel değilim. Excel VBA öğrenmeye çalışıyorum.
Sorulara cevap vermek için araştırıyorum; araştırdıkça daha fazlasını öğreniyorum.
Kullanıcı avatarı
okutkan
Site Dostu
 
Kayıt: 27 May 2017 02:45
Meslek: pol. mem.
Yaş: 29
İleti: 764
 
Cinsiyet: Bay
Bulunduğunuz İl / Semt: DENİZLİ

Cevap: Cevap: Şarta Bağlı Olarak Sayfa İsimlerini Listelemek

İleti#9)  düşünceli » 02 Oca 2021 23:46

okutkan yazdı:Malesef o konuda bilgim yok.



Teşekkür ederim.
Kullanıcı avatarı
düşünceli
Siteye Alışmış
 
Kayıt: 04 Ağu 2017 13:11
Meslek: memur
Yaş: 48
İleti: 206
 
Cinsiyet: Bay
Bulunduğunuz İl / Semt: samsun

Cevap: Şarta Bağlı Olarak Sayfa İsimlerini Listelemek

İleti#10)  halily » 02 Oca 2021 23:49

Grp-1....Grp-5 formatında 5 grup tek mi olacak?
sıralama da yıllara göre küçükten büyüğe mi olacak?
Kullanıcı avatarı
halily
Siteye Alışmış
 
Kayıt: 23 May 2019 11:16
Meslek: yok
Yaş: 41
İleti: 337
 
Cinsiyet: Bay
Bulunduğunuz İl / Semt: adana

Cevap: Cevap: Şarta Bağlı Olarak Sayfa İsimlerini Listelemek

İleti#11)  düşünceli » 03 Oca 2021 00:19

halily yazdı:Grp-1....Grp-5 formatında 5 grup tek mi olacak?
sıralama da yıllara göre küçükten büyüğe mi olacak?


Evet dediğiniz gibi olur. Gruplara ayırarak 1 den 12 ye kadar sıralasın yeterli.

GRP-1-2021-1 GRP-2-2021-1
GRP-1-2021-2 GRP-2-2021-2
. .
. .
. .
GRP-1-2021-12 GRP-2-2021-12
Kullanıcı avatarı
düşünceli
Siteye Alışmış
 
Kayıt: 04 Ağu 2017 13:11
Meslek: memur
Yaş: 48
İleti: 206
 
Cinsiyet: Bay
Bulunduğunuz İl / Semt: samsun

Cevap: Cevap: Cevap: Şarta Bağlı Olarak Sayfa İsimlerini Lis

İleti#12)  düşünceli » 03 Oca 2021 00:21

düşünceli yazdı:
halily yazdı:Grp-1....Grp-5 formatında 5 grup tek mi olacak?
sıralama da yıllara göre küçükten büyüğe mi olacak?


Evet dediğiniz gibi olur. Gruplara ayırarak 1 den 12 ye kadar sıralasın yeterli.

GRP-1-2021-1 GRP-2-2021-1
GRP-1-2021-2 GRP-2-2021-2
. .
. .
. .
GRP-1-2021-12 GRP-2-2021-12



5 Grup var.
Kullanıcı avatarı
düşünceli
Siteye Alışmış
 
Kayıt: 04 Ağu 2017 13:11
Meslek: memur
Yaş: 48
İleti: 206
 
Cinsiyet: Bay
Bulunduğunuz İl / Semt: samsun

Cevap: Şarta Bağlı Olarak Sayfa İsimlerini Listelemek

İleti#13)  halily » 03 Oca 2021 12:14

aşağıdaki kodu dener misiniz?
Not: Referanslardan Microsoft Scripting Runtime eklenmeli

Kod: Tümünü seç
Function SiralaDict()
   
    Dim syf As Worksheet '
    Dim syfHdf As Worksheet
    Dim kriter
    Dim dict As Scripting.Dictionary
   
    Set dict = New Scripting.Dictionary
    Set syfHdf = Worksheets("SilHy")
    '________________________
    syfHdf.Cells.ClearContents
    For Each syf In Worksheets
   
    If Left(syf.Name, 3) = "GRP" Then
    kriter = Left(syf.Name, 5)
               If Not dict.Exists(kriter) Then
                  dict.Add kriter, syf.Name
                                 
                Else
                    dict(kriter) = dict.Item(kriter) & "|" & syf.Name
                End If
     End If
     Next syf

With syfHdf
For xKey = 1 To dict.Count
kriter = "GRP-" & xKey
zTxt = dict.Item(kriter)
    If Len(zTxt & "") > 0 Then
    Dim xArr() As String
        xArr = Split(zTxt, "|")
        .Cells(7, xKey + 2) = kriter
        For xStr = LBound(xArr) To UBound(xArr)
            .Cells(8 + xStr, xKey + 2) = xArr(xStr) 'SonDizi
        Next xStr
    End If
Next xKey
End With


var:
    Set dict = Nothing
End Function
Bu iletideki ekleri görmek için gerekli yetkilere sahip değilsiniz.
Kullanıcı avatarı
halily
Siteye Alışmış
 
Kayıt: 23 May 2019 11:16
Meslek: yok
Yaş: 41
İleti: 337
 
Cinsiyet: Bay
Bulunduğunuz İl / Semt: adana

Cevap: Cevap: Şarta Bağlı Olarak Sayfa İsimlerini Listelemek

İleti#14)  düşünceli » 03 Oca 2021 12:31

halily yazdı:aşağıdaki kodu dener misiniz?
Not: Referanslardan Microsoft Scripting Runtime eklenmeli

Kod: Tümünü seç
Function SiralaDict()
   
    Dim syf As Worksheet '
    Dim syfHdf As Worksheet
    Dim kriter
    Dim dict As Scripting.Dictionary
   
    Set dict = New Scripting.Dictionary
    Set syfHdf = Worksheets("SilHy")
    '________________________
    syfHdf.Cells.ClearContents
    For Each syf In Worksheets
   
    If Left(syf.Name, 3) = "GRP" Then
    kriter = Left(syf.Name, 5)
               If Not dict.Exists(kriter) Then
                  dict.Add kriter, syf.Name
                                 
                Else
                    dict(kriter) = dict.Item(kriter) & "|" & syf.Name
                End If
     End If
     Next syf

With syfHdf
For xKey = 1 To dict.Count
kriter = "GRP-" & xKey
zTxt = dict.Item(kriter)
    If Len(zTxt & "") > 0 Then
    Dim xArr() As String
        xArr = Split(zTxt, "|")
        .Cells(7, xKey + 2) = kriter
        For xStr = LBound(xArr) To UBound(xArr)
            .Cells(8 + xStr, xKey + 2) = xArr(xStr) 'SonDizi
        Next xStr
    End If
Next xKey
End With


var:
    Set dict = Nothing
End Function

Teşekkür ederein sayın Halily. Bu ktf nasıl tetikleniyor çözemedim.
Kullanıcı avatarı
düşünceli
Siteye Alışmış
 
Kayıt: 04 Ağu 2017 13:11
Meslek: memur
Yaş: 48
İleti: 206
 
Cinsiyet: Bay
Bulunduğunuz İl / Semt: samsun

Cevap: Şarta Bağlı Olarak Sayfa İsimlerini Listelemek

İleti#15)  halily » 03 Oca 2021 18:47

maalesef sadece hangi sayfaya yazılacaksa o sayfanın Worksheet_Activate() olayına yazılacak
aslında herhangi bir sayfanın Worksheet_Activate() olayına çalışması için
Set syfHdf = Worksheets("SilHy") satırı aşağıdaki satırla değiştirilmeli
Kod: Tümünü seç
    Set syfHdf = ThisWorkbook.ActiveSheet
Kullanıcı avatarı
halily
Siteye Alışmış
 
Kayıt: 23 May 2019 11:16
Meslek: yok
Yaş: 41
İleti: 337
 
Cinsiyet: Bay
Bulunduğunuz İl / Semt: adana

Cevap: Cevap: Şarta Bağlı Olarak Sayfa İsimlerini Listelemek

İleti#16)  düşünceli » 03 Oca 2021 19:04

halily yazdı:maalesef sadece hangi sayfaya yazılacaksa o sayfanın Worksheet_Activate() olayına yazılacak
aslında herhangi bir sayfanın Worksheet_Activate() olayına çalışması için
Set syfHdf = Worksheets("SilHy") satırı aşağıdaki satırla değiştirilmeli
Kod: Tümünü seç
    Set syfHdf = ThisWorkbook.ActiveSheet



Değitirdim. Fakat kodu nasıl kullanmalıyım, çözemedim.

=SiralaDict(.........?)
Kullanıcı avatarı
düşünceli
Siteye Alışmış
 
Kayıt: 04 Ağu 2017 13:11
Meslek: memur
Yaş: 48
İleti: 206
 
Cinsiyet: Bay
Bulunduğunuz İl / Semt: samsun

Cevap: Şarta Bağlı Olarak Sayfa İsimlerini Listelemek

İleti#17)  halily » 03 Oca 2021 19:49

bir önceki mesajımda belirttiğim gibi
bu kod Worksheet_Activate olayında çalışır; yani hücre içine yazınca çalışan bir kod değil
mesela verilerin yazılmasını istediğiniz sayfa Veri adlı bir sayfa olsun siz her bu sayfaya geldiğinizde bu kod çalışıp sayfayı günceller. aşağıdaki kod VERI sayfasının Worksheet_Activate olayına ait
Kod: Tümünü seç
Private Sub Worksheet_Activate()
SiralaDict
End Sub
Kullanıcı avatarı
halily
Siteye Alışmış
 
Kayıt: 23 May 2019 11:16
Meslek: yok
Yaş: 41
İleti: 337
 
Cinsiyet: Bay
Bulunduğunuz İl / Semt: adana

Cevap: Cevap: Şarta Bağlı Olarak Sayfa İsimlerini Listelemek

İleti#18)  düşünceli » 03 Oca 2021 20:30

halily yazdı:bir önceki mesajımda belirttiğim gibi
bu kod Worksheet_Activate olayında çalışır; yani hücre içine yazınca çalışan bir kod değil
mesela verilerin yazılmasını istediğiniz sayfa Veri adlı bir sayfa olsun siz her bu sayfaya geldiğinizde bu kod çalışıp sayfayı günceller. aşağıdaki kod VERI sayfasının Worksheet_Activate olayına ait
Kod: Tümünü seç
Private Sub Worksheet_Activate()
SiralaDict
End Sub


Teşekkür ederim. Ellerinize sağlık. Çok kullanışlı olmasada çözümsüzlükten iyidir. Bu haliyle kullanmaya başlayacağım. Bel ki hücre içinden çalışan bir KTF olarak düzenlenir diye konuyu takip etmeye devam edeceğim. İyi çalışmalar dilerim. Dosya yeni haliyle ektedir.
Bu iletideki ekleri görmek için gerekli yetkilere sahip değilsiniz.
Kullanıcı avatarı
düşünceli
Siteye Alışmış
 
Kayıt: 04 Ağu 2017 13:11
Meslek: memur
Yaş: 48
İleti: 206
 
Cinsiyet: Bay
Bulunduğunuz İl / Semt: samsun

Cevap: Şarta Bağlı Olarak Sayfa İsimlerini Listelemek

İleti#19)  Erkan Akayay » 04 Oca 2021 08:26

KTF ile şöyle bir çözüm yaptım. Dizi formülüdür. C8:C19 arasını seçip Formülü yazın. CTRL+SHIFT+ENTER tuşlarına basın. Sonra sağa doğru sürükleyip kopyalayabilirsiniz.

Kod: Tümünü seç
Function Grupla(alan As Range) As Variant()
Application.Volatile
Set liste = CreateObject("System.Collections.ArrayList")
For Each sayfa In Worksheets
   If Left(sayfa.Name, 3) = "GRP" Then
      liste.Add sayfa.Name
   End If
Next
liste.Sort
dizim = Filter(liste.toarray, alan.Value)
Dim dizi(12, 0)
For i = LBound(dizim) To UBound(dizim)
dizi(i, 0) = dizim(i)
Next
Grupla = dizi
End Function
Bu iletideki ekleri görmek için gerekli yetkilere sahip değilsiniz.
Sorularınızı düzgün bir Türkçe ile detay vererek ve örnek dosyayla destekleyerek sorunuz.
Örnek dosyalarınızda Application.Visible veya hide gibi sayfa gizlemelerini iptal ediniz.
Alıntı ile gereksiz şişirilen başlıkları takip edemiyorum. Lütfen Cevap Yaz butonunu kullanın.
Kullanıcı avatarı
Erkan Akayay
Site Dostu
 
Kayıt: 20 Ağu 2008 11:59
Konum: YALOVA
Meslek: Bilgi İşlem
Yaş: 50
İleti: 4218
 
Cinsiyet: Bay
Bulunduğunuz İl / Semt: Yalova

Cevap: Cevap: Şarta Bağlı Olarak Sayfa İsimlerini Listelemek

İleti#20)  düşünceli » 06 Oca 2021 23:02

Erkan Akayay yazdı:KTF ile şöyle bir çözüm yaptım. Dizi formülüdür. C8:C19 arasını seçip Formülü yazın. CTRL+SHIFT+ENTER tuşlarına basın. Sonra sağa doğru sürükleyip kopyalayabilirsiniz.

Kod: Tümünü seç
Function Grupla(alan As Range) As Variant()
Application.Volatile
Set liste = CreateObject("System.Collections.ArrayList")
For Each sayfa In Worksheets
   If Left(sayfa.Name, 3) = "GRP" Then
      liste.Add sayfa.Name
   End If
Next
liste.Sort
dizim = Filter(liste.toarray, alan.Value)
Dim dizi(12, 0)
For i = LBound(dizim) To UBound(dizim)
dizi(i, 0) = dizim(i)
Next
Grupla = dizi
End Function


Teşekkür ederim Erkan Bey. Değer hatası veriyor.
Kullanıcı avatarı
düşünceli
Siteye Alışmış
 
Kayıt: 04 Ağu 2017 13:11
Meslek: memur
Yaş: 48
İleti: 206
 
Cinsiyet: Bay
Bulunduğunuz İl / Semt: samsun


Forum Kullanıcı Tanımlı Fonksiyonlar ( KTF )

Online Kullanıcılar

Bu forumu görüntüleyenler: Kayıtlı kullanıcı yok ve 0 misafir

Bumerang - Yazarkafe