1 sayfadan 1. sayfa

Şarta Bağlı Olarak Sayfa İsimlerini Listelemek

İletiTarih: 02 Oca 2021 21:14
düşünceli
Mutlu yıllar....

Grp- ile başlayan sayfa isimlerini ayrı ayrı sütunlarda listelemek istiyorum.

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

İletiTarih: 02 Oca 2021 21:45
okutkan
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

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

İletiTarih: 02 Oca 2021 21:50
okutkan
Son sayfadaki tablonun bulunduğu sayfada buton var deneyin.

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

İletiTarih: 02 Oca 2021 21:53
düşünceli
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.

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

İletiTarih: 02 Oca 2021 22:00
düşünceli
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.

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

İletiTarih: 02 Oca 2021 23:01
okutkan
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


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

İletiTarih: 02 Oca 2021 23:10
düşünceli
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.

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

İletiTarih: 02 Oca 2021 23:20
okutkan
Malesef o konuda bilgim yok.

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

İletiTarih: 02 Oca 2021 23:46
düşünceli
okutkan yazdı:Malesef o konuda bilgim yok.



Teşekkür ederim.

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

İletiTarih: 02 Oca 2021 23:49
halily
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?

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

İletiTarih: 03 Oca 2021 00:19
düşünceli
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

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

İletiTarih: 03 Oca 2021 00:21
düşünceli
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.

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

İletiTarih: 03 Oca 2021 12:14
halily
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

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

İletiTarih: 03 Oca 2021 12:31
düşünceli
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.

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

İletiTarih: 03 Oca 2021 18:47
halily
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

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

İletiTarih: 03 Oca 2021 19:04
düşünceli
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(.........?)

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

İletiTarih: 03 Oca 2021 19:49
halily
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

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

İletiTarih: 03 Oca 2021 20:30
düşünceli
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.

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

İletiTarih: 04 Oca 2021 08:26
Erkan Akayay
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

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

İletiTarih: 06 Oca 2021 23:02
düşünceli
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.