• DİKKAT

    DOSYA İndirmek/Yüklemek için ÜCRETLİ ALTIN ÜYELİK Gereklidir!
    Altın Üyelik Hakkında Bilgi

Düşeyara Formülünde Fazla Karakter Hatası

Katılım
3 Haziran 2017
Mesajlar
797
Excel Vers. ve Dili
2007, 32
Arkadaşlar,

Aşağıdaki kod ile düşeyara/ma yapıyorum.
Ancak aranacak metinde karakter sayısının fazlalığıyla ilgili bir hata alıyorum.

Düşeyara için bir karakter kısıtlaması var mı?

Kullanndığım kod aşağıdadır. Kırmızı kısımda hata veriyor.
Hata ekranı ektedir.

Yardımcı olabilirseniz çok sevinirim.


Kod:
Private Sub CommandButton3_Click()

If Label1.Caption = "Soru" Then
MsgBox "Soru seçmediniz.", vbInformation, "      Uyarı"
Exit Sub
End If

Sheets("arsiv").Select
Range("B1").Select
ActiveCell.FormulaR1C1 = "=COUNTA(R[1]C[-1]:R[65535]C[-1])"
Range("B1").Select
Selection.NumberFormat = "General"

If Range("B1").Value = 0 Then
MsgBox "Henüz arşivlenmiş sınav yok.", vbInformation, "        Bilgi"

Exit Sub
End If



    
ARANAN = Label1.Caption

Sheets("arsiv").Select

Columns("C:F").Select
Selection.ClearContents
    
Range("E1").Select
ActiveCell.FormulaR1C1 = "=COUNTA(R[1]C[-4]:R[65535]C[-4])"
son = Range("E1").Value

For i = 2 To son + 1
Range("D" & i).Select

[COLOR="Red"]ActiveCell.FormulaR1C1 = "=VLOOKUP(""" & ARANAN & """,RC[-3]:R[65534]C[-2],2,0)"[/COLOR]

Next i

On Error Resume Next

Sheets("arsiv").Select
bed = Range("e1")
For a = 2 To bed
Range("E" & a).Value = Range("D" & a).Value
Next a

ada = Cells(Rows.Count, "E").End(3).Row
Range("E" & ada - 1) = "________________"


Range("E1").Select
Selection.ClearContents
Columns("E:E").Select
ActiveSheet.Range("$E$1:$E$34").RemoveDuplicates Columns:=1, Header:=xlNo

Sheets("AYARLAR").Select
Sheets("arsiv").Select


son = Cells(Rows.Count, "E").End(3).Row
   
Range("F2") = Join(Application.Transpose(Range("E2:E" & son)), Chr(10))

denetim2.Show

End Sub

 
Merhaba.

Öncelikle; kodlarda mümkün olduğunca, select, activate gibi satırlar kullanmamanızı önermeliyim.

Keşke sorunlu haliyle bir örnek belge yükleseydiniz ve kod ile yapmak istediğinizi, örnek belge üzerinden net şekilde ifade etseydiniz.
Örnek belge ekleyecekseniz, varsa kullanılan userform ve kodların dosya içerisinde olmasını sağlayınız.

Label1.Caption boş iken veya Label1.Caption değeri arama sütununda mevcut olmadığında sorun yaşıyorsunuz sanırım.

Sorunlu satırdan hemen önce MsgBox Label1.Caption şeklinde bir satır ekleyip kod'u çalıştırdığınızda Mesaj Kutusunda görüntülenen nedir acaba?
 
Ömer Hocam,

Dosya bir hayli kalabalık; sayfalar, userformlar...
Soru bankasından seçtiğim bir sorunun daha önce hazırlanmış
bir sınav kağıdında kullanılıp kullanılmadığını denetliyorum bu kodla.

Hazırlanan kağıtlardaki sorular tarihe göre arşivleniyor. Bu sayede
denetim yapıyorum.

Ancak uzun sorularda ilk mesajdaki hatayı alıyorum.
Örneğin aşağıdaki soruda hata alıyorum:

A ve B şehrindeki iki araç birbirine doğru hareket ettikten iki saat sonra A ve B şehirleri arasındaki C şehrinde karşılaşıyorlar. A dan hareket eden araç, B den hareket eden araçtan 2 kat fazla yol aldığına göre A daki araç hızını iki katına çıkartırsa kaç saat sonra karşılaşırlar?

Bu soruyu şöyle kısalttığımda sorunsuz çalışıyor:

A ve B şehrindeki iki araç birbirine doğru hareket ettikten iki saat sonra A ve B şehirleri arasındaki C şehrinde karşılaşıyorlar.


MsgBox Label1.Caption satırını kullandığımda soru ne kadar uzun olursa olsun görüntüleniyor.
 
Tekrar merhaba.

Daha evvel hiç rastlamamıştım.
Gerek ARANAN ve gerekse de ARAMA ALANINDAKİ metin 255 karakterden fazla olduğunda,
EĞERSAY, DÜŞEYARA, KAÇINCI işlevleri de HATA veriyor.

Çözüm olarak ARAMA alanının ilk 255 karakterinden oluşan ikinci bir sütun oluşturup ARAMA işlemini orada yapmak,
ARANAN değeri de 255 karakterle sınırlandırmak gerekecek demektir.
.
 
Tekrar merhaba.

Daha evvel hiç rastlamamıştım.
Gerek ARANAN ve gerekse de ARAMA ALANINDAKİ metin 255 karakterden fazla olduğunda,
EĞERSAY, DÜŞEYARA, KAÇINCI işlevleri de HATA veriyor.

Çözüm olarak ARAMA alanının ilk 255 karakterinden oluşan ikinci bir sütun oluşturup ARAMA işlemini orada yapmak,
ARANAN değeri de 255 karakterle sınırlandırmak gerekecek demektir.
.

Ömer Hocam,

İlginiz için teşekkür ederim.
İkinci bir sütun açmak, diğer kodları etkileyecek.
Bunun yerine Soruları bulundukları yerde, "Eğer 255 karakterden fazlaysa, 255'ten sonrasını silen" bir kod yazmak mümkün mü?

Tabi bunun için label1.caption değerine aynı işlem yapılacak, böylece ARANAN değerle eşitlenecek...

Bunun için yardımcı olabilir misiniz?

Sorular "arsiv" isimli sayfada ve A sütununda A2 den itibaren alt alta bulunuyor.

label1.caption için de sorular soru bankasından süzülerek "Suz1" sayfasının C sütunundan alınıyor.
 
Daha önce bende bu problemle karşılaşmıştım.

Sağ olsunlar Ömer Bey ve İdris Bey yardımcı olmuşlardı.

Ömer beyin açıklaması;

Korhan Bey,

Bu sorunla daha önce bende karşılaşmıştım.
Araştırmalarıma göre; Düşeyara,etopla,eğersay ... türündeki fonksiyonlar Excelin sınırları olan; sayı da 15, metin de 255 karakter sınırından sonraki hesaplamalarda duyarlılık probleminden dolayı her zaman doğru sonuç üretmiyor.

Etopla örneğinizde verileri metne çevirdim diyebilirsiniz. Fakat ' simgesi ile metne çevirseniz dahi bunları sayı olarak sınırlarına alıyor. Sayının başına ' değil de herhangi bir harf eklerseniz tam anlamıyla metne çevrildiği için hesaplamayı doğru yapar. Tabi bu seferde metinlerdeki 255 sınırı sorun yaratabilir.

Ben bu sorunumu, topla.çarpım gibi dizi içinde tek tek hesaplama yapan fonksiyon kullanarak çözmüştüm.

İdris beyin önerdiği ekli dosyayı inceleyiniz.
 

Ekli dosyalar

Teşekkür ederim Korhan Hocam.

Ömer Hoca'nın önerisiyle soruların soldan 255 karakteriyle işlem yaptım.
255 karakteri çakışan soru olma ihtimali çok düşük.

Bu yüzden sorun şimdilik çözülmüş gibi görünüyor.

Tekrar teşekkür ederim.
 
Ömer Hocam,

Çok teşekkürler.
Önerinizle hallettim sorunu.
İhtiyaç görüldüğüne göre mesele yok. Sayın AYHAN'ın belirttiği Sayın SERDAR'ın çözümünü de dikkate almak gerek.

Bu arada tekrar belirteyim;
madem VBA ile ilgileniyorsunuz; ....Select, .....Activate kodlarını gerekmedikçe kullanmama konusunun üzerinde durmanızı tavsiye ederim.
.
 
İhtiyaç görüldüğüne göre mesele yok. Sayın AYHAN'ın belirttiği Sayın SERDAR'ın çözümünü de dikkate almak gerek.

Bu arada tekrar belirteyim;
madem VBA ile ilgileniyorsunuz; ....Select, .....Activate kodlarını gerekmedikçe kullanmama konusunun üzerinde durmanızı tavsiye ederim.
.

Ömer Hocam,

Projeyi sonunda bitirdim ama birkaç nokta var ki aşamıyorum.
ThisWorkbook.Save çok geç işlem yapıyor.

Hızlandırmak için sayfa sayısını nerdeyse yarıya düşürdüm, hissedilir bir hızlanma oldu ancak hala bekletiyor.

Bahsettiğiniz Select gibi kodlar da yavaşlama nedeni olabilir mi?
Çünkü aşağıdaki gibi çok sayıda kodum var.

Kod:
Sub metinsil6()

Sheets("6k").Select
Range("e8:e10").Select
Selection.ClearContents

Range("g8:g10").Select
Selection.ClearContents

End Sub

Eğer gecikmenin nedenlerinden ise bu kodlar,
o halde bu kodları nasıl revize edebiliriz?
 
Geri
Üst