İNDİS işlevinin VBA kodu olarak karşılığı

Levent Menteşoğlu

Administrator
Yönetici
Admin
Katılım
13 Ekim 2004
Mesajlar
16,057
Excel Vers. ve Dili
Excel 2010-32 bit-Türkçe
Excel 365 -32 bit-Türkçe
ÝNDÝS işlevinin VBA kodu olarak karşılığı

Hazırlamakta olduğum bir programda makro içinde hesaplamalarda kullanılmak üzere bir tablodan veri almam gerekiyor. Bunu hücre içinde "indis" ve "kaçıncı" işlevlerini içiçe kullanarak yapıyor ve bu değeri daha sonra makrolara alarak hesaplamalarda kullanıyorum. Benim öğrenmek istediğim tablodan veriyi almak için kullandığım işleve karşılık olarak, VBA da nasıl bir kod kullanabilirim. Konuyu daha iyi anlatmak için ekte bir dosya sunuyorum. Yardımcı olacak tüm arkadaşlara şimdiden teşekkür ederim.
 
Katılım
28 Temmuz 2004
Mesajlar
275
INDEX(R1C1:R16C7,match(r1c11,r1c1:r16c1,0),match(r1c12,r1c1:r1c7,0))

Þu formül işinizi görüyor mu?
 
Katılım
14 Eylül 2004
Mesajlar
100
Excel Vers. ve Dili
Excel 2002 - Türkçe
Serpily
afedersin ama bu yazdığın formül galiba leventm ise makrosunu yani VBA kodu varmı diye soruyor o zaten örnekte formüllerle yapmış.

Yanlış anladıysam kusura bakmayın..
 

Hüseyin

Administrator
Yönetici
Admin
Katılım
2 Haziran 2004
Mesajlar
3,541
Excel Vers. ve Dili
Excel 2010 - Türkçe
selam,
ekte iki örnek var.

1. Ã?rnek Index formulü kullanmadan aynı mantığı adımadım yürüterek.
[vb:1:131e787b48]Sub indisdene()
dikeydeger = Sheets("tablo").Range("K1").Value
yataydeger = Sheets("tablo").Range("L1").Value
Sheets("tablo").Range("A2:A16").Select
satir = Selection.Find(dikeydeger).Row
Sheets("tablo").Range("B1:G1").Select
sutun = Selection.Find(yataydeger).Column
sonuc = Sheets("tablo").Cells(satir, sutun).Value
MsgBox (sonuc)
End Sub[/vb:1:131e787b48]

2. Ã?rnek Hücrede kullandığımız formülün VBA ca yazılışı. (Satır uzadığı için böldüm.)
[vb:1:131e787b48]Sub indistest2()
sonuc = WorksheetFunction.Index(Sheets("tablo").Range("A1:G16"), _
WorksheetFunction.Match(Sheets("tablo").Range("K1"), _
Sheets("tablo").Range("A1:A16"), 0), _
WorksheetFunction.Match(Sheets("tablo").Range("L1"), _
Sheets("tablo").Range("A1:G1"), 0))
MsgBox (sonuc)
End Sub[/vb:1:131e787b48]

Umarım faydalı olur.
 

Levent Menteşoğlu

Administrator
Yönetici
Admin
Katılım
13 Ekim 2004
Mesajlar
16,057
Excel Vers. ve Dili
Excel 2010-32 bit-Türkçe
Excel 365 -32 bit-Türkçe
Sn Serpily sanırım bu kodu makro vasıtası ile hücreye yapıştırarak kullanmak maksadıyla yazmış. Bu başka alternatif bulamadığımda düşünebileceğim bir uygulamadır. Sorudaki bir diğer maksadımda tabloyu bir matris gibi düşünürsek,matrislere yönelik fonksiyonların VBA da yer alıp almadığıdır. Hüseyin bey verdiğiniz kodları deneyeceğim sonucunu buradan bildiririm.

İlgilenen tüm dostlara teşekkürlerimi sunarım
 

Levent Menteşoğlu

Administrator
Yönetici
Admin
Katılım
13 Ekim 2004
Mesajlar
16,057
Excel Vers. ve Dili
Excel 2010-32 bit-Türkçe
Excel 365 -32 bit-Türkçe
Hüseyin bey verdiğiniz her iki kodda gayet güzel çalışıyor. Her ikisinide kullanmam mümkün,fakat tercihimi birinci koddan yana kullanıyorum. Vermiş olduğunuz kodda bazı değişiklikler yaparak tek satıra kadar indirdim, belki bu kısaltmadan istifade eden arkadaşlar olur düşüncesiyle kodun kısaltılmış halini veriyorum.

selamlar

[vb:1:aa9138920e]Sub indisdene()
sonuc = Cells(Range("A2:A16").Find([K1]).Row, Range("B1:G1").Find([L1]).Column).Value
MsgBox (sonuc)
End Sub[/vb:1:aa9138920e]
 
X

xxrt

Misafir
Memur Kademe ve Derecelerde Benimde İşime Yarıyacak.Teşekkürler.. :dua: :dua:
 
Katılım
7 Temmuz 2004
Mesajlar
1,141
[vb:1:94fab226d6]Sub indisdene()
sonuc = Cells(Range("A2:A16").Find([K1]).Row, Range("B1:G1").Find([L1]).Column).Value
MsgBox (sonuc)
End Sub [/vb:1:94fab226d6]
süper kısaltma.
 
Üst