Soru Grafikle ilgili makro hatası

Ömer BARAN

Uzman
Katılım
8 Mart 2011
Mesajlar
12,997
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.
Aynı soru için açtığınız diğer konu sayfasında ÇÖZÜME ULAŞILMIŞ ancak;
dosya yapınız ile ilgili birşeyler söylemek istedim.
Açıkçası; belgenizin tasarımı bana oldukça karışık ve kullanması biraz zahmetli gibi geldi.
Belgenize veri girişi yapılırken, herbir oyuncu için 22'şr sütun olmak üzere 333 sütunda işlem yapılması gerekiyor.
Bundan sonra da girişi yapılan bu değerler üzerinden istatistiki sonuçlar elde edilerek grafiklere aktarma işlemine geçiliyor.

Ben şöyle düşündüm; veri girişi tek bir sayfada ve herbir maç için (ANKARA,KASTAMONU gibi),
oyuncu sayısı kadar satıra aynı maç ismini (maç isimleri tek bir sütunda), bunların yanındaki sütuna oyuncu adları yazılıp,
oynadı/oynamadı, attığı sayı, ribaund sayısı vs herbir veri türü de oyuncuların karşılarında sütunlara (sanıyorum 13 sütun gerekiyor)
sayısal veriler yazılırsa (böylece MAÇ ADI,OYUNCU, ..... diğer sayısal veri alanları olmak üzere 15 sütun yetiyor)
bir maça ait tüm veri girişi 15 satır ve 15 sütuna yazılabilir gibi görünüyor.
Bir sonraki maç verileri ise mevcut verilerin altına yazılacak şekilde aşağı doğru işlem yapılabilir.

Ekteki belgede bir şeyler yaptım bakarsınız.

Eklediğim belgedeki;
-- OYUNCU sayfasında, oyuncunun adı, açılır listeden seçilip, o oyuncuya ait tüm veriler bir tabloya alınabilir,
-- TÜM TAKIM/TÜM MAÇLAR için de benzer bir özet sayfası oluşturulup burada da istatistik hesaplamalar, sıralamalar,
grafiklerde kullancağınız özet bilgiler elde edilebilir diye düşünüyorum.
Tabi belgenin tasarımı size ait ve tasarımla epey uğraşarak oldukça mesafe kat etmişsiniz, tasarımı değiştirmek için yine uğraşmak gerekecektir ve tercih sizin elbette.
Ancak önerdiğim yapının daha kullanışlı olacağını düşünüyorum.
Zira tüm işlemler az sayıda sayfada toplanabilecek durumda olur bence.
Kolay gelsin.
.
 

Ekli dosyalar

klop01

Altın Üye
Katılım
19 Aralık 2016
Mesajlar
638
Excel Vers. ve Dili
2021 Türkçe 64 Bit
Altın Üyelik Bitiş Tarihi
07-02-2028
Sayın @Ömer BARAN,
Öncelikle zaman ayırıp öneride bulunduğunuz için teşekkürlerim sunarım. Sağ olun.
Dediğiniz gibi bu konudaki sorun, soruna kaynaklık eden kod yerine alternatif bir kod ve yöntemle çözülmüştü.
Gönderdiğiniz dosyayı inceledim.
Özellikle Veri Giriş Sayfası için öneriniz dikkatimi çekti. Tek bir tabloda daha kolay giriş ve toplu bakış oluyor. Bununla birlikte sporcuların verilerini de açılır listeden almak alternatifini de göz ardı etmemeliyim.

Buna rağmen bazı sebeplerden dolayı bu önerilerin bana göre sorun oluşturacağı gözüküyor.
Bu takım belediye adına maç yapan, oyuncuları ise bizim okuldan olan bir takım. http://www.duzce.bel.tr/detay.asp?id=35977
Arkadaşın dediğine göre takımın normal oyuncu sayısı kadrosu 12 kişiymiş. Okul olduğu için kadroyu biraz daha geniş(15 kişi) tutup diğer öğrencilere de şans vermek, çalışmalarını sağlamak amaçlanmış. Bu durum zaman içerisinde değişiklik gösterebilecek nitelikte. Yani bazı yıllar 14, bazı yıllar 13 gibi farklı sporcu sayısını içerebilecek durumda.


Hâl bu iken
1. MAÇLAR sayfasındaki hesaplamalar belirsizlik içerisinde kalır. İmkânsızlaşabilir.
2. Sporcuların toplam sonuçlarının hesaplaması zora girer ya da yapılamaz.
3. Buna benzer diğer sorunlar.
Belki bunlar uğraşılarak -bir ihtimal- usta ellerle çözüme kavuşturulabilir ama belge ile yeniden uğraşmak hayli zaman alır. En iyisi mevcut şekli ile devam etmek diye düşünüyorum.
Sporcu toplam sonuçlarını açılır listeden almak uygulanabilir. Burada MAÇLAR sayfasında ikinci tablodaki sporcu adlarına tıklayarak hızla sonucu görebiliyoruz. Her sporcunu sayfasında diğerleri için de buton var. Bu şekil daha pratik gibi duruyor. Listeyi aç birini seç yerine direkt tıkla şeklinde.


Soru başlığı ile alakalı değil ama yapılabilme ihtimali varsa sizden bir ricam olacak.
Ekteki belgede VERİ GİRİŞİ sayfasında her sporcu için belirlenen alanın sonuna mavi renkli şekil koydum.
Şekle tıklanınca sonraki ilk sporcu için veri yazılan alanı en sola getirebilir mi? Yani şeklin sağındaki ilk sporcuyu en sola, maç adlarının hemen dibine.
Sayfada bölmeleri dondur var. Soldaki sporcu/lar şekle tıklandıkça bölmeleri dondurdan dolayı sola kayıp gözükmeyecek.

http://s7.dosya.tc/server11/w8hltj/son_dosya.rar.html
 

Ömer BARAN

Uzman
Katılım
8 Mart 2011
Mesajlar
12,997
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.
Belgenize bakmadım ama isteğiniz benim eklediğim belgede yer alan MAÇ EKLEME düğmesindeki gibi bir şey mi?
Çünkü eklediğim belgede yeni maç eklendiğinde, o maçın ilk satırı. sayfanın en üst solunda olacak şekilde konumlandırılıyor.
MAÇ EKLE düğmesini kullanarak gnderdiğim belgede denemeler yaparsanız daha iyi anlaşılır.

Belirttiğiniz farklı öğrenci isimlerinin olması, kadro sayısından farklı sayıda aday öğrence olması durumu mesele değil ki;
maç eklendiğinde eklenecek satır sayısı belli (maça çıkacak as ve yedek kadro sayısı sabittir sanırım), eklenecek tek şey oyuncu izimlerinin açılır listeden seçilmesini sağlamak sanırım ve o da sorun olmaz ekleme yapılabilir.
.
 

Ömer BARAN

Uzman
Katılım
8 Mart 2011
Mesajlar
12,997
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.

Önce bundan önceki son mesajımı okuyunuz.
Son cevabınızdaki isteğinizle ilgili olarak şöyle bir çözüm önerisinde bulunayım;
-- VERİ GİRİŞİ sayfasında ANA SAYFA ve AÇIKLAMALAR düğmelerinin yüksekliklerini biraz azaltıp,
aynı alana bir adet sağa bakan OK işareti ve bir adet de sola bakan OK işareti şekli ekleyin.
-- Alt ataraftan VERİ GİRİŞİ sayfasının adına fareyle sağ tıklayıp KOD GÖRÜNTÜLEyi seçin,
-- Açılacak VBA ekranında sağdaki BOŞ alana aşağıdaki kodları yapıştırın (kod sayfadaki A1 hücresini kullanıyor),
-- Eklediğiniz SAĞA bakan OK işaretine sağ tıklayıp MAKRO ATAyı seçin, açılan küçük ekranda SONRAKI makro adını seçip işlemi onaylayın,
-- Eklediğiniz SOLA bakan OK işaretine sağ tıklayıp MAKRO ATAyı seçin, açılan küçük ekranda ONCEKI makro adını seçip işlemi onaylayın.

C sütunu sürekli görünür durumda olduğuna göre; artık bu OK tuşlarını kullanarak, ÖNCEKİ/SONRAKİ oyuncu alanları arasında gezinti yapabilirsiniz.
.
Rich (BB code):
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Column < 4 Or Target.Column > Cells(3, Columns.Count).End(xlToLeft).Column Then Exit Sub
[A1] = Target.Column
End Sub

Sub SONRAKI()
b = (Int(([A1] - 3) / 22) + 1) * 22 + 4
If b > Cells(3, Columns.Count).End(xlToLeft).Column Then
    MsgBox "Son öğrenciye ait alana geldiniz, sağa gidemezsiniz!", vbCritical
    Exit Sub
Else
    Application.Goto Cells(2, b), Scroll = False
End If
End Sub

Sub ONCEKI()
a = Int(([A1] - 3) / 22) - 1
If a < 0 Then
    MsgBox "İlk öğrenciye ait alana geldiniz, sola gidemezsiniz!", vbCritical
    Exit Sub
Else
    b = a * 22 + 4
    Application.Goto Cells(2, b), Scroll = False
End If
End Sub
 
Son düzenleme:

klop01

Altın Üye
Katılım
19 Aralık 2016
Mesajlar
638
Excel Vers. ve Dili
2021 Türkçe 64 Bit
Altın Üyelik Bitiş Tarihi
07-02-2028
İyi Geceler,
4 numaralı iletiyi okudum. 3 numaralı iletimdeki belirttiğim şeylerin yapılabileceğini vurgulamışsınız.
Şöyle bir durum var:
15 sporcuya göre hareket ettiğimizi düşünelim.
Belgenizdeki BARAN sayfasına bir de verimlilik hesaplaması yapan sütun koyalım.
MAÇLAR sayfasında D11 hücresindeki hesaplamayı şöyle yapmak lazım:
Sporcunun farklı maçlardaki verilerini 15 satır ara ile alan bir formül kurduk. Verim ort. ona göre hesapladık. Buraya kadar doğru.
Eğer sonraki sezon kadrodaki sayı değişmişse, mesela 13 olmuşsa yukarıda kurduğumuz formül hatalı sonuç verir.
Bu durum da bir şekilde çözülse tüm dosyayı gözden geçirmek gerekecek. Zor olur.
Yukarıdaki bilgileri çözüm isteği için değil bilgi amaçlı yazdım.
BİLGİ: Takımı çalıştıran arkadaş sporcu sayısını sabit tutmayıp en fazla 15'e kadar çıkabilecek durumda değişken tutuyor.

5. iletinizdeki kodlar mükemmel çalışıyor. İstediğim gibi olmuşlar. Teşekkür ederim.
Zahmet ve olmazsa yine aynı sayfada tıklandığında ilk sporcuya ve tıklandığında son sporcuya giden iki ayrı kod yazabilir misiniz?
 

Ömer BARAN

Uzman
Katılım
8 Mart 2011
Mesajlar
12,997
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.
Son cevapta belirttiğiniz hususlar, halledilebilir şeyler gibi geliyor bana.
Tercih sizin.

İsteğiniz için aşağıdaki kodlar işinizi görür.
Rich (BB code):
Sub ILK_OYUNCU()
    Application.Goto [D2], Scroll = False
End Sub

Sub SON_OYUNCU()
son = Cells(3, Columns.Count).End(xlToLeft).Column - 20
    Application.Goto Cells(2, son), Scroll = False
End Sub
 

klop01

Altın Üye
Katılım
19 Aralık 2016
Mesajlar
638
Excel Vers. ve Dili
2021 Türkçe 64 Bit
Altın Üyelik Bitiş Tarihi
07-02-2028

Ömer BARAN

Uzman
Katılım
8 Mart 2011
Mesajlar
12,997
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.
Eyvallah.
Bir önceki verdiğim kodlarda son oyuncu sütunu için 333 sayısı kullanılmış idi.
Yeni oyuncu ilave edilmesi veya oyuncu silinmesi durumunda son oyuncu sütununun tespiti yanlış olacaktır.
Son cevabımdaki kod'da olduğu gibi son oyuncu sütununun bulunması işleminin güncellenmesi gerekir.
Birazdan bakıp bir önceki cevabımdaki son oyuncu ile ilgili durumu düzeltip mesaj yazarak iletirim.
 

Ömer BARAN

Uzman
Katılım
8 Mart 2011
Mesajlar
12,997
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.
5 no'lu cevapta yer alan SONRAKI isimli kod'da güncelleme yaptım (kırmızı renklendirdiğim kısım).
Sayfayı yenileyerek yeni halini kullanabilirsiniz.
 

klop01

Altın Üye
Katılım
19 Aralık 2016
Mesajlar
638
Excel Vers. ve Dili
2021 Türkçe 64 Bit
Altın Üyelik Bitiş Tarihi
07-02-2028
Ömer Bey,
333 sayısından ötürü Sonraki sporcu kodunda değişiklik yapmışsınız. Bu 333 sayısı aşağıdaki kodda duruyor. Bu gözden kaçan hatalı bir durum mu, yoksa böyle yazılması normal mi?

Kod:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Column < 4 Or Target.Column > 333 Then Exit Sub
[A1] = Target.Column
End Sub
 

Ömer BARAN

Uzman
Katılım
8 Mart 2011
Mesajlar
12,997
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.
Evet gözden kaçmış, sadece SONRAKI isimli kod blokunda düzeltmişim,
şimdi Worksheet_SelectionChange kodu'nda da değişiklik yaptım.
333 yerine Cells(3, Columns.Count).End(xlToLeft).Column yazılmalıdır.
Önceki cevabı tekrar kontrol edebilirsiniz.
 

klop01

Altın Üye
Katılım
19 Aralık 2016
Mesajlar
638
Excel Vers. ve Dili
2021 Türkçe 64 Bit
Altın Üyelik Bitiş Tarihi
07-02-2028
Teşekkürler.
Sağ olun.
 

Ömer BARAN

Uzman
Katılım
8 Mart 2011
Mesajlar
12,997
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.
 

klop01

Altın Üye
Katılım
19 Aralık 2016
Mesajlar
638
Excel Vers. ve Dili
2021 Türkçe 64 Bit
Altın Üyelik Bitiş Tarihi
07-02-2028
Ömer Bey,
Geçen hafta yazmış olduğunuz kodlarda o zaman dikkatimden kaçan sıkıntılı bir durum var.
Ekteki belgenin VERİ GİRİŞİ sayfasının kod penceresindeki kodları butonlara bağladım. Tıkladığımda işlemi yapıyor.
Bu kodlar işlemi yaparken her tıkta sayfanın başına götürüyor kullanıcıyı.
Örnek: 30. maç için veri giriyorum. Birinci sporcunun girişini yapıp SONRAKİ butonuna tıklıyorum kod beni sayfanın en başına 1. maçın olduğu satıra götürüyor. Her seferinde sayfayı el ile aşağı almak zorunluluğu doğuyor.
Bahsettiğim durum aşağıda son şekli ekli 4 kodda da geçerli.
Bu kodlar kullanıcının bulunduğu satırı değiştirmeden işlemi yapabilir hâle getirilebilir mi?
http://s7.dosya.tc/server11/ax583r/20_KASIM.zip.html


Kod:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Column < 4 Or Target.Column > Cells(3, Columns.Count).End(xlToLeft).Column Then Exit Sub
[A1] = Target.Column
End Sub
Sub SONRAKİ_OYUNCU()
b = (Int(([A1] - 3) / 22) + 1) * 22 + 4
If b > Cells(3, Columns.Count).End(xlToLeft).Column Then
    MsgBox "Son sporcuya ait alana geldiniz, sağa gidemezsiniz!", vbCritical
    Exit Sub
Else
    Application.Goto Cells(2, b), Scroll = False
End If
End Sub
Sub ÖNCEKİ_OYUNCU()
a = Int(([A1] - 3) / 22) - 1
If a < 0 Then
    MsgBox "İlk sporcuya ait alana geldiniz, sola gidemezsiniz!", vbCritical
    Exit Sub
Else
    b = a * 22 + 4
    Application.Goto Cells(2, b), Scroll = False
End If
End Sub
Sub İLK_OYUNCU()
    Application.Goto [D2], Scroll = False
End Sub
Sub SON_OYUNCU()
son = Cells(3, Columns.Count).End(xlToLeft).Column - 20
    Application.Goto Cells(2, son), Scroll = False
End Sub
 

Ömer BARAN

Uzman
Katılım
8 Mart 2011
Mesajlar
12,997
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.
Belgenizi açmadım.
Tek tek, Application.Goto.... şeklindeki satırlardaki Cells(2,....) kısmındaki 2 sayısı satır numarası oluyor.
Bu 2 sayılarını Activecell.Row olarak değiştirerek deneyiniz.
 

klop01

Altın Üye
Katılım
19 Aralık 2016
Mesajlar
638
Excel Vers. ve Dili
2021 Türkçe 64 Bit
Altın Üyelik Bitiş Tarihi
07-02-2028
Diğerleri oldu fakat aşağıdaki diğerlerinden farklı yapıda olduğundan bir şey yapamadım.
Bunu nasıl yapmalıyım?
Kod:
Sub İLK_OYUNCU()
    Application.Goto [D2], Scroll = False
End Sub
 

Ömer BARAN

Uzman
Katılım
8 Mart 2011
Mesajlar
12,997
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.
[D2] yerine; Cells(Activecell.Row, "D") veya Cells(Activecell.Row, 4) yazarak deneyin.
 

klop01

Altın Üye
Katılım
19 Aralık 2016
Mesajlar
638
Excel Vers. ve Dili
2021 Türkçe 64 Bit
Altın Üyelik Bitiş Tarihi
07-02-2028
HATAL.png

İkisinde de hata veriyor.
 

Ömer BARAN

Uzman
Katılım
8 Mart 2011
Mesajlar
12,997
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.
Ben bir hata göremiyorum doğrusu. Yapılması istenileni de; varsa farklı seçeneklere göre net ifade ediniz.
İsterseniz örnek belge ekleyin, bakayım. Kod'u tetikleyen nesne veya işlemi net ifade ediniz.
.
 
Üst