Sanal Range Oluşturmak

Katılım
5 Ocak 2009
Mesajlar
1,586
Excel Vers. ve Dili
2003 Türkçe
Selam,
Sanal Range nasıl yapabiliriz? dizi ile yapmak istedim. Ancak, Range gibi kullanamadım. Örnek dosyamdaki F sütunu sanal range olarak kullanmak istiyorum.


Kod:
If WorksheetFunction.CountIf(insört.Range("F2:F" & i), insört.Range("F" & i)) = 1 Then
yerine
Kod:
If WorksheetFunction.CountIf([COLOR="Red"]sanal.Range(cells(1, 1), cells(i, 1)), sanal.Range(i,1)[/COLOR]) = 1 Then
benzeri şekilde kullanmak gibi.

Örnek dosya ektedir.
Kodlar Module1'dedir.
 

Ekli dosyalar

Zeki Gürsoy

Uzman
Uzman
Katılım
31 Aralık 2005
Mesajlar
4,386
Excel Vers. ve Dili
Office 365 (64 bit) - Türkçe
Merhaba,

"sanal" isminde bir değişken tanımlayıp sayfayı "Set" ile atama yaparsanız istediğiniz olur.

Örneğin:

Kod:
Set sanal = Sheets("insört")
şeklinde.
 
Katılım
5 Ocak 2009
Mesajlar
1,586
Excel Vers. ve Dili
2003 Türkçe
Merhaba,

"sanal" isminde bir değişken tanımlayıp sayfayı "Set" ile atama yaparsanız istediğiniz olur.

Örneğin:

Kod:
Set sanal = Sheets("insört")
şeklinde.
Selam,
Çok Teşekkür ederim. Ancak, mevcut herhangi bir sayfaya veri yazılmadan yapabilir miyiz?
İyi çalışmalar.
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
43,023
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Selamlar,

Sayfaya veri yazmadan ifadesi ile sanırım yardımcı sütun kullanmamayı kast ediyorsunuz. Yaptığınız işlem B-C-D sütunlarındaki benzersiz kayıtları listelemek. Bunun için VERİ-FİLTRE-GELİŞMİŞ FİLTRE menüsünü kullanabilirsiniz.

Aşağıdaki kod ile yeni liste K-L-M sütunlarına aktarılır.

Kod:
Option Explicit
 
Sub BENZERSİZ_SÜZ()
    Columns("K:M").ClearContents
    Columns("B:D").AdvancedFilter Action:=xlFilterCopy, CopyToRange:=Range("K1"), Unique:=True
End Sub
 
Katılım
5 Ocak 2009
Mesajlar
1,586
Excel Vers. ve Dili
2003 Türkçe
Selamlar,

Sayfaya veri yazmadan ifadesi ile sanırım yardımcı sütun kullanmamayı kast ediyorsunuz. Yaptığınız işlem B-C-D sütunlarındaki benzersiz kayıtları listelemek. Bunun için VERİ-FİLTRE-GELİŞMİŞ FİLTRE menüsünü kullanabilirsiniz.

Aşağıdaki kod ile yeni liste K-L-M sütunlarına aktarılır.

Kod:
Option Explicit
 
Sub BENZERSİZ_SÜZ()
    Columns("K:M").ClearContents
    Columns("B:D").AdvancedFilter Action:=xlFilterCopy, CopyToRange:=Range("K1"), Unique:=True
End Sub
Selam Sayın Korhan Ayhan Hocam,

Çok güzel ve kullanışlı bir çözüm. Ellerinize Sağlık. Bir çok yerde bunu kullanacağım. Çok işimi görecek.

Ancak benim asıl sorum bu değildi. sorumu daha iyi anlatabilmek için örnek olarak sormuştum. Tam anlatamadığım için kusura bakmayın. Bana bir çok yerde ancak "Sanal Range" diye tanımlayabildiğim birşey lazım oluyor. Olup olmadığınıda bilmiyorum.
şöyle bir örnekle anlatayım;

Mesela örnek dosyamdaki verileri F sütunu yerine bir dizi içine yazabiliyorum. Ancak diziyi Range gibi kullanamıyorum.

sayfadaki belirli hücrelerdeki veriler ile dizi gibi birşey oluşturup, bunları sayfa hücreleri kullanmadan range gibi kullanmak istiyorum.

örnek:
Kod:
WorksheetFunction.CountIf(dizim, "örnek")
örnek:
Kod:
WorksheetFunction.CountIf(dizim, dizim(1,i))
örnek:
Kod:
WorksheetFunction.sum(dizim)
v.s.

script.dictionary nesnesi tam olarak ne işe yarar bilmiyorum. benim sorumun cevabı olabilir mi?

İyi çalışmalar.
 

leumruk

Uzman
Uzman
Katılım
15 Nisan 2007
Mesajlar
3,472
Excel Vers. ve Dili
Office 2010 & 2013 tr
Merhaba,
İstediğiniz aralığı set olarak tanımlarsanız. İstediğiniz eylemi gerçekleştirebilirsiniz.
Örnek:
Kod:
Sub dene()
Set dizi = Range("a1:a20")
Say = WorksheetFunction.CountIf(dizi, "A")
MsgBox Say
End Sub
 
Katılım
5 Ocak 2009
Mesajlar
1,586
Excel Vers. ve Dili
2003 Türkçe
Merhaba,
İstediğiniz aralığı set olarak tanımlarsanız. İstediğiniz eylemi gerçekleştirebilirsiniz.
Örnek:
Kod:
Sub dene()
Set dizi = Range("a1:a20")
Say = WorksheetFunction.CountIf(dizi, "A")
MsgBox Say
End Sub
Selam İlginize çok teşekkür ederim. Ancak, ben sorumu tam anlatamadım sanırım. Sizi cevabınızda zaten Range("a1:a20") var olduğu için çözüm kolay oluyor.
Oysaki ben çeşitli kodlarla bir dizi oluşturuyorum. oluşturduğum bu diziyi herhangi bir hücreye aktarmadan farklı kodlar içinde kullanmak istiyorum. sorum ilk mesajlara bakıldığında anlaşılacaktır.
İyi çalışmalar.
 

leumruk

Uzman
Uzman
Katılım
15 Nisan 2007
Mesajlar
3,472
Excel Vers. ve Dili
Office 2010 & 2013 tr
Merhaba,
İsteğinizi anlıyorum. Dizi içerisinde bulunan verilerde worksheetfunction işlemlerini gerçekleştirmek istiyorsunuz. Sayfadaki herhangi bir aralıkta yapabildiğiniz işlemleri dizide yapmak istiyorsunuz. a1:a20 aralığını verileri alacağı yer olarak kullandım. Boş bir aralığı Set tanımı ile alıp, içini bir döngüyle doldurarak da aynı işlemi gerçekleştirebilirsiniz. Örneğin a1:a10 aralığı boş olsun Bu aralığı set tanımı ile alıp bir döngü oluşturarak 10 adet textbox'ta bulunan verileri bu tanımın içine alarak. Sanki bir dizi gibi veya aralık gibi kullanabilirsiniz.
Ancak, işlemin sonunda dizide yapılan değişiklikler, eklemeler veya çıkarmalar aldığınız bu boş aralığa yansıyacaktır. Onu da makro sonunda aralığı sildirerek aşabilirsiniz. Biraz zorlama bir yöntem; ama belirli oranda iş görecektir.
 
Son düzenleme:

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
43,023
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Selamlar,

Bende bu konuda tesbit ettiğim bir noktayı açıklamak istiyorum.

Excelin yerleşik fonksiyonlarını hücreye yazdığınızda içinde kullanabileceğiniz parametreler sarı renkli bir açıklama kutucuğunda bize yön göstermesi için görüntülenir.

İşte burada aşağıdaki gibi bir görüntü ortaya çıkar.

Kod:
=KAÇINCI(aranan_değer;[B][COLOR=red]aranan_dizi[/COLOR][/B];[eşleştir_tür])
Kod:
=ARA(aranan_değer;[B][COLOR=red]dizi[/COLOR][/B])
Kod:
=DÜŞEYARA(aranan_değer;[B][COLOR=red]tablo_[/COLOR][COLOR=red]dizisi[/COLOR][/B][COLOR=#000000];sütun_indis_sayısı;[aralık_bak])[/COLOR]
Kod:
=EĞERSAY([COLOR=red][B]aralık[/B][/COLOR];ölçüt)
Kod:
=ETOPLA([COLOR=red][B]aralık[/B][/COLOR];ölçüt;[toplam_aralığı])
Dikkat ettiyseniz kırmızı renkli bölümler sorgulanan verinin aranacağı alandır. Ve yine dikkat ettiyseniz bazısında dizi kelimesi geçmektedir.

İşte bu dizi kelimesinin geçtiği fonksiyonları kod için oluşturduğumuz dizileri kontrol etmek için kullanabiliyoruz. Tüm dizi kelimesinin geçtiği fonksiyonları makro içinde kullanabiliyormuyuz bilemiyorum. Denemek gerekiyor.

Ekteki örnek dosyayı inceleyiniz.
 

Ekli dosyalar

Katılım
5 Ocak 2009
Mesajlar
1,586
Excel Vers. ve Dili
2003 Türkçe
Merhaba,
İsteğinizi anlıyorum. Dizi içerisinde bulunan verilerde worksheetfunction işlemlerini gerçekleştirmek istiyorsunuz. Sayfadaki herhangi bir aralıkta yapabildiğiniz işlemleri dizide yapmak istiyorsunuz. a1:a20 aralığını verileri alacağı yer olarak kullandım. Boş bir aralığı Set tanımı ile alıp, içini bir döngüyle doldurarak da aynı işlemi gerçekleştirebilirsiniz. Örneğin a1:a10 aralığı boş olsun Bu aralığı set tanımı ile alıp bir döngü oluşturarak 10 adet textbox'ta bulunan verileri bu tanımın içine alarak. Sanki bir dizi gibi veya aralık gibi kullanabilirsiniz.
Ancak, işlemin sonunda dizide yapılan değişiklikler, eklemeler veya çıkarmalar aldığınız bu boş aralığa yansıyacaktır. Onu da makro sonunda aralığı sildirerek aşabilirsiniz. Biraz zorlama bir yöntem; ama belirli oranda iş görecektir.
Selam Sayın leumruk,
İlgi ve alakanız için çok teşekkür ederim. Ki zaten ben de sayfanın kullanılmayan bir sütununa diziyi oluşturup bu şekil kullanıyorum. makro sonlanırken aynı hücreleri siliyorum.
ancak yine de sorumun bir cevabını bulduğunuz zaman paylaşırsanız çok sevinirim
İyi çalışmalar.
 
Katılım
5 Ocak 2009
Mesajlar
1,586
Excel Vers. ve Dili
2003 Türkçe
Selamlar,

Bende bu konuda tesbit ettiğim bir noktayı açıklamak istiyorum.

Excelin yerleşik fonksiyonlarını hücreye yazdığınızda içinde kullanabileceğiniz parametreler sarı renkli bir açıklama kutucuğunda bize yön göstermesi için görüntülenir.

İşte burada aşağıdaki gibi bir görüntü ortaya çıkar.

Kod:
=KAÇINCI(aranan_değer;[B][COLOR=red]aranan_dizi[/COLOR][/B];[eşleştir_tür])
Kod:
=ARA(aranan_değer;[B][COLOR=red]dizi[/COLOR][/B])
Kod:
=DÜŞEYARA(aranan_değer;[B][COLOR=red]tablo_[/COLOR][COLOR=red]dizisi[/COLOR][/B][COLOR=#000000];sütun_indis_sayısı;[aralık_bak])[/COLOR]
Kod:
=EĞERSAY([COLOR=red][B]aralık[/B][/COLOR];ölçüt)
Kod:
=ETOPLA([COLOR=red][B]aralık[/B][/COLOR];ölçüt;[toplam_aralığı])
Dikkat ettiyseniz kırmızı renkli bölümler sorgulanan verinin aranacağı alandır. Ve yine dikkat ettiyseniz bazısında dizi kelimesi geçmektedir.

İşte bu dizi kelimesinin geçtiği fonksiyonları kod için oluşturduğumuz dizileri kontrol etmek için kullanabiliyoruz. Tüm dizi kelimesinin geçtiği fonksiyonları makro içinde kullanabiliyormuyuz bilemiyorum. Denemek gerekiyor.

Ekteki örnek dosyayı inceleyiniz.
Selam,
Sayın Korhan Ayhan yardımlarınız için çok teşekkür ederim.
Örnek dosyanızda birşey fark ettim.

Vlookup ve Match 'da diziyi yazdığımız kısım için Arg1 olarak tanıyor. aşağıdaki gibi.Vlookup(Arg1,..... ve Match(Arg1,....
Fakat CountIf için CountIf(Arg1 is Range,.... ifadesi kullanıyor.
Yani benim anladığım aralık olarak istenen dizi illa sayfa üzerinde olmalı.
Doğru mudur?

İyi çalışmalar.
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
43,023
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Selamlar,

Range ifadesi geçtiğinine göre verilerin sayfa üzerinde olması gerekiyor.
 
Katılım
5 Ocak 2009
Mesajlar
1,586
Excel Vers. ve Dili
2003 Türkçe
Selamlar,

Range ifadesi geçtiğinine göre verilerin sayfa üzerinde olması gerekiyor.
Selam korhan Ayhan Hocam,
İlgi ve alakanız için çok teşekkür ederim. Ben de benzer durumlarda sayfanın kullanılmayan bir sütununa diziyi oluşturup bu şekilde kullanıyorum. makro sonlanırken aynı hücreleri siliyorum.
Ancak yine de sorumun bir cevabını bulduğunu veya alternatif fikirleriniz olduğu zaman paylaşırsanız çok sevinirim
İyi çalışmalar.
 
Katılım
5 Ocak 2009
Mesajlar
1,586
Excel Vers. ve Dili
2003 Türkçe
Selamlar,

Sayfaya veri yazmadan ifadesi ile sanırım yardımcı sütun kullanmamayı kast ediyorsunuz. Yaptığınız işlem B-C-D sütunlarındaki benzersiz kayıtları listelemek. Bunun için VERİ-FİLTRE-GELİŞMİŞ FİLTRE menüsünü kullanabilirsiniz.

Aşağıdaki kod ile yeni liste K-L-M sütunlarına aktarılır.

Kod:
Option Explicit
 
Sub BENZERSİZ_SÜZ()
    Columns("K:M").ClearContents
    Columns("B:D").AdvancedFilter Action:=xlFilterCopy, CopyToRange:=Range("K1"), Unique:=True
End Sub
selam,
verilerim B,C,D değil de aynısı B,D,E de ise kodları aşağıdaki gibi yaptım hata verdi. Ne yapmalıyım?
Kod:
Sub BENZERSİZ_SÜZ()
    Columns("K:M").ClearContents
    [B][COLOR="Red"]Columns("B:B,D:D,E:E").[/COLOR][/B]AdvancedFilter Action:=xlFilterCopy, CopyToRange:=Range("K1"), Unique:=True
End Sub
2.sorum "Gelişmiş Süzgeç"deki "ölçüt aralığı" ne işe yarıyor? nasıl kullanılyor?
Biraz bilgi verebilirseniz sevinirim.
İyi çalışmalar
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
43,023
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Selamlar,

Gelişmiş filtrede veri aralığı ardışık olmalıdır. Atlama yapan aralıklarda kullanamazsınız. Eğer kullanmak istiyorsanız istediğiniz sütunları başka bir alana kopyalayıp öyle gelişmiş filtre uygulamalısınız.
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
43,023
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Selamlar,

2. sorunuz içinde ekteki örnek dosyayı inceleyiniz. Uygulamaları yapınca sanırım mantığını anlarsınız. Yinede aklınıza takılan yerleri sorabilirsiniz.
 

Ekli dosyalar

Muzaffer Ali

Destek Ekibi
Destek Ekibi
Katılım
5 Haziran 2006
Mesajlar
6,420
Excel Vers. ve Dili
2019 Türkçe
Umarım aşağıdaki kodlar işinizi görür.


Kod:
Public S As Object
Sub Deneme()
    SanalSayfaOlustur
    SanalSayfayiYokEt
End Sub
Sub SanalSayfaOlustur()
    Set S = CreateObject("Excel.Sheet")
    'Bir sayfa eklenmiştir
    S.Sheets(1).Range("a1").Value = "deneme metni"
    'Başka sayfa eklemek için
    'S.Sheets.Add
    'Sanal sayfanın (.(nokta)ya bastıktan sonra yada CTRL+SPACE tuş _
    kombinasyonuna basınca) özellikleri görünmüyor
    'Eğer standart bir sanal sayfa oluşturmak isterseniz.
    Dim syf As New Worksheet
    Set syf = S.Worksheets(1)
    syf.Range("a1").Value = "deneme metnidir"
End Sub
Sub SanalSayfayiYokEt()
    Set S = Nothing
End Sub
 
Üst