• İşleçler ve işlevler vba excel. Fonksiyonlar-prosedürler VBA. VBA Prosedürlerinde ve İşlevlerinde Özel İşlevleri Kullanma

    Aritmetik İfadeler Visual Basic.

    teorik kısım

    İfadeler ve işlevler

    LABORATUVAR ÇALIŞMASI №4. Aritmetik ile çalışmak

    Kontrol edilecek sorular

    1. Hangi bileşenler, uygulamanızda statik görüntüler oluşturmanıza olanak tanır?

    2. Forma resim nasıl konulur? Bu amaç için hangi yöntemler mevcuttur ve bunlar nasıl farklılık gösterir?

    3. Resim bileşeni uygulamaya hangi formatta bağlanabilir?

    4. Ölçeklendirmeden Image nesnesinin hangi özelliği sorumludur? Resmin görünürlüğü için mi?

    Çalışmanın amacı:Visual Basic dilinin aritmetik ifadeleri ve matematiksel işlevleri hakkında bilgi edinin; ifadeleri ve matematiksel işlevleri kullanarak uygulamalar geliştirmeyi öğrenin

    İfadeler, veriler üzerindeki işlemler için kullanılır. Verilere ve kullanılan işlemlere bağlı olarak, ifadeler bölümlere ayrılır: aritmetik, mantıksal ve sembolik

    aritmetik ifadeler aritmetik işlemlerin işaretleri ile birbirine bağlanan bir sayılar, sabitler, değişkenler, işlevler dizisidir. Bir ifadenin özel bir durumu, yalnızca bir sabit, bir değişken veya bir işlev çağrısıdır.

    Visual Basic dilinin aritmetik işlemleri Tablo 4.1'de gösterilmiştir.

    Tablo 4.1 - Visual Basic dilinin aritmetik işlemleri

    Bir öncelik işlemleri (azalan sırada) gerçekleştirin: üs alma, çarpma ve bölme, tamsayı bölme, kalanın hesaplanması, toplama ve çıkarma. Hesaplamalar soldan sağa doğru yapılır. Parantezler önceliği değiştirir.

    Örnekler:

    14 /5*2 = 5.6 – aynı önceliğe sahip işlemler soldan sağa doğru yürütülür

    14\5*2 = 1 - çarpma işlemi daha yüksek önceliğe sahiptir ve tamsayı bölme sırasında kesirli kısım atılır

    27^1/3 = 9 - üs alma en yüksek önceliğe sahiptir

    27^(1/3) = 3 - parantezler işlem sırasını değiştirir

    Visual Basic geniş bir yelpazeye sahiptir. gömülü (standart) program yazmayı kolaylaştıran işlevler. Matematiksel işlevler, dize işleme işlevleri, tarih ve saatlerle çalışmak için işlevler ve finansal işlevler vardır.

    Matematik fonksiyonları:

    Abs (x) - bağımsız değişkenin modülünü hesaplar



    Atn (x) - x sayısının yay tanjantını hesaplar

    Sin (x) - x sayısının sinüsünü hesaplar

    Cos (x) - x sayısının kosinüsünü hesaplar

    Tan (x) - x sayısının tanjantını hesaplar

    Exp (x) - e^x'i hesaplar

    Günlük (x) - doğal logaritmayı hesaplar

    Sqr(x) - Karekökü hesaplar

    rnd() - 0 ile 1 arasında rastgele bir sayı döndürür

    Int(x) - x'ten büyük olmayan en büyük tamsayıyı hesaplar

    Düzelt (x) - yuvarlatılmış bir sayı hesaplar (bağımsız değişkenin kesirli kısmını atar)

    CInt(x) - argümanı matematiksel yuvarlama kurallarına göre bir tamsayıya yuvarlatarak döndürür

    Sgn (x) - bir sayının işaretini döndürür

    X^(1/n) - X'in n'inci kökünü çıkarır

    Hex (x) - bir ondalık sayıyı onaltılıya dönüştürür

    Oct(x) - ondalık sayıyı sekizli sayıya çevirir

    Yuvarlama sayılarına örnekler:

    Int(7.32) = 7 CInt(5.5) = 6 Fix(-7.32) = -7

    Int(-7,32) = -8 CInt(-7,5) = -7

    Trigonometrik fonksiyonlardaki argüman değerleri radyan cinsinden verilir!

    Argümanı dereceden radyana dönüştürmek için aşağıdaki formülü kullanın:

    Argüman (radyan cinsinden) = Argüman (derece cinsinden)*PI / 180

    PI sayısı aşağıdaki formülle belirlenebilir:

    PI = Atn(1)*4

    Yerleşik işlevler ve bunların nasıl kullanılacağı hakkında eksiksiz bilgi için Visual Basic Yardım sistemine bakın.

    VBA modüllerinin neredeyse tüm program kodları, iki tür Alt (alt program) ve İşlev (işlev) prosedürlerinde bulunur. Function prosedürünün ana görevi, bir değer hesaplamak ve onu fonksiyon prosedürünün çağrıldığı noktaya geri döndürmektir.

    İşlev prosedürü-işlev sözdizimi:

    İşlev İşlevAdı(argümanlar As) As

    İşlev_Adı = Dönüş_Değeri

    bitiş işlevi

    Fonksiyon prosedürleri çeşitli ifadelerde kullanılabilir.

    örnek 1

    Örneğin, en basit prosedür bir İşlev işlevidir:

    Para Birimi Olarak F1(x Para Birimi Olarak) İşlevi

    F1(x) işlevi daha sonraki hesaplamalarda kullanılabilir (modülün program kodu). Function tipi bir prosedür, yalnızca başka bir prosedürden çağrılarak yürütülebilir. Bunu yapmak için, arama prosedüründe, bu F1'in (x) adını bir değişkene atamak gerekir.

    Örnek 2

    Örneğin, "y" değişkenine F1(x) adı verilerek, F1(x) İşlevi MySub() prosedüründe kullanılabilir.

    Dim y As Single 'Değişken bildirimi y

    y = F1 (9) 'x=9 değeri için F1 (x)'i tanımlayın

    Debug.Print y 'Hemen penceresindeki değerleri yazdır

    İşlev F1 (x Tekli Olarak) Tekli Olarak

    F1 = x^10 'x'in 10'un kuvvetine dönüş değeri

    Burada $ x=9$ değeri için F1(x)=$x^(10)$ İşlevi, çağıran MySub() prosedürüne $3.486785E+09$ değerini döndürür. Bir işlev dönüş değeri veya bir VBA prosedüründe kullanılan bir değişken, tanımlanmış bir veri tipine sahip değilse, varsayılan veri tipi Değişken'dir.

    VBA, hem İşlev yordamlarını hem de yerleşik işlevleri kullanır.

    Yerleşik işlevler iki bölümden oluşur: bir ad (tanımlayıcı) ​​ve bağımsız değişkenler. Yerleşik işlevler, ifadeler üzerinde belirli eylemler gerçekleştiren ve çağrıldıkları noktada bir miktar değer döndüren hazır VBA formülleridir.

    İşlevler, daha sonraki hesaplamalarda kullanılan adları yerine bir sonuç değeri döndürür. Kural olarak, işlevler, virgülle ayrılmış parantez içinde yazılan bağımsız değişkenlerin varlığını gerektirir. Ancak bazı işlevler argüman gerektirmez. Örneğin, bağımsız değişken almayan Now() işlevi, geçerli sistem tarihini ve saatini döndürür. İşlevler, yeni ifadeler veya işlevler oluşturmak için kullanılabilir.

    Programın metnine bir fonksiyon nasıl eklenir? Bir işlevi ifadelerde kullanmak için, adını bir VBA ifadesine girmelisiniz. Argüman gerektirmeyen yerleşik bir işlevi çağırmak için, modül program koduna adını (örneğin, Şimdi) girmeniz yeterlidir:

    SubMyDate()

    Dim TD 'TD değişken bildirimi

    TD = Şimdi 'Geçerli sistem tarihini ve saatini al

    Debug.Print TD 'Hemen penceresindeki değerleri yazdır

    Bir veya daha fazla bağımsız değişkenin girilmesini gerektiren bir işlevi çağırmak için, adını atama operatörünün sağ tarafına parametreler (bağımsız değişken değerleri) parantez içinde olacak şekilde girmelisiniz. Örneğin, Sub tipi bir prosedürde bir değişken N ile yerleşik İşlev Günlüğünü (N) çağırmak için, Log_N değişkenine 50 bağımsız değişken değeriyle Log (50) işlev adı atanır.

    Alt Doğallogaritma()

    Dim LogN 'LogN değişkeni bildirme

    Debug.Print LogN 'Hemen penceresindeki değerleri yazdırma

    1. açıklama

    Burada, 50 bağımsız değişken değeri için yerleşik Log(N) işlevi, "Sub Natural_Logarithm()" çağırma prosedürünün Log(50) çağrı noktasına 3,91202300542815 değerini döndürür. Bir işlev, ayrı bir VBA deyimi kullanılarak veya adını bir VBA programındaki bir formül veya ifadedeki bir bağımsız değişken (parametre) değerleri listesine yerleştirerek çağrılabilir. VBA kısaltması, bir işleve yapılan çağrıyı başka bir işleve argüman olarak belirtmenize izin veren işlev iç içe yerleştirmeyi kullanır. Bu durumda, ilk işlevin dönüş değeri sonraki işlev için bir argüman olarak kullanılır.

    VBA, programlamayı kolaylaştıran ve aşağıdaki kategorilere ayrılabilen çok sayıda yerleşik işlev ve prosedüre sahiptir:

    • matematiksel;
    • tip kontrol fonksiyonları;
    • dizi işleme fonksiyonları;
    • biçim işlevi;
    • biçim dönüştürme işlevleri;
    • tarih ve saat işlevleri.

    Matematik fonksiyonları

    Matematiksel işlevler şunları içerir:

    • Abs (x) - $x$ bağımsız değişkeninin modülü;
    • Cos(x) - bağımsız değişkenin kosinüsü $x$;
    • Exp(x) - doğal logaritmanın tabanını $x$ kuvvetine yükseltmek;
    • Log(x) - $x$ bağımsız değişkeninin doğal logaritması;
    • Rnd - aralıktan rasgele sayı;
    • Sin(x) - bağımsız değişkenin sinüsü $x$;
    • Sqr(x) - $x$'ın karekökü;
    • Atn(x) - $x$'ın yay tanjantı;
    • Tan(x) – $x$ tanjantı;
    • Sgn(x) $x$'ın işaretidir.

    Fix(x) ve Int(x)'in her ikisi de bir sayının kesirli kısmını atar ve bir tamsayı değeri döndürür. Bu işlevler arasındaki fark, negatif bağımsız değişken değerleri içindir. Int(x), x'ten küçük veya x'e eşit en yakın negatif tamsayıyı döndürürken Fix(x), x'ten büyük veya x'e eşit en yakın negatif tamsayıyı döndürür.

    Tip kontrol fonksiyonları

    Bir değişkenin ne tür olduğunu belirleyen işlevler şunlardır:

    • IsArray(x) - işlev, değişkenin bir dizi olup olmadığını kontrol eder;
    • IsDate(x) değişkenin bir tarih olup olmadığını belirler;
    • IsError(x), değişkenin bir hata kodu olup olmadığını belirler;
    • IsNull(x), değişkenin null olup olmadığını belirler;
    • IsNumeric(x), bir değişkenin sayısal bir değer olup olmadığını belirler;
    • IsObject(x), değişkenin bir nesne olup olmadığını belirler.

    Biçim işlevi

    Biçimlendirme işlevi, işlev sözdizimine göre biçimlendirilmiş bir ifade içeren bir Varyant (Dize) değeri döndürür:

    Biçim(İfade[,Biçim [,Haftanın ilk günü[,Yılın İlk Haftası]]]), burada:

    • İfade - gerekli bir bağımsız değişken (herhangi bir geçerli ifade, sonucu bir dize, sayı veya nesne olan anahtar kelimelerin, operatörlerin, değişkenlerin ve sabitlerin bir kombinasyonudur);
    • Biçim, isteğe bağlı bir parametredir (herhangi bir geçerli adlandırılmış veya kullanıcı tanımlı biçim ifadesi).

    İşlev adına $ işareti eklenirse, işlev String türünde bir değer döndürür.Fonksiyon, String türünde bir değer döndürür.

    Kendi sayı biçiminizi oluştururken aşağıdaki karakterleri kullanabilirsiniz:

    • 0 - dijital bitin konumunu saklı tutar. Bir rakam veya sıfır görüntüler. Biçimlendirilmekte olan sayının, biçim dizesinde 0'ın olduğu o bit konumunda herhangi bir rakamı varsa, işlev o basamağı görüntüler, değilse, o konumda sıfır görüntülenir;
    • "#" - bu sembolün eylemi 0'ın eylemine benzer, tek fark önemsiz sıfırların görüntülenmemesidir;
    • . – ondalık ayırıcının konumunu saklı tutar, ondalık ayırıcının solunda ve sağında kaç basamak gösterilmesi gerektiğini belirler;
    • % - sayının yüzde görüntüsünü saklı tutar;
    • . yüzleri binlerden ayırır.

    Biçim Dönüştürme İşlevleri

    Bunlar şunları içerir:

    • Val(dize) Dizede bulunan sayıları uygun türde bir sayısal değer olarak döndürür.
    • Str(sayı) - Bir sayının dize gösterimi olan bir Varyant (Dize) değeri döndürür.

    Val ve Str işlevlerine ek olarak, ifade türlerini dönüştürmek için bir dizi işlev vardır.

    Dize İşleme İşlevleri

    Birçok işlev arasında şunlar yer alır:

    • Chr(code) - Bir ASCII kodunu bir dizgeye dönüştürür. Örneğin, Chr(10) bir yeni satır, Chr(13) bir satır başı gerçekleştirir;
    • Mid(string, pos[,length]) - belirtilen sayıda karakter içeren bir dizenin alt dizesini döndürür; burada String, alt dizenin çıkarıldığı bir dize ifadesidir;
    • Poz, String dizisindeki karakterin, istenen alt dizenin başladığı konumudur;
    • Uzunluk, döndürülecek alt dize karakterlerinin sayısıdır;
    • Len(string) Bir dizideki karakter sayısını döndürür.

    Saat ve tarih işlevleri

    Sistem tarihini, geçerli saati vb. içeren bir Varyant değeri döndürür.Örneğin, Tarih işlevi, sistem tarihini içeren bir değer döndürür.

    işlev İsim ([liste_ argümanlar])
    [talimatlar]
    [İsim = ifade]
    [talimatlar]
    [İsim = ifade]
    bitiş işlevi

    Bir işlev adına her zaman en az bir kez ve genellikle işlevin yürütülmesi bittiğinde bir değer atanır. Özel bir işlev oluşturmak için bir VBA modülü oluşturarak başlayın (mevcut bir modülü de kullanabilirsiniz). İşlev anahtar sözcüğünü ve ardından işlevin adını ve (varsa) bağımsız değişkenlerinin listesini parantez içinde girin. İşlev tarafından döndürülen değerin veri türünü As anahtar sözcüğünü kullanarak da bildirebilirsiniz (bu isteğe bağlıdır ancak önerilir). Gerekli eylemleri gerçekleştiren VBA kodunu yapıştırın ve fonksiyon gövdesinde en az bir kez fonksiyon adına karşılık gelen prosedür değişkenine gerekli değerin atandığından emin olun. İşlev, End Function deyimiyle sona erer.

    İşlev adları, ile aynı kurallara uyar. İşlevi bir çalışma sayfası formülünde kullanmayı planlıyorsanız, başlığın hücre adresi biçiminde olmadığından emin olun. Ayrıca, Excel'in yerleşik işlev adlarıyla eşleşen işlev adları vermeyin. İşlevin kapsamı ayarlanmamışsa, varsayılan değer Public'tir. Özel olarak bildirilen işlevler iletişim kutusunda görüntülenmez İşlev Sihirbazı.

    İşlev aşağıdaki yollardan biriyle çağrılabilir:

    • başka bir prosedürden çağırın;
    • çalışma sayfası formülüne dahil edin;
    • koşullu biçimlendirme formülüne dahil edin;
    • VBE hata ayıklama penceresinde arayın ( acil). Bu yöntem genellikle test aşamasında uygulanır (Şekil 3).

    Pirinç. 3. Hata ayıklama penceresinde bir işlevi çağırma

    Prosedürlerin aksine, işlevler bir iletişim kutusunda görünmez. Makro(Menü Geliştirici –> kod –> makrolar; veya Alt+F8).

    İşlev Argümanları

    Argümanlar değişkenler (diziler dahil), sabitler, karakter verileri veya ifadelerle temsil edilebilir. Bazı işlevler argüman almaz. İşlevlerin hem zorunlu hem de isteğe bağlı bağımsız değişkenleri vardır.

    Bağımsız değişken içermeyen işlevler

    Excel, RAND, BUGÜN, BUGÜN gibi bağımsız değişken almayan birkaç yerleşik işleve sahiptir. Benzer özel işlevler oluşturmak kolaydır. Örneğin:

    İşlev Kullanıcısı()
    " Kullanıcı adını döndürür
    Kullanıcı = Uygulama.KullanıcıAdı
    bitiş işlevi

    =User() formülünü girdiğinizde, hücre geçerli kullanıcının adını döndürür (Şekil 4). Bir çalışma sayfası formülünde bağımsız değişkensiz bir işlev kullanırken boş parantezler eklemeniz gerektiğini lütfen unutmayın.

    Pirinç. 4. Formül =User() geçerli kullanıcının adını döndürür

    Kullanıcı tanımlı işlevler, Excel'deki yerleşik işlevler gibi davranır. Genellikle, kullanıcı tanımlı bir işlev gerektiğinde yeniden hesaplanır, örn. işlev bağımsız değişkenlerinden biri değişirse. Ancak, işlevleri daha sık yeniden hesaplayabilirsiniz. Prosedüre bir operatör eklenirse, herhangi bir hücre değiştiğinde işlev yeniden hesaplanır

    Application.Volatile True

    Application nesnesinin Volatile yönteminin bir bağımsız değişkeni vardır (Doğru veya Yanlış). İşlev olarak vurgulanırsa uçucu(değiştirilebilir), çalışma sayfasındaki herhangi bir hücre değiştiğinde yeniden hesaplanır. Volatile yönteminin False bağımsız değişkenini kullandığınızda, işlev yalnızca yeniden hesaplama sonucunda bağımsız değişkenlerinden biri değiştiğinde yeniden hesaplanır.

    Excel yerleşik bir RAND işlevine sahiptir. Ancak, çalışma sayfası her yeniden hesaplandığında rasgele sayıların değişmesinden gerçekten hoşlanmadım. Bu nedenle, formüller yeniden hesaplandığında değişmeyen rasgele sayılar döndüren bir işlev geliştirdim. Bunun için yerleşik VBA Rnd işlevi kullanıldı:

    StaticRand() işlevi
    " Formüller yeniden hesaplanırken değişmeyen rastgele bir sayı döndürür
    StatikRand = Rnd()
    bitiş işlevi

    Bu formül kullanılarak elde edilen değerler asla değişmez. Ancak kullanıcı yine de bir tuş bileşimi kullanarak formülü yeniden hesaplanmaya zorlama olanağına sahiptir. .

    Tek bağımsız değişkenli işlev

    Pirinç. 5. Komisyon tablosu

    Komisyonları hesaplamanın birkaç yolu vardır. Örneğin, aşağıdaki formülü kullanarak (satış hacmi D1 hücresine yerleştirilmişse):

    EĞER(VE(D1>=0,D1)<=9999,99);D1*0,08;ЕСЛИ(И(D1>=10000;D1<=19999,99);D1*0,105; ЕСЛИ(И(D1>=20000;D1<=39999,99);D1*0,12;ЕСЛИ(D1>=40000;D1*0.14))))

    Bu formül birkaç nedenden dolayı başarısız olur. Birincisi, karmaşıktır, yazmak ve ardından düzenlemek kolay değildir. İkincisi, değerler formülde kesin olarak tanımlanmıştır ve bu da değiştirilmesini zorlaştırır. DÜŞEYARA kullanmak çok daha iyidir (Şek. 6).

    Pirinç. 6. Komisyonları hesaplamak için DÜŞEYARA işlevini kullanma

    Daha da iyisi (o zaman bir arama tablosu kullanmanıza gerek kalmaz) özel bir işlev oluşturun:

    Fonksiyon Komisyonu(Satış)
    Sabit Katman1 = 0,08
    Sabit Katman2 = 0,105
    Sabit Katman3 = 0,12
    Sabit Katman4 = 0,14
    " Satış komisyonu hesabı
    Vaka Satışlarını Seçin
    Durum 0'dan 9999,99'a: Komisyon = Satış * Kademe 1
    Vaka 10000 - 19999,99: Komisyon = Satış * Kademe 2
    Vaka 20000 ila 39999,99: Komisyon = Satış * Tier3
    Durum >= 40000: Komisyon = Satış * Tier4
    Son Seçim
    bitiş işlevi

    Bir VBA modülüne girildiğinde, bu işlev bir çalışma sayfası formülünde kullanılabilir veya diğer VBA prosedürlerinden çağrılabilir. Aşağıdaki formülü bir hücreye girdiğinizde sonuç 3000 olacaktır:

    Komisyon(B2)

    İşlev DoubleCell()
    DoubleCell = Menzil(" Al ") * 2
    bitiş işlevi

    Bu işlev çalışmasına rağmen, bazı durumlarda hatalı sonuçlar verir. Bunun nedeni, Excel hesaplama motorunun bağımsız değişken olarak iletilmeyen aralıkları dikkate almamasıdır. Sonuç olarak, bazen işlev bir değer döndürmeden önce ilişkili tüm değerler değerlendirilmez. Ayrıca, A1 hücresinin değerini bağımsız değişken olarak alan bir DoubleCell işlevi de yazmalısınız.

    İşlev DoubleCell(hücre)
    çift ​​hücre = hücre * 2
    bitiş işlevi

    İki bağımsız değişkenli işlev

    Yukarıda tartışılan yöneticinin çalışan devrini azaltmak için tasarlanmış yeni bir politika uyguladığını hayal edin: ödenecek toplam komisyon miktarı, çalışanın şirket için çalıştığı her yıl için %1 artar. Komisyon özel işlevini iki bağımsız değişken alacak şekilde değiştirelim. Yeni bağımsız değişken, çalışanın şirket için çalıştığı yıl sayısını temsil eder. Bu yeni işleve Komisyon2 adını verelim:

    İşlev Komisyon2(Satış, Yıllar) Tekli
    " Baz alınarak satış komisyonlarının hesaplanması
    "Hizmet süresi
    Komisyon2 = Komisyon(Satış) + _
    (Komisyon(Satış) * Yıl / 100)
    bitiş işlevi

    Dizi bağımsız değişkenli işlev

    Fonksiyonlar bir veya daha fazla diziyi bağımsız değişken olarak alabilir, bu dizileri işleyebilir ve tek bir değer döndürebilir. Aşağıdaki işlev bir diziyi argüman olarak alır ve elemanlarının toplamını döndürür.

    İşlev SumArray(List) Çift Olarak
    Öğeyi Varyant Olarak Karart
    Toplam Dizi = 0
    Listedeki Her Öğe İçin
    WorksheetFunction.IsNumber(Item) ise O zaman _
    SumArray = SumArray + Öğe
    Sıradaki eşya
    bitiş işlevi

    Excel INUMERIC işlevi, toplama eklemeden önce her öğenin bir sayı olup olmadığını kontrol eder. Bu basit veri doğrulama işlecinin eklenmesi, bir dizide aritmetik işlem gerçekleştirmeye çalışırken tür uyuşmazlığı hatalarını ortadan kaldırır.

    İsteğe bağlı argümanlarla işlev

    Birçok yerleşik Excel işlevinin isteğe bağlı bağımsız değişkenleri vardır. Bir dizgenin sol tarafındaki karakterleri döndüren SOL işlevi buna bir örnektir. Aşağıdaki sözdizimine sahiptir:

    SOL( metin, karakter sayısı)

    İkinci argümandan farklı olarak ilk argüman gereklidir. İkinci bağımsız değişken sağlanmazsa, Excel 1 değerini varsayar.

    VBA'da tasarlanan özel işlevler de isteğe bağlı bağımsız değişkenlere sahip olabilir. İsteğe bağlı bir bağımsız değişkeni, bağımsız değişken adının önüne İsteğe Bağlı anahtar sözcük ekleyerek belirtirsiniz. Bağımsız değişken listesinde, isteğe bağlı bağımsız değişkenler, gerekli tüm argümanlardan sonra tanımlanır. Örneğin:

    Kullanıcı2 İşlevi (Varyant Olarak İsteğe Bağlı Büyük Harf)
    IsMissing(Büyük Harf) ise Büyük Harf = Yanlış
    Kullanıcı2 = Uygulama.KullanıcıAdı
    Büyük Harf ise User2 = UCase(User2)
    bitiş işlevi

    Bağımsız değişken Yanlış ise veya atlanmışsa, kullanıcı adı herhangi bir değişiklik yapılmadan döndürülür. İşlev bağımsız değişkeni True ise, kullanıcı adı büyük harflerle döndürülür (Ucase VBA işlevi kullanılarak). İlk işlev ifadesine dikkat edin - bir bağımsız değişkenin varlığını belirleyen IsMissing VBA işlevini içerir. Argüman yoksa ifade, Büyük Harf değişkenini False (varsayılan) olarak ayarlar.

    Bir dizi döndüren VBA işlevi

    VBA, Array adında çok kullanışlı bir işlev içerir. Bir dizi (yani birden çok değer) içeren bir Varyant değeri döndürür. Excel'deki dizi formüllerine aşina değilseniz, ile başlamanızı öneririm. Tıklandıktan sonra hücreye girilen dizi formülü . Excel, bunun bir dizi formülü olduğunu belirtmek için formülün etrafına parantez ekler.

    AyAdı işlevi, kullanıcı tanımlı bir işlevde Dizi işlevini kullanmanın basit bir örneğidir.

    İşlev AyAdı()
    Ay İsimleri = Dizi ("Ocak", "Şubat", "Mart", _
    "Nisan", "Mayıs", "Haziran", "Temmuz", "Ağustos", _
    " Eylül Ekim Kasım Aralık "
    bitiş işlevi

    MonthNames işlevi, yatay bir ay adları dizisi döndürür. Çalışma sayfasında 12 hücre seçin, =AyAdı() formülünü girin ve tıklayın . Ay adlarından oluşan dikey bir dizi oluşturmak istiyorsanız, dikey aralığı seçin, =TRANSPOSE(MonthNames()) formülünü girin ve tuşuna basın. .

    Bir hata değeri döndüren bir işlev

    • xlErrDivO (#DIV/0 hatası için!);
    • xlErrNA (#YOK hatası için);
    • xlErrName (#NAME hatası için?);
    • xlErrNull (#NULL! hatası için);
    • xlErrNum (#SAYI! hatası için);
    • xlErrRef (#REF! hatası için);
    • xlErrValue (#DEĞER! hatası için).

    Aşağıda dönüştürülmüş RemoveVowels işlevi bulunmaktadır (başlangıçtaki örneğe bakın). If-Then yapısı, bağımsız değişken bir metin bağımsız değişkeni olmadığında alternatif bir eylem gerçekleştirmek için kullanılır. Bu işlev, bağımsız değişkenin metin içerip içermediğini belirleyen Excel ISTEXT işlevini çağırır. Hücre metin içeriyorsa işlev normal bir sonuç döndürür. Hücrede metin yoksa (veya boşsa), işlev #DEĞER!

    Varyant Olarak RemoveVowels3(txt) İşlevi
    " Txt bağımsız değişkenindeki tüm sesli harfleri kaldırır
    " Bağımsız değişken bir dize değilse bir #DEĞER! hatası döndürür
    Uzun Dim
    KaldırVwels3 = " "
    Application.WorksheetFunction.IsText(txt) ise O zaman
    i = 1 To Len(txt) için
    If Not UCase(Mid(txt, i, 1)) " " Gibi Sonra
    RemoveVowels3 = RemoveVowels3 & Mid(txt, i, 1)
    eğer biterse
    sonraki ben
    Başka
    RemoveVowels3 = CVErr(xlErrValue)
    eğer biterse
    bitiş işlevi

    İşlevin dönüş değeri için veri türünün değiştirildiğine dikkat edin. İşlev, dizeden başka bir şey döndürebildiğinden, veri türü Değişken olarak değiştirilmiştir.

    Belirsiz sayıda bağımsız değişken içeren işlev

    Sonsuz sayıda bağımsız değişkene sahip özel işlevler oluşturmak mümkündür. Son (veya tek) bağımsız değişken olarak bir dizi kullanın ve onun önüne ParamArray anahtar sözcüğünü koyun (ParamArray yalnızca bir yordamın bağımsız değişken listesindeki son bağımsız değişkene başvurur. Her zaman bir Variant veri türüdür ve her zaman isteğe bağlı bir bağımsız değişkendir). Aşağıdaki işlev, tek bir değer (hücre) veya bir aralık olabilen tüm bağımsız değişkenlerin toplamını döndürür.

    Çift Olarak SimpleSum(ParamArray arglist() As Variant) işlevi
    Aralık Olarak Hücreyi Karart
    Değişken Olarak Dim arg
    Arglist'teki her arg için
    arg'deki Her hücre için
    BasitToplam = BasitToplam + hücre
    sonraki hücre
    sonraki bağımsız değişken
    bitiş işlevi

    İşlev Hata Ayıklama

    Bir işlevi test etmek için bir çalışma sayfası formülü kullanırken, yürütme sırasında oluşan hatalar tanıdık ileti iletişim kutusunda görüntülenmez. Formül yalnızca hata değerini (#DEĞER!) döndürür. Şans eseri, her zaman birkaç geçici çözüm olduğundan, işlevlerde hata ayıklama yapılırken bu pek sorun olmaz.

    • Bireysel değişkenlerin değerlerini kontrol etmek için önemli yerlere bir MsgBox işlevi yerleştirin.
    • İşlevi bir çalışma sayfası formülünden değil, bir yordamdan çağırarak test edin. Çalışma zamanı hataları olağan şekilde görüntülenir.
    • İşlevde bir kesme noktası tanımlayın ve işlevde adım adım ilerleyin. Bu durumda, tüm standart hata ayıklama araçlarını kullanabilirsiniz. Kesme noktası eklemek için, imleci yürütmeyi kesmeye karar verdiğiniz ifadeye getirin ve komutu seçin. hata ayıklamak –> Kesme Noktasını Değiştir (hata ayıklama –> kesme noktası) veya tıklayın .
    • Değerleri bir pencerede görüntülemek için programınızda bir veya daha fazla geçici Print deyimi kullanın. acil VBA editörü. Örneğin, bir döngü değerini kontrol etmek için aşağıdaki yöntemi kullanın:

    Pirinç. 7. Bir işlevi yürütürken sonuçları görüntülemek için hata ayıklama penceresini kullanın

    Bu durumda, hata ayıklama penceresinde Ch ve i olmak üzere iki değişkenin değerleri görüntülenir ( acil) program bir Debug.Print deyimiyle karşılaştığında. İmleci Test() prosedüründe herhangi bir yere konumlandırın ve F5'e basın. Şek. Şekil 7, işlevin bir TusconArizona bağımsız değişkeni aldığı durumun sonucunu gösterir.

    MacroOptions Yöntemini Kullanma

    Uygulama nesnesinin, Excel'in yerleşik işlevlerinin bir parçası olarak geliştirdiğiniz işlevleri dahil etmenize izin veren MacroOptions yöntemini kullanabilirsiniz. Bu yöntem şunları sağlar:

    • bir işlev açıklaması ekleyin (Excel 2010'dan itibaren;
    • işlevin kategorisini belirtin;
    • işlev bağımsız değişkenlerinin bir açıklamasını ekleyin.

    Alt TanımFonksiyon()
    İşlev Adını Dize Olarak Karart
    Fonksiyon Tanımını Dize Olarak Kıs
    Dim FuncCat As Long
    Arg1Desc'i Dizge Olarak, Arg2Desc'i Dizge Olarak Kısın
    FuncName = "Çiz"
    FuncDesc = "Rastgele Aralıklı Hücre İçeriği"
    FuncCat = 5 " Referanslar ve diziler
    Arg1Desc = "Değerleri içeren aralık"
    Arg2Desc = " (isteğe bağlı) Yanlış veya yoksa, _
    Rnd işlevi yeniden hesaplanmaz. "
    Arg2Desc = Arg2Desc & "True ise, Rnd işlevi yeniden hesaplanır"
    Arg2Desc = Arg2Desc & "sayfadaki herhangi bir değişiklikte."
    Application.MacroOptions_
    Makro:=İşlevAdı, _
    Açıklama:=FuncDesc, _
    Kategori:=FuncCat, _
    ArgumentDescriptions:=Dizi(Arg1Desc, Arg2Desc)
    son alt

    Şek. 8 iletişim kutusu gösteriliyor İşlev Sihirbazı Ve İşlev Argümanları DescribeFunction() prosedürünü yürüttükten sonra.

    Pirinç. 8. İletişim kutularının görünümü İşlev Sihirbazı Ve İşlev Argümanlarıözel işlev için

    DescribeFunction() prosedürü yalnızca bir kez çağrılmalıdır. Çağırdıktan sonra, işlevle ilişkili bilgiler çalışma kitabında depolanır. Ancak prosedürü değiştirdiyseniz, tekrar arayın.

    MacroOptions yöntemini kullanarak bir işlev kategorisi belirtmezseniz, özel çalışma sayfası işlevi kategoride görünecektir. Kullanıcı tanımlı iletişim kutusu İşlev Sihirbazı. Tablo (Şekil 9), MacroOptions yönteminin Category argümanı için değer olarak kullanılabilecek kategori numaralarını listeler. Lütfen bu kategorilerden bazılarının (10 ila 13) genellikle iletişim kutusunda gösterilmediğini unutmayın. İşlev Sihirbazı. Kullanıcı tanımlı işlevlerden biri böyle bir kategoriye atanırsa, iletişim kutusunda görünecektir.

    Özel İşlevleri Saklamak için Eklentileri Kullanma

    İsteğe bağlı olarak, sık kullanılan özel işlevleri bir eklenti dosyasına kaydedebilirsiniz. Bu yaklaşımın ana avantajı, işlevlerin dosya adı belirticisi olmadan formüllerde kullanılabilmesidir. Diyelim ki özel bir ZapSpaces işleviniz var; Myfuncs.xlsm dosyasında saklanır. Başka bir çalışma kitabındaki (Myfuncs.xlsm dışında) bir formülde uygulamak için aşağıdaki formülü girmelisiniz: =Myfuncs.xlsm!ZapSpaces(A1:C12).

    Myfuncs.xlsm dosyasını temel alan bir eklenti oluşturursanız ve eklenti mevcut Excel oturumunda yüklenirse, aşağıdaki formülü girerek dosya referansını atlayabilirsiniz: =ZapSpaces(A1:C12). Eklentilerin oluşturulması ayrıca ele alınacaktır.

    Kullanıcı tanımlı işlevleri depolamak için eklentilerin kullanılmasından kaynaklanabilecek olası bir sorun, çalışma kitabının eklenti dosyasına bağımlılığıdır. Çalışma kitabını bir çalışana teslim ediyorsanız, gerekli işlevleri içeren eklentinin bir kopyasını da teslim ettiğinizden emin olun.

    Windows API İşlevlerini Kullanma

    VBA, Windows ve diğer programlar tarafından kullanılan Dinamik Bağlantı Kitaplığı (DLL) dosyaları gibi Excel veya VBA ile hiçbir ilgisi olmayan diğer dosyalardan yöntemler ödünç alabilir. Sonuç olarak, VBA, ödünç alınan yöntemler olmadan dilin yeteneklerinin ötesinde olan işlemleri gerçekleştirme yeteneğine sahiptir.

    Windows API (Uygulama Programlama Arayüzü - Uygulama Programlama Arayüzü), Windows ortamında programcıların kullanabileceği bir dizi işlevdir. VBA'dan bir Windows işlevini çağırdığınızda, Windows API'sine erişiyorsunuz. Windows programcıları tarafından kullanılan birçok Windows kaynağı, derleme zamanında değil, program yürütme sırasında dahil edilen programları ve işlevleri depolayan DLL dosyalarından elde edilebilir.

    Bir Windows API işlevinin kullanılabilmesi için, bir program biriminin en üstünde bildirilmesi gerekir. Program modülü standart bir VBA modülü değilse (örn. Kullanıcı Formu, Çarşaf veya Bu kitap), API işlevi Özel olarak bildirilmelidir.

    Bir API işlevinin bildirimi biraz karmaşıktır - işlev mümkün olduğu kadar doğru bir şekilde bildirilmelidir. Bildirim bildirimi VBA'ya şunları söyler:

    • hangi API işlevini kullanıyorsunuz;
    • API işlevi hangi kitaplıkta bulunur;
    • API işlev bağımsız değişkenleri.

    API işlevi bir kez bildirildiğinde, bir VBA programında kullanılabilir.

    Bir Windows klasörünün adını görüntüleyen bir API işlevi örneğine bakalım (bazen bu görevi standart VBA deyimlerini kullanarak gerçekleştiremezsiniz). İlk olarak, bir API işlevi bildirelim:

    PtrSafe İşlevini Bildirin GetWindowsDirectoryA Lib "kernel32" _
    (Dize Olarak ByVal lpBuffer, Uzunluk Olarak ByVal nSize)

    İki argüman alan bu fonksiyon, Windows işletim sisteminin kurulu olduğu klasörün adını döndürür. Bu işlev çağrıldıktan sonra, Windows klasörünün yolu lpBuffer değişkeninde ve yol dizesinin uzunluğu nSize değişkeninde saklanacaktır.

    Aşağıdaki örnek, sonucu bir mesaj kutusunda görüntüler:

    Alt ShowWindowsDir()
    WinPath'i Dize Olarak Karart * 255
    WinDir'i Dize Olarak Karart
    WinPath = Boşluk(255)
    WinDir = Sol(WinPath, GetWindowsDirectoryA _
    (WinPath, Len(WinPath)))
    MsgBox WinDir, vbInformation, "Windows Dizini"
    son alt

    ShowWindowsDir prosedürü sırasında, Windows klasörünün konumunu gösteren bir mesaj kutusu görüntülenir.

    Bazen API işlevleri için bir sarıcı oluşturmanız gerekir. Yani API fonksiyonunu kullanarak kendi fonksiyonunuzu oluşturacaksınız. Bu yaklaşım, API işlevinin kullanımını büyük ölçüde basitleştirir. Aşağıda, böyle bir VBA işlevinin bir örneği verilmiştir:

    String Olarak WindowsDir() İşlevi
    "Windows klasör adı
    WinPath'i Dize Olarak Karart * 255
    WinPath = Boşluk(255)
    WindowsDir = Sol(WinPath, GetWindowsDirectoryA _
    (WinPath, Len(WinPath)))
    bitiş işlevi

    Bu işlevi bildirdikten sonra, onu başka bir prosedürden çağırabilirsiniz: MsgBox WindowsDir(). Bu işlevi bir çalışma sayfası formülünde de kullanabilirsiniz: =WindowsDir().

    Dikkat! VBA'da Windows API işlevlerini kullandığınızda sistem çökmelerine şaşırmayın. Test etmeden önce çalışmanızı kaydedin.

    Bir anahtarın durumunu belirleme

    Diyelim ki bir araç çubuğu düğmesinden yürütülecek bir VBA makrosu yazdınız. Kullanıcı düğmeyi tıkladıktan sonra tuşu basılı tutarsa, bu makronun farklı şekilde çalışmasını istiyorsunuz. . Bir tuş vuruşu hakkında bilgi edinmek için , GetKeyState API'sini kullanabilirsiniz. GetKeyState işlevi, belirli bir tuşa basılıp basılmadığını bildirir. İşlev, ilgilendiğiniz anahtarın kodunu temsil eden nVirtKey adlı bir bağımsız değişkene sahiptir.

    Aşağıdaki, Button_Click olay prosedürünü yürütürken bir tuşa basıldığını algılayan bir programdır. . Bir anahtarın durumunu belirlemek için bir sabit (onaltılık bir değer alır) kullanılır ve bu daha sonra GetKeyState işlevine bağımsız değişken olarak kullanılır. GetKeyState, 0'dan küçük bir değer döndürürse, bu, anahtarın preslenmiş; Aksi takdirde anahtar basılmamış. Ctrl ve Alt tuşları için de benzer bir kontrol yapılabilir (Şekil 10).

    Pirinç. 10. Shift, Ctrl ve Alt tuşlarına basıp basmadığını kontrol etme

    VBA işlev kodu ekteki Excel dosyasında bulunabilir.

    Windows API işlevleriyle çalışmak oldukça zor olabilir. Birçok programlama kitabı, karşılık gelen örneklerle birlikte API işlev bildirimi deyimlerini listeler. Kural olarak, bildirim ifadelerini kopyalayabilir ve işlevleri özüne inmeden kullanabilirsiniz. Çoğu Excel VBA programcısı, API işlevlerini çoğu görev için her derde deva olarak görür. İnternette kopyalayıp kendi programınıza yapıştırabileceğiniz oldukça güvenilir yüzlerce örnek bulacaksınız.

    Metin dosyası, Windows API bildirimlerini ve sabitlerini içerir. Bu dosyayı bir metin düzenleyicide açabilir ve uygun bildirimleri bir VBA modülüne kopyalayabilirsiniz.

    Kitaba dayalı. - M: Diyalektik, 2013. - S. 287-323.

    VBA ile tıpkı normal işlevler gibi sayfalarda kullanılabilecek özel bir işlev oluşturabilirsiniz.

    Bu, mevcut Excel özellikleri yeterli olmadığında kullanışlıdır. Bu gibi durumlarda, özel ihtiyaçlarınızı karşılamak için kendi özel işlevinizi (UDF) oluşturabilirsiniz.

    Bu eğitimde, VBA'da kullanıcı tanımlı işlevler oluşturmayı ve kullanmayı ele alacağım.

    VBA'da İşlev Prosedürü nedir?

    Bir İşlev yordamı, hesaplamalar yapan ve bir değer (veya bir değerler dizisi) döndüren VBA kodudur.

    İşlev prosedürünü kullanarak, bir çalışma sayfasında kullanabileceğiniz bir işlev oluşturabilirsiniz (topla veya DÜŞEYARA gibi herhangi bir normal Excel işlevi gibi).

    VBA kullanarak bir İşlev yordamı oluşturduğunuzda, bunu üç şekilde kullanabilirsiniz:

    1. Bağımsız değişkenleri girdi olarak alabildiği ve bir değer veya bir değerler dizisi döndürebildiği çalışma sayfasındaki bir formül olarak.
    2. VBA rutin kodunuzun veya diğer işlev kodunuzun bir parçası olarak.
    3. koşullu biçimlendirmede

    Çalışma sayfasında zaten 450'den fazla yerleşik Excel işlevi bulunsa da, aşağıdaki durumlarda özel bir işleve ihtiyacınız olabilir:

    • Yerleşik işlevler yapmak istediğinizi yapamaz. Bu durumda, gereksinimlerinize göre özel bir işlev oluşturabilirsiniz.
    • Yerleşik işlevler işi halledebilir, ancak formül uzun ve karmaşıktır. Bu durumda, okuması ve kullanması kolay özel bir işlev oluşturabilirsiniz.

    VBA kullanılarak oluşturulan kullanıcı tanımlı işlevlerin, yerleşik işlevlerden önemli ölçüde daha yavaş olabileceğini lütfen unutmayın. Bu nedenle, yerleşik işlevleri kullanarak sonuç alamadığınız durumlar için çok uygundurlar.

    VBA'da İşlev ve Alt Program

    Bir "alt program", bir dizi kodu yürütmenize izin verirken, bir "işlev" bir değer (veya bir değerler dizisi) döndürür.

    Örneğin, bir sayı listeniz varsa (hem pozitif hem de negatif) ve negatif sayıları belirlemek istiyorsanız, burada bir işlev ve bir alt programla şunları yapabilirsiniz.

    Alt program, aralıktaki her hücrede yinelenebilir ve içinde negatif değer bulunan tüm hücreleri seçebilir. Bu durumda, alt program, aralık nesnesinin özelliklerini değiştirmeyi (hücrelerin rengini değiştirerek) tamamlar.

    Özel bir işlev ile ayrı bir sütunda kullanabilirsiniz ve hücredeki değer negatifse TRUE, pozitifse FALSE döndürebilir. Bir işlevle, bir nesnenin özelliklerini değiştiremezsiniz. Bu, işlevin kendisini kullanarak bir hücrenin rengini değiştiremeyeceğiniz anlamına gelir (ancak, özel bir işlevle koşullu biçimlendirmeyi kullanarak bunu yapabilirsiniz).

    VBA'yı kullanarak bir Kullanıcı Tanımlı İşlev (UDF) oluşturduğunuzda, bu işlevi herhangi bir diğer işlev gibi bir çalışma sayfasında kullanabilirsiniz. Bunu "Excel'de Özel İşlevleri Kullanmanın Farklı Yolları" bölümünde daha ayrıntılı olarak ele alacağım.

    VBA'da Basit Bir Özel İşlev Oluşturma

    VBA'da basit bir özel işlev oluşturmama ve size nasıl çalıştığını göstermeme izin verin.

    Aşağıdaki kod, sayısal bölümleri alfanümerik bir dizeden çıkaran bir işlev oluşturur.

    Fonksiyon GetNumeric(Dize Olarak HücreRef) Uzun Dim olarak StringLength As Integer StringLength = Len(CellRef) For i = 1 To StringLength If IsNumeric(Mid(CellRef, i, 1)) Sonra Result = Result & Mid(CellRef, i, 1) Sonraki i GetNumeric = Sonuç Sonu İşlevi

    Yukarıdaki kod bir modülde varsa, bu işlevi bir çalışma kitabında kullanabilirsiniz.

    Aşağıda, GetNumeric adlı bu işlevin Excel'de nasıl kullanılabileceği gösterilmektedir.

    Şimdi size bu fonksiyonun VBA'da nasıl oluşturulduğunu ve nasıl çalıştığını anlatmadan önce bilmeniz gereken birkaç şey var:

    • VBA'da bir işlev oluşturduğunuzda, diğer normal işlevler gibi çalışma kitabı boyunca kullanılabilir hale gelir.
    • Bir işlev adı ve ardından eşittir işareti girdiğinizde, Excel size eşleşen işlevler listesinde işlev adını gösterir. Yukarıdaki örnekte, =Get girdiğimde, Excel bana özel işlevimi içeren bir liste gösterdi.

    Bence bu, Excel'de kullanımı kolay bir işlev oluşturmak için VBA'yı kullanabileceğiniz iyi bir örnek. Aynısını bir formülle de yapabilirsiniz (bu eğitimde gösterildiği gibi), ancak karmaşıklaşır ve anlaşılması zorlaşır. Bu UDF ile sadece bir argüman iletmeniz yeterlidir ve sonucu alırsınız.

    VBA'da Kullanıcı Tanımlı Bir İşlevin Anatomisi

    Yukarıdaki bölümde size kodu verdim ve bir çalışma sayfasında UDF işlevinin nasıl çalıştığını gösterdim.

    Şimdi bu fonksiyonun nasıl oluşturulduğunu görelim. Aşağıdaki kodu VB Editör'deki bir modüle koymanız gerekir. Bu konuyu bölümde işliyorum

    GetNumeric(CellRef As String) as Long işlevi " Bu işlev, bir dizeden sayısal kısmı çıkarır Dim StringLength As Integer StringLength = Len(CellRef) For i = 1 To StringLength If IsNumeric(Mid(CellRef, i, 1)) Sonra Sonuç = Sonuç & Mid(CellRef, i, 1) Sonraki i GetNumeric = Sonuç Son Fonksiyon

    İlk kod satırı "İşlev" kelimesiyle başlar.

    Bu kelime, VBA'ya kodumuzun bir işlev (bir alt program değil) olduğunu söyler. İşlev sözcüğünü, işlevin adı olan GetNumeric takip eder. Bu özelliği kullanmak için sayfada kullanacağımız isim budur.

    • İşlev adı boşluk içermemelidir. Ayrıca, bir hücre referans adıyla çakışan bir işlevi adlandıramazsınız. Örneğin, bir Excel çalışma sayfasındaki bir hücreye de başvurduğu için ABC123 işlevini adlandıramazsınız.
    • İşlevinize mevcut bir işlevle aynı adı vermemelisiniz. Bunu yaparsanız, Excel yerleşik işlevi tercih edecektir.
    • Kelimeleri ayırmak istiyorsanız alt çizgi kullanabilirsiniz. Örneğin, Get_Numeric geçerli bir addır

    İşlev adının ardından parantez içindeki bazı bağımsız değişkenler gelir. Bunlar, fonksiyonumuzun kullanıcıdan ihtiyaç duyduğu argümanlardır. Excel'in yerleşik işlevlerine sağlamamız gereken argümanlar gibi. Örneğin, EĞERSAY işlevinin iki bağımsız değişkeni vardır (aralık ve ölçüt).

    Bağımsız değişkenler parantez içinde belirtilmelidir.

    Örneğimizde yalnızca bir bağımsız değişken vardır - CellRef.

    İşlevin hangi argümanı beklediğini belirtmek de yararlıdır. Bu örnekte, fonksiyona bir hücre referansı ileteceğimiz için, argümanı bir "Range" tipi olarak belirtebiliriz. Bir veri türü belirtmezseniz, VBA bunu bir seçenek olarak ele alacaktır (yani herhangi bir veri türünü kullanabilirsiniz).


    Birden fazla argümanınız varsa, aynı argümanları virgülle ayırarak parantez içinde belirtebilirsiniz. Bu öğreticinin ilerleyen kısımlarında, özel bir işlevde birden çok bağımsız değişkenin nasıl kullanılacağını göreceğiz.

    İşlevin bir "Dize" veri türü olarak listelendiğini unutmayın. Bu, VBA'ya formülün sonucunun String veri türünde olacağını söyleyecektir.

    Burada sayısal bir veri türü kullanabilirim (Uzun veya Çift gibi), ancak bu, döndürülen sayıların aralığını sınırlayacaktır. Genel bir diziden çıkarmam gereken 20 numaralı uzun bir dizim varsa, işlevi Long veya Double olarak bildirmek bir hataya neden olur (çünkü sayı aralığın dışında olacaktır). Bu yüzden fonksiyonun çıktı veri tipini String olarak tuttum.


    Kesme işaretiyle başlayan ikinci kod satırı - yeşil - bir yorumdur. Kod okurken, VBA bu satırı yok sayar. Bunu, kod hakkında bir açıklama veya ayrıntı eklemek için kullanabilirsiniz.


    Üçüncü kod satırı, StringLength değişkenini bir Tamsayı veri türü olarak bildirir. Bu, formül tarafından ayrıştırılan dizenin uzunluğunun değerini sakladığımız bir değişkendir.

    Dördüncü satır, Result değişkenini bir String veri türü olarak bildirir. Bu, sayıları alfanümerik diziden çıkaracağımız değişkendir.


    Beşinci satır, giriş bağımsız değişkenindeki dizenin uzunluğunu "StringLength" değişkenine atar. "CellRef"in, formülü bir çalışma sayfasında kullanırken (veya bu öğreticide daha sonra göreceğimiz VBA'da kullanırken) kullanıcı tarafından sağlanacak argümanı ifade ettiğini unutmayın.


    Altıncı, yedinci ve sekizinci satırlar For Next döngüsünün parçalarıdır. Döngü, giriş bağımsız değişkenindeki karakter sayısı kadar yürütülür. Bu sayı LEN işlevi tarafından verilir ve "StringLength" değişkenine atanır.

    Böylece döngü "1'den Dize Uzunluğuna" gider.

    Döngü içinde, IF deyimi dizedeki her karakteri ayrıştırır ve sayısal ise, bu sayısal karakteri Result değişkenine ekler. Bunu yapmak için VBA'daki MID işlevini kullanır.


    Sondan ikinci kod satırı, işlevin sonucunun değerini atar. İşlevin "Sonuç" değerini hücreye (nereden çağrıldığı) geri döndürmesini sağlayan bu kod satırıdır.


    Son kod satırı End Function'tır. Bu, VBA'ya fonksiyon kodunun burada bittiğini söyleyen gerekli bir kod satırıdır.


    Yukarıdaki kod, VBA'da oluşturulan tipik bir özel işlevin çeşitli bölümlerini açıklar. Aşağıdaki bölümlerde, bu öğeleri inceleyeceğiz ve ayrıca Excel'de bir VBA işlevini yürütmenin farklı yollarını göreceğiz.

    VBA'da özel bir işlevdeki bağımsız değişkenler

    Bir alfasayısal diziden (GetNumeric) sayısal kısmı almak için özel bir işlev oluşturduğumuz yukarıdaki örneklerde, işlev bir bağımsız değişken alacak şekilde tasarlanmıştır.

    Bu bölümde, birden çok bağımsız değişken alan işlevler için bağımsız değişken almayan işlevlerin nasıl oluşturulacağını göstereceğim (hem gerekli hem de isteğe bağlı).

    Herhangi bir bağımsız değişken olmadan VBA'da bir işlev oluşturma

    Bir Excel sayfasında, bağımsız değişken almayan birkaç işlevimiz var (örn. RAND, BUGÜN, ŞİMDİ).

    Bu işlevler giriş bağımsız değişkenlerine bağlı değildir. Örneğin, BUGÜN işlevi geçerli tarihi döndürürken, RAND işlevi 0 ile 1 arasında rastgele bir sayı döndürür.

    Aynı işlevi VBA'da da oluşturabilirsiniz.

    Aşağıda size dosya adını verecek olan kod bulunmaktadır. Herhangi bir argüman almaz çünkü döndürülecek sonuç herhangi bir argümana bağlı değildir.

    Yukarıdaki kod, işlevin sonucunu bir String veri türü olarak tanımlar (sonuç olarak, bir dize olan dosya adını istiyoruz).

    Bu işlev, işleve, işlev bir çalışma sayfasında kullanıldığında döndürülen "ThisWorkbook.Name" değerini atar.

    Dosya kaydedilmişse, dosya uzantısıyla birlikte adı döndürür, aksi halde sadece adı verir.

    Yukarıdakilerin bir sorunu var.

    Dosya adı değişirse, otomatik olarak güncellenmeyecektir. Normalde, giriş bağımsız değişkenleri değiştiğinde işlev güncellenir. Ancak bu işlevde argüman olmadığı için işlev yeniden hesaplama yapmaz (çalışma kitabının adını değiştirseniz bile kapatın ve sonra yeniden açın).

    İsterseniz, Control + Alt + F9 klavye kısayolunu kullanarak yeniden hesaplamayı zorlayabilirsiniz.

    Çalışma sayfasında her değişiklik olduğunda formülün yeniden hesaplanabilmesi için formülde bir kod satırına ihtiyacınız vardır.

    Aşağıdaki kod, işlevin çalışma sayfasında bir değişiklik olduğunda yeniden hesaplamasına neden olur (tıpkı BUGÜN veya RAND işlevi gibi diğer benzer çalışma sayfası işlevleri gibi).

    İşlev WorkbookName() Dizi Olarak Application.Volatile True WorkbookName = ThisWorkbook.Name Son İşlev

    Şimdi çalışma kitabının adını değiştirirseniz, tabloda herhangi bir değişiklik olduğunda veya bu çalışma kitabını tekrar açtığınızda bu işlev güncellenecektir.

    VBA'da bir bağımsız değişkenle işlev oluşturma

    Yukarıdaki bölümlerden birinde, yalnızca bir bağımsız değişken alan bir işlevin nasıl oluşturulacağını gördük (yukarıda açıklanan GetNumeric işlevi).

    Yalnızca bir bağımsız değişken alan başka bir basit işlev oluşturalım.

    Aşağıdaki kod ile oluşturulan fonksiyon, referans alınan metni büyük harfe çevirecektir. Artık Excel'de bunun için zaten bir işlevimiz var ve bu işlev size nasıl çalıştığını gösteriyor. Bunu yapmanız gerekiyorsa yerleşik UPPER işlevini kullanmak daha iyidir.

    İşlev ConvertToUpperCase(CellRef As Range) ConvertToUpperCase = UCase(CellRef) Son İşlev

    Bu işlev, CellRef değişkeninin değerini değiştirmek için VBA'daki UCase işlevini kullanır. Daha sonra ConvertToUpperCase işlevine bir değer atar.

    Bu fonksiyon bir argüman aldığı için burada Application.Volatile kısmını kullanmamıza gerek yok. Bağımsız değişken değişir değişmez, işlev otomatik olarak güncellenir.

    VBA'da birden çok bağımsız değişken içeren bir işlev oluşturma

    Tıpkı çalışma sayfası işlevlerinde olduğu gibi, VBA'da birden çok bağımsız değişken alan işlevler oluşturabilirsiniz.

    Aşağıdaki kod, belirtilen sınırlayıcıdan önceki metni çıkaracak bir işlev yaratacaktır. İki bağımsız değişken alır - metin dizesi ve ayırıcı içeren bir hücreye başvuru.

    Fonksiyon GetDataBeforeDelimiter(CellRef As Range, Delim As String) String olarak Dim Sonuç String olarak Dim DelimPosition As Integer DelimPosition = InStr(1, CellRef, Delim, vbBinaryCompare) - 1 Sonuç = Left(CellRef, DelimPosition) GetDataBeforeDelimiter = Result End Function

    Özel bir işlevde birden fazla bağımsız değişken kullanmanız gerektiğinde, tüm bağımsız değişkenleri parantez içinde virgülle ayırabilirsiniz.

    Her bağımsız değişken için bir veri türü belirtebileceğinizi unutmayın. Yukarıdaki örnekte, "CellRef" bir aralık veri türü olarak ve "Delim", bir String veri türü olarak bildirildi. Herhangi bir veri türü belirtmezseniz, VBA bunu bir veri varyantı olarak kabul eder.

    Bir çalışma sayfasında yukarıdaki işlevi kullandığınızda, metni ilk bağımsız değişken olarak ve çift tırnaklı karakter(ler)i çift tırnak olarak içeren bir hücre başvurusu sağlamanız gerekir.

    Daha sonra VBA'daki INSTR işlevini kullanarak sınırlayıcının konumunu kontrol eder. Bu konum daha sonra sınırlayıcıdan önceki tüm karakterleri çıkarmak için kullanılır (SOL işlevini kullanarak).

    Son olarak, sonucu işleve atar.

    Bu formül mükemmel olmaktan uzaktır. Örneğin metinde olmayan bir sınırlayıcı girerseniz hata verir. Artık hatalardan kurtulmak için çalışma sayfasındaki IFERROR işlevini kullanabilir veya sınırlayıcıyı bulamadığında metnin tamamını döndüren aşağıdaki kodu kullanabilirsiniz.

    İşlev GetDataBeforeDelimiter(CellRef As Range, Delim As String) String Olarak Dim Sonuç Dim Tamsayı Olarak Dim DelimPosition DelimPosition = InStr(1, CellRef, Delim, vbBinaryCompare) - 1 If DelimPosition< 0 Then DelimPosition = Len(CellRef) Result = Left(CellRef, DelimPosition) GetDataBeforeDelimiter = Result End Function

    Bu işlevi daha da optimize edebiliriz.

    Metni (sınırlayıcıdan önceki kısmı çıkarmak istediğiniz) doğrudan işleve girerseniz, bu bir hataya neden olur. Hadi.. dene!

    Aralık veri türü olarak "CellRef" belirttiğimizde bu olur.

    Ya da ayraç hücrenin içinde olsun ve hücre referansını formülde kodlamak yerine kullanmak istiyorsanız, bunu yukarıdaki kodla yapamazsınız. Bunun nedeni, Delim'in bir dize veri türü olarak bildirilmiş olmasıdır.

    İşlevin, kullanıcıdan doğrudan metin girişi veya hücre referanslarını kabul etme esnekliğine sahip olmasını istiyorsanız, veri tipi bildirimini kaldırmanız gerekir. Bu, bağımsız değişkeni, herhangi bir türden bağımsız değişkenleri alıp işleyebilen alternatif bir veri türü olarak oluşturacaktır.

    Aşağıdaki kod işini görecektir:

    İşlev GetDataBeforeDelimiter(CellRef, Delim) As String Dim Result as String Dim DelimPosition As Integer DelimPosition = InStr(1, CellRef, Delim, vbBinaryCompare) - 1 If DelimPosition< 0 Then DelimPosition = Len(CellRef) Result = Left(CellRef, DelimPosition) GetDataBeforeDelimiter = Result End Function

    İsteğe bağlı bağımsız değişkenlerle VBA'da bir işlev oluşturma

    Excel, bazıları isteğe bağlı olan birçok özelliğe sahiptir.

    Örneğin, efsanevi DÜŞEYARA işlevinin 3 zorunlu bağımsız değişkeni ve bir isteğe bağlı bağımsız değişkeni vardır.


    Adından da anlaşılacağı gibi isteğe bağlı bir bağımsız değişken isteğe bağlıdır. Gerekli bağımsız değişkenlerden birini sağlamazsanız, işleviniz size bir hata verir, ancak isteğe bağlı bir bağımsız değişken sağlamazsanız, işleviniz çalışmaya devam eder.

    Ancak isteğe bağlı argümanlar işe yaramaz değildir. Bir dizi seçenek arasından seçim yapmanıza olanak tanırlar.

    Örneğin, DÜŞEYARA işlevinde, dördüncü bir bağımsız değişken belirtmezseniz, DÜŞEYARA yaklaşık bir arama yapar ve son bağımsız değişkeni YANLIŞ (veya 0) olarak belirtirseniz, tam bir eşleşme gerçekleştirir.

    İsteğe bağlı bağımsız değişkenlerin her zaman gerekli tüm bağımsız değişkenlerden sonra gelmesi gerektiğini unutmayın. Başlangıçta ek argümanlarınız olamaz.

    Şimdi isteğe bağlı bağımsız değişkenlerle VBA'da nasıl işlev oluşturulacağını görelim.

    Yalnızca isteğe bağlı bağımsız değişkenli işlev

    Bildiğim kadarıyla, yalnızca isteğe bağlı bağımsız değişkenleri kabul eden yerleşik bir işlev yoktur (yanılıyor olabilirim ama böyle bir işlev düşünemiyorum).

    Ancak VBA ile bir tane oluşturabiliriz.

    Aşağıda, herhangi bir argüman girmezseniz (yani bu alanı boş bırakın) ve bir şey girerseniz "dd-aa-yyyy" formatında size geçerli tarihi verecek bir işlevin kodu verilmiştir - veya bir argüman olarak (yani argümanın boş olmaması için herhangi bir şey).

    Fonksiyon CurrDate(Varyant Olarak İsteğe Bağlı fmt) Dim Sonuç If IsMissing(fmt) Sonra CurrDate = Format(Date, "dd-mm-yyyy") Aksi takdirde CurrDate = Format(Date, "dd mmmm, yyyy") End If End Fonksiyon

    Yukarıdaki işlevin, bağımsız değişkenin eksik olup olmadığını kontrol etmek için IsMissing'i kullandığını unutmayın. IsMissing işlevini kullanmak için isteğe bağlı argüman değişken veri türünde olmalıdır.

    Argüman olarak ne girerseniz girin, yukarıdaki işlev çalışır. Kodda sadece isteğe bağlı argümanın belirtilip belirtilmediğini kontrol ediyoruz.

    Bunu sadece belirli değerleri argüman olarak alıp aksi takdirde bir hata göstererek (aşağıdaki kodda gösterildiği gibi) daha sağlam hale getirebilirsiniz.

    İşlev CurrDate(Varyant Olarak İsteğe Bağlı fmt) Dim Sonuç If IsMissing(fmt) Sonra CurrDate = Format(Tarih, "gg-aa-yyyy") ElseIf fmt = 1 Sonra CurrDate = Format(Tarih, "dd mmaa, yyyy") Aksi takdirde CurrDate = CVErr(xlErrValue) End If End İşlevi

    Yukarıdaki kod, tarihi bağımsız değişken belirtilmezse "gg-aa-yyyy" biçiminde ve bağımsız değişken 1 ise "dd mmaa, yyy" biçiminde görüntüleyen bir işlev oluşturur. Diğer tüm durumlarda, bir hata Atıldı.

    Gerekli ve isteğe bağlı bağımsız değişkenlerle işlev

    Bir diziden sayısal kısmı çıkaran kodu daha önce görmüştük.

    Şimdi hem gerekli hem de isteğe bağlı argümanları kabul eden benzer bir örneğe bakalım.

    Aşağıdaki kod, metin bölümünü bir dizeden çıkaran bir işlev oluşturur. İsteğe bağlı bağımsız değişken DOĞRU ise sonucu büyük harfle döndürür ve isteğe bağlı bağımsız değişken YANLIŞ veya atlanmışsa sonucu olduğu gibi döndürür.

    GetText(CellRef As Range, İsteğe Bağlı TextCase = False) String Olarak Dim StringLength As Integer Dim Sonuç Olarak String StringLength = Len(CellRef) For i = 1 To StringLength Değilse (IsNumeric(Mid(CellRef, i, 1))) Sonra Result = Result & Mid(CellRef, i, 1) Sonraki i TextCase = True ise Result = UCase(Result) GetText = Result End Function

    Yukarıdaki kodda "TextCase" değerini False olarak başlattığımıza dikkat edin (ilk satırdaki parantezlere bakın).

    Bunu yaparak, isteğe bağlı bağımsız değişkenin varsayılan değer olan FALSE ile başlamasını sağladık. Kullanıcı değeri DOĞRU olarak belirtirse, işlev metni büyük harfle döndürür ve kullanıcı isteğe bağlı bağımsız değişkeni YANLIŞ olarak belirtir veya atlarsa, döndürülen metin olduğu gibi kalır.

    Argüman olarak bir dizi ile VBA'da bir işlev oluşturma

    Şimdiye kadar isteğe bağlı/gerekli bağımsız değişkenlere sahip bir işlev oluşturmanın örneklerini gördük, bu bağımsız değişkenler tek bir değerdi.

    Argüman olarak bir dizi alabilen bir işlev de oluşturabilirsiniz. Excel sayfa işlevlerinde TOPLA, DÜŞEYARA, TOPLA, EĞERSAY, vb. gibi dizi bağımsız değişkenlerini alan birçok işlev vardır.

    Belirtilen hücre aralığındaki tüm çift sayıların toplamını veren bir işlev oluşturan kod aşağıdadır.

    İşlev AddEven(CellRef as Range) CellRef'teki Her Hücre İçin Aralık Olarak Hücreyi Dim IsNumeric(Hücre.Value) ise, Cell.Value Mod 2 = 0 ise, Result = Result + Cell.Value End If End If Sonraki Cell AddEven = Result End işlev

    Bu işlevi bir çalışma sayfasında kullanabilir ve bağımsız değişken olarak sayıları kullanan bir hücre aralığı belirtebilirsiniz. İşlev bir değer döndürür - tüm çift sayıların toplamı (aşağıda gösterildiği gibi).


    Yukarıdaki fonksiyonda tek bir değer yerine bir dizi (A1:A10) sağladık. Bunun çalışması için, bağımsız değişken veri türünüzün bir dizi alabildiğinden emin olmanız gerekir.

    Yukarıdaki kodda, CellRef bağımsız değişkenini bir Aralık (giriş olarak bir dizi alabilir) olarak belirttim. Değişken veri türünü burada da kullanabilirsiniz.

    Kodun, her hücrede yinelenen ve sayının farklı olup olmadığını kontrol eden bir Her Biri İçin döngüsü vardır. Değilse, hiçbir şey olmaz ve bir sonraki hücreye geçer. Eğer bir sayı ise, çift olup olmadığını kontrol eder (MOD fonksiyonunu kullanarak).

    Sonunda, tüm çift sayılar toplanır ve toplam, işleve geri döndürülür.

    Belirsiz sayıda bağımsız değişken içeren bir işlev oluşturma

    VBA'da bazı işlevler oluştururken, kullanıcının sağlamak istediği bağımsız değişkenlerin tam sayısını bilemeyebilirsiniz. Bu nedenle, gerektiği kadar argüman alabilen ve bunları bir sonuç döndürmek için kullanabilen bir işlev oluşturmak gerekir.

    Böyle bir çalışma sayfası işlevine örnek TOPLA işlevidir. Birden fazla argüman sağlayabilirsiniz (bunun gibi):

    =TOPLA(A1,A2:A4,B1:B20)

    Yukarıdaki işlev, bu bağımsız değişkenlerin tümüne değer katacaktır. Ayrıca bunun tek bir hücre veya bir hücre dizisi olabileceğini unutmayın.

    Son argümanı (veya tek argümanı) isteğe bağlı olarak sağlayarak VBA'da böyle bir işlev oluşturabilirsiniz. Ayrıca, bu isteğe bağlı bağımsız değişkenden önce "ParamArray" anahtar sözcüğü gelmelidir.

    ParamArray, istediğiniz kadar argüman almanıza izin veren bir değiştiricidir. Bir bağımsız değişkenden önce ParamArray sözcüğünü kullanmanın bağımsız değişkeni isteğe bağlı hale getirdiğini unutmayın. Ancak burada "Opsiyonel" kelimesini kullanmanıza gerek yoktur.

    Şimdi, rastgele sayıda bağımsız değişken alabilen ve tüm sayıları belirtilen bağımsız değişkenlere ekleyen bir işlev oluşturalım:

    İşlev AddArguments(ParamArray arglist() As Variant) arglist'teki Her arg için AddArguments = AddArguments + arg Sonraki arg Son İşlev

    Yukarıdaki işlev, herhangi bir sayıda argüman alabilir ve sonucu elde etmek için bu argümanları ekleyebilir.

    Bağımsız değişken olarak yalnızca bir değer, hücre başvurusu, boole veya ifade kullanabileceğinizi unutmayın. Argüman olarak bir dizi sağlayamazsınız. Örneğin argümanlarınızdan biri D8:D10 ise bu formül size hata verecektir.

    Her iki çok hücreli bağımsız değişkeni de kullanmak istiyorsanız, aşağıdaki kodu kullanmanız gerekir:

    İşlev AddArguments(ParamArray arglist() As Variant) arg listesindeki her arg için arg içindeki her hücre için AddArguments = AddArguments + Hücre Sonraki Hücre Sonraki arg Son İşlev

    Bu formülün birden çok hücre ve dizi referansıyla çalıştığını, ancak sabit kodlanmış değerleri veya ifadeleri işleyemeyeceğini unutmayın. Bu koşulları kontrol ederek ve işleyerek daha sağlam bir işlev oluşturabilirsiniz, ancak amaç bu değildir.

    Buradaki amaç size ParamArray'in nasıl çalıştığını göstermektir, böylece bir işlevde sınırsız sayıda bağımsız değişkene izin verebilirsiniz. Yukarıdaki kodda oluşturulandan daha iyi bir işleve ihtiyacınız varsa, çalışma sayfasındaki TOPLA işlevini kullanın.

    Dizi döndüren bir işlev oluşturma

    Şimdiye kadar tek bir değer döndüren fonksiyonlar gördük.

    VBA ile, tüm değer dizisini içeren bir değişken döndüren bir işlev oluşturabilirsiniz.

    Dizi formülleri, Excel sayfalarında yerleşik işlevler olarak da mevcuttur. Excel'deki dizi formüllerine aşina iseniz, bunların Control + Shift + Enter tuşları kullanılarak girildiğini bilirsiniz (yalnızca Enter değil). Dizi formülleri hakkında daha fazla bilgiyi buradan edinebilirsiniz. Dizi formüllerini bilmiyorsanız merak etmeyin, okumaya devam edin.

    Üç sayıdan (1,2,3) oluşan bir dizi döndüren bir formül oluşturalım.

    Aşağıdaki kod işini görecektir.

    Fonksiyon ThreeNumbers() Varyant Olarak Dim NumberValue(1 - 3) NumberValue(1) = 1 NumberValue(2) = 2 NumberValue(3) = 3 ThreeNumbers = NumberValue End Function

    Yukarıdaki kodda, ThreeNumbers işlevini bir seçenek olarak belirttik. Bu, bir dizi değer içermesine izin verir.

    NumberValue değişkeni, 3 elemanlı bir dizi olarak bildirilir. Üç değer içerir ve bunu "Üç Sayı" işlevine atar.

    Bu işlevi bir çalışma sayfasında kullanabilirsiniz. Bu işlevi yazın ve Control + Shift + Enter tuşlarına basın (Control ve Shift tuşlarını basılı tutun ve ardından Enter'a basın).


    Bunu yaptığınızda, hücrede 1 döndürür, ancak aslında üç değeri de içerir. Bunu kontrol etmek için aşağıdaki formülü kullanın:

    =MAKS(ÜçSayı())

    Control + Shift + Enter ile yukarıdaki işlevi kullanın. Özel işlevimiz ThreeNumbers'ın sonucu olarak üç sayı alan Max işlevi tarafından döndürülen dizideki en büyük değerler olduğundan, sonucun şimdi 3 olduğunu fark edeceksiniz.

    Aşağıdaki kodda gösterildiği gibi, bir dizi ay adı döndüren bir işlev oluşturmak için aynı tekniği kullanabilirsiniz:

    Aylar() Varyant Olarak İşlev Ay Adı(1 - 12) AyAdı(1) = "Ocak" AyAdı(2) = "Şubat" AyAdı(3) = "Mart" AyAdı(4) = "Nisan" AyAdı(5) = "May" MonthName(6) = "Haziran" MonthName(7) = "Temmuz" MonthName(8) = "Ağustos" MonthName(9) = "Eylül" MonthName(10) = "Ekim" MonthName(11) = "Kasım " MonthName(12) = "Aralık" Months = MonthName Bitiş İşlev

    Şimdi, bir Excel sayfasına =Aylar() işlevini girip Control + Shift + Enter tuşlarını kullandığınızda, ay adlarının tüm dizisini döndürür. Dizideki ilk değer olduğu için hücrede yalnızca Ocak'ı gördüğünüzü unutmayın. Bu, bir dizinin yalnızca bir değer döndürdüğü anlamına gelmez.


    Size tüm değerleri döndürdüğünü göstermek için şunu yapın - formülü içeren hücreyi seçin, formül çubuğuna gidin, tüm formülü seçin ve F9'a basın. Bu size fonksiyonun döndürdüğü tüm değerleri gösterecektir.

    Tüm ay adlarının listesini tek seferde almak için aşağıdaki INDEX formülünü kullanarak bunu kullanabilirsiniz.

    =DİZİN(Ay(),SATIR())


    Bu nedenle, "Aylar" işlevini oluşturduğumuz aynı kod, aşağıda gösterildiği gibi kısalır:

    Fonksiyon Aylar() Varyant Olarak Aylar = Array("Ocak", "Şubat", "Mart", "Nisan", "Mayıs", "Haziran", _ "Temmuz", "Ağustos", "Eylül", "Ekim" , "Kasım", "Aralık") Son İşlev

    Yukarıdaki işlev, değerleri doğrudan o işleve atamak için Array işlevini kullanır.

    Yukarıda oluşturulan tüm işlevlerin yatay bir değer dizisi döndürdüğünü unutmayın. Bu, 12 yatay hücre seçerseniz (A1:L1 deyin) ve A1 hücresine =Aylar() formülünü girerseniz, tüm ay adlarını alacağınız anlamına gelir.

    Peki ya bu değerleri dikey bir hücre aralığında istiyorsanız.

    Bunu, çalışma sayfasındaki TRANSPOSE formülünü kullanarak yapabilirsiniz.

    Sadece 12 dikey hücre (bitişik) seçin ve aşağıdaki formülü girin.


    Excel'de özel bir işlevin kapsamını anlama

    Bir işlevin iki kapsamı olabilir - Genel veya Özel.

    • Paylaşılan kapsam, işlevin çalışma kitabındaki tüm sayfalarda ve ayrıca çalışma kitabındaki tüm modüllerdeki tüm prosedürlerde (yardımcı ve işlevsel) kullanılabilir olduğu anlamına gelir. Bu, bir işlevi bir alt programdan çağırmak istediğinizde kullanışlıdır (bunun nasıl yapıldığını bir sonraki bölümde göreceğiz).
    • Özel kapsam, işlevin yalnızca içinde bulunduğu modülde mevcut olduğu anlamına gelir. Diğer modüllerde kullanamazsınız. Çalışma sayfasındaki işlevler listesinde de görmezsiniz. Örneğin, işlev adınız "Aylar()" ise ve işlevi Excel'de girerseniz (= işaretinden sonra), size işlev adını göstermez. Ancak, formülün adını girerseniz yine de kullanabilirsiniz.

    Hiçbir şey belirtmezseniz, işlev varsayılan olarak geneldir.

    Aşağıdaki, özel bir işlev olan bir işlevdir:

    Özel İşlev WorkbookName() Dizi Olarak WorkbookName = ThisWorkbook.Name Son İşlev

    Bu fonksiyonu aynı modüllerdeki alt program ve prosedürlerde kullanabilirsiniz ancak diğer modüllerde kullanamazsınız. Bu işlev ayrıca sayfada görüntülenmeyecektir.

    Aşağıdaki kod bu işlevi herkese açık hale getirecektir. Bu aynı zamanda sayfada görüntülenecektir.

    İşlev ÇalışmaKitabıAdı() Dizi Olarak ÇalışmaKitabıAdı = BuÇalışmaKitabı.Adı Son İşlev

    Excel'de Özel Bir İşlevi Kullanmanın Farklı Yolları

    VBA'da özel bir işlev oluşturduğunuzda, onu birçok farklı şekilde kullanabilirsiniz.

    Öncelikle bir sayfada fonksiyonların nasıl kullanılacağına bakalım.

    Çalışma Sayfalarında Özel İşlevleri Kullanma

    Bir çalışma sayfasında VBA'da oluşturulan bir işlevi kullanmanın örneklerini zaten gördük.

    Tek yapmanız gereken bir işlev adı girmek ve bu ad intellisense'de görünecektir.

    Bir işlevin çalışma sayfasında görünebilmesi için Genel işlev olması gerektiğini unutmayın (yukarıdaki bölümde açıklandığı gibi).

    Özel bir işlev eklemek için İşlev Ekle iletişim kutusunu da kullanabilirsiniz (aşağıdaki adımları kullanarak). Bu sadece genel işlevler için çalışacaktır.

    • "Veri" sekmesine gidin.
    • İşlev Ekle'ye tıklayın.

    • İşlev Ekle iletişim kutusunda, kategori olarak Kullanıcı Tanımlı'yı seçin. Bu seçenek yalnızca VB editöründe bir işleviniz (ve bir Genel işleviniz) olduğunda görünür.

    • Tüm genel özel işlevler listesinden bir işlev seçin.
    • Tamam'ı tıklayın

    Yukarıdaki adımlar, işlevi sayfaya ekleyecektir. Ayrıca, bağımsız değişkenler ve sonuç hakkında size ayrıntılı bilgi verecek olan "Fonksiyon Bağımsız Değişkenleri" iletişim kutusunu da görüntüler.


    Kullanıcı tanımlı bir işlevi, Excel'deki diğer tüm işlevler gibi kullanabilirsiniz. Bu ayrıca onu diğer yerleşik Excel işlevleriyle kullanabileceğiniz anlamına gelir. Örneğin. Aşağıdaki formül, çalışma kitabının başlığını büyük harfle verecektir:

    =UPPER(Çalışma KitabıAdı())

    VBA Prosedürlerinde ve İşlevlerinde Özel İşlevleri Kullanma

    Bir fonksiyon oluşturduktan sonra, onu diğer alt programlarda da kullanabilirsiniz.

    Fonksiyon Public ise, aynı veya başka bir modüldeki herhangi bir prosedürde kullanılabilir. Özel ise, sadece aynı modülde kullanılabilir.

    Çalışma kitabının adını döndüren işlev aşağıdadır.

    İşlev ÇalışmaKitabıAdı() Dizi Olarak ÇalışmaKitabıAdı = BuÇalışmaKitabı.Adı Son İşlev

    Aşağıdaki prosedür, işlevi çağırır ve ardından adı bir mesaj kutusunda görüntüler.

    Alt ShowWorkbookName() MsgBox WorkbookName End Sub

    Bir işlevi başka bir işlevden de çağırabilirsiniz.

    Aşağıdaki kodlarda birinci kod çalışma kitabının adını, ikincisi ise birinci işlevi çağırarak adını büyük harfle döndürür.

    İşlev WorkbookName() String Olarak WorkbookName = ThisWorkbook.Name Son İşlev Function WorkbookNameinUpper() WorkbookNameinUpper = UCase(WorkbookName) End İşlev

    Diğer çalışma kitaplarından özel bir işlev çağırma

    Bir çalışma kitabında bir işleviniz varsa, bu işlevi diğer çalışma kitaplarında da çağırabilirsiniz.

    Bunu yapmanın birkaç yolu vardır:

    1. Eklenti oluştur
    2. Kişisel Makroda Kaydetme İşlevi
    3. Başka bir çalışma kitabından bir işleve bağlantı.

    Eklenti oluştur

    Eklentiyi oluşturup yükleyerek, tüm kitaplarda kullanılabilen özel bir özelliğe sahip olacaksınız.

    "GetNumeric" adlı özel bir işlev oluşturduğunuzu ve bunun tüm çalışma kitaplarında olmasını istediğinizi varsayalım. Bunu yapmak için yeni bir çalışma kitabı oluşturun ve işlev kodunu bu yeni çalışma kitabının bir modülüne yerleştirin.

    • "Dosya" sekmesine tıklayın ve "Farklı Kaydet"e tıklayın.
    • Farklı Kaydet iletişim kutusunda, Farklı Kaydet türünü .xlam olarak değiştirin. Dosyaya verdiğiniz ad, eklentinizin adı olacaktır. Bu örnekte, dosya GetNumeric adıyla kaydedilmiştir.
      • Kaydedildiği dosyanın yolunun otomatik olarak değiştiğini fark edeceksiniz. Varsayılanı kullanabilir veya isterseniz değiştirebilirsiniz.

    • Yeni bir Excel çalışma kitabı açın ve Geliştirici sekmesine gidin.
    • "Excel Eklentileri" seçeneğini seçin.

    • Eklentiler iletişim kutusunda, kaydedilen dosyayı bulun ve bulun ve Tamam'ı tıklayın.

    Eklenti şimdi etkinleştirildi.

    Artık tüm çalışma kitaplarında özel işlevleri kullanabilirsiniz.

    Bir İşlevi Kişisel Makro Kitabına Kaydetme

    Kişisel Makro Çalışma Kitabı, Excel uygulamasını her açtığınızda açılan, sisteminizde bulunan gizli bir çalışma kitabıdır.

    Burası, makroları depolayabileceğiniz ve bunlara herhangi bir çalışma kitabından erişebileceğiniz yerdir. Burası, sık kullanmak istediğiniz makroları saklamak için harika bir yerdir.

    Varsayılan olarak, Excel'inizin kişisel bir makro çalışma kitabı yoktur. Bir makro kaydedip kişisel makro defterinize kaydederek oluşturmanız gerekir.

    Başka bir çalışma kitabından bir işleve bağlantı

    İlk iki yöntem (eklenti oluşturma ve kişisel makro çalışma kitabı kullanma) her durumda işe yararken, başka bir çalışma kitabından bir işleve başvurmak istiyorsanız o çalışma kitabının açık olması gerekir.

    "Formula Workbook" adlı bir çalışma kitabınız olduğunu ve "GetNumeric" adlı bir işlevi olduğunu varsayalım.

    Bu işlevi başka bir çalışma kitabında kullanmak için (formül içeren bir çalışma kitabı açıkken), aşağıdaki formülü kullanabilirsiniz:

    ='Formüllü Çalışma Kitabı'!GetNumeric(A1)

    Yukarıdaki formül, Formüllü Çalışma Kitabı dosyasındaki özel işlevi kullanacak ve size sonucu verecektir.

    Kitap adı boşluk içerdiğinden, tek tırnak içine alınması gerektiğini unutmayın.

    VBA Çıkış Bildirimini Kullanma

    Kod çalışırken bir işlevden çıkmak istiyorsanız, bunu Exit Function deyimi ile yapabilirsiniz.

    Aşağıdaki kod, bir alfasayısal metin dizesinden ilk üç sayısal karakteri çıkarır. Üç karakter alır almaz işlev sonlandırılır ve sonucu döndürür.

    Function GetNumericFirstThree(CellRef As Range) Kadar Uzun Dim StringLength As Integer StringLength = Len(CellRef) i = 1 için StringLength'e J = 3 ise Sonra Çıkış Fonksiyonu If IsNumeric(Mid(CellRef, i, 1)) Sonra J = J + 1 Result = Result & Mid(CellRef, i, 1) GetNumericFirstThree = Result End If Next if End Fonksiyon

    Yukarıdaki işlev, sayısal karakter sayısını kontrol eder ve 3 sayısal karakter aldığında bir sonraki döngüde işlevden çıkar.

    Özel bir işlevde hata ayıklama

    VBA'da özel bir işlevde hata ayıklarken kullanabileceğiniz birkaç yöntem vardır:

    Mesaj kutusuyla özel bir işlevde hata ayıklama

    Belirli bir değere sahip bir mesaj kutusu göstermek için bir işlev kullanın.

    Görüntülenen değer, kontrol etmek istediğiniz şeye bağlı olabilir. Örneğin, kodun çalışıp çalışmadığını kontrol etmek isterseniz herhangi bir mesaj çalışır ve döngülerin çalışıp çalışmadığını kontrol etmek isterseniz, belirli bir değeri veya döngü sayacını görüntüleyebilirsiniz.

    Kesme noktası ayarlayarak özel bir işlevde hata ayıklama

    Her satırda adım adım ilerleyebilmek için bir kesme noktası belirleyin. Kesme noktası ayarlamak için istediğiniz satırı seçin ve F9'a basın veya kod satırlarının solundaki gri dikey alana tıklayın. Her iki yöntem de bir kesme noktası ekler (gri alanda kırmızı bir nokta görürsünüz).


    Bir kesme noktası ayarlayıp bir işlev yürüttüğünüzde, kesme noktası satırına gider ve sonra durur. Artık kodu F8 tuşu ile görüntüleyebilirsiniz. Koddaki bir sonraki satıra gitmek için F8'e bir kez basın.

    Kodda Debug.Print ile özel bir işlevde hata ayıklama

    Anında pencerede belirtilen değişkenlerin/argümanların değerlerini almak için kodunuzdaki Debug.Print deyimini kullanabilirsiniz.

    Örneğin, aşağıdaki kodda, "j" ve "Sonuç" olmak üzere iki değişkenin değerini almak için Debug.Print'i kullandım.

    Function GetNumericFirstThree(CellRef As Range) Kadar Uzun Dim StringLength As Integer StringLength = Len(CellRef) i = 1 için StringLength'e J = 3 ise Sonra Çıkış Fonksiyonu If IsNumeric(Mid(CellRef, i, 1)) Sonra J = J + 1 Result = Result & Mid(CellRef, i, 1) Debug.Print J, Result GetNumericFirstThree = Sonuç End If Next i End Function

    Bu kod yürütüldüğünde, hemen pencerede aşağıdakileri gösterir.

    Excel Yerleşik İşlevleri vs VBA Kullanıcı Tanımlı İşlev

    VBA'da oluşturulan özel işlevler yerine Excel'in yerleşik işlevlerini kullanmanın birçok güçlü avantajı vardır.

    • Yerleşik işlevler, VBA işlevlerinden çok daha hızlıdır.
    • VBA fonksiyonlarını kullanarak bir rapor/dashboard oluşturup bunu bir müşteriye/meslektaşa gönderdiğinizde, makroların etkin olup olmadığı konusunda endişelenmelerine gerek kalmaz. Bazı durumlarda, istemciler/müşteriler (yalnızca makroları etkinleştirmelerini isteyen) sarı bir çubuk uyarısı görerek korkarlar.
    • Yerleşik Excel işlevleriyle dosya uzantıları konusunda endişelenmenize gerek yok. Çalışma kitabınızda makrolar veya kullanıcı tanımlı işlevler varsa, bunları .xlsm biçiminde kaydetmeniz gerekir.

    Excel'in yerleşik işlevlerini kullanmak için pek çok iyi neden olsa da, özel işlev kullanmanın daha iyi olduğu bazı durumlar vardır.

    • Satır içi formülünüz çok büyük ve karmaşıksa, özel bir işlev kullanmak daha iyidir. Formülleri güncellemek için başka birine ihtiyacınız olduğunda bu daha da alakalı hale gelir. Örneğin, birçok farklı işlevden oluşan devasa bir formülünüz varsa, hücre başvurusunu değiştirmek bile sıkıcı ve hataya açık olabilir. Bunun yerine, yalnızca bir veya iki bağımsız değişken alan ve arka ucun tüm zor işini yapan özel bir işlev oluşturabilirsiniz.
    • Yerleşik Excel işlevleriyle yapılamayan bir şey yapmanız gerektiğinde. Bir diziden tüm sayısal karakterleri çıkarmak istediğinizde buna bir örnek verilebilir. Bu gibi durumlarda, özel bir gar işlevi kullanmanın yararları, dezavantajlarından ağır basar.

    Özel işlev için VBA kodunun nereye yerleştirileceği

    Özel bir işlev oluşturduğunuzda, işlevi kullanmak istediğiniz çalışma kitabının kod penceresine kodu yerleştirmeniz gerekir.

    Çalışma kitabına "GetNumeric" işlevinin kodunu yerleştirmek için yönergeler aşağıdadır.


    Kendi VBA işlevlerinizi oluşturmaya başlamadan önce, Excel VBA'nın kodunuzu yazarken kullanabileceğiniz önceden oluşturulmuş yerleşik işlevlerden oluşan zengin bir koleksiyona sahip olduğunu bilmekte fayda var.

    Bu işlevlerin bir listesi VBA düzenleyicisinde görüntülenebilir:

    • Bir Excel çalışma kitabı açın ve VBA düzenleyicisini başlatın (bunu yapmak için tıklayın alt+F11) ve ardından düğmesine basın. F2.
    • Ekranın sol üst kısmındaki açılır listeden bir kitaplık seçin VBA.
    • Yerleşik VBA sınıflarının ve işlevlerinin bir listesi görünecektir. Kısa açıklamasını pencerenin altında görüntülemek için işlev adına tıklayın. basarak F1 o özellik için çevrimiçi yardım sayfasını açacaktır.

    Ek olarak, yerleşik VBA işlevlerinin tam listesi örneklerle birlikte Visual Basic Developer Center sitesinde bulunabilir.

    VBA'da özel prosedürler "İşlev" ve "Alt"

    Excel Visual Basic'te, belirli bir görevi gerçekleştiren bir dizi komut bir yordama yerleştirilir. işlev(İşlev) veya Alt(Alt program). Prosedürler arasındaki temel fark işlev Ve Alt prosedür bu mu işlev sonuç, prosedür döndürür Alt- HAYIR.

    Bu nedenle, eylemler gerçekleştirmeniz ve bir sonuç almanız gerekiyorsa (örneğin, birkaç sayıyı toplayın), o zaman prosedür genellikle kullanılır. işlev ve bazı eylemleri basitçe gerçekleştirmek için (örneğin, bir hücre grubunun formatını değiştirmek), prosedürü seçmeniz gerekir. Alt.

    Argümanlar

    Bağımsız değişkenler kullanılarak VBA prosedürlerine çeşitli veriler aktarılabilir. Argüman listesi, bir prosedür bildirilirken belirtilir. Örneğin, prosedür Alt VBA'da, seçilen aralıktaki her hücreye verilen tamsayıyı (Tamsayı) ekler. Bu sayıyı, aşağıdaki gibi bir argüman kullanarak prosedüre iletebilirsiniz:

    Sub AddToCells(i As Integer) ... End Sub

    Prosedürler için argümanlara sahip olmanın işlev Ve Alt VBA'da isteğe bağlıdır. Bazı prosedürler bağımsız değişken gerektirmez.

    İsteğe Bağlı Argümanlar

    VBA prosedürleri isteğe bağlı bağımsız değişkenlere sahip olabilir. Bunlar, kullanıcının isterse belirtebileceği argümanlardır ve atlanırlarsa prosedür onlar için varsayılan değerleri kullanır.

    Önceki örneğe dönersek, bir işleve tamsayı bağımsız değişkeni isteğe bağlı yapmak için şöyle bildirilir:

    Sub AddToCells(Tamsayı Olarak İsteğe Bağlı = 0)

    Bu durumda, tamsayı bağımsız değişkeni Ben varsayılan olarak 0 olacaktır.

    Bir prosedürde, tümü bağımsız değişken listesinin sonunda listelenen birkaç isteğe bağlı bağımsız değişken olabilir.

    Argümanları değere ve referansa göre geçirme

    VBA'daki argümanlar bir prosedüre iki şekilde iletilebilir:

    • ByVal– bir bağımsız değişkeni değere göre iletmek. Bu, yordama yalnızca değerin (yani bağımsız değişkenin bir kopyası) iletildiği ve bu nedenle yordamın içindeki bağımsız değişkende yapılan tüm değişikliklerin yordamdan çıkıldığında kaybolacağı anlamına gelir.
    • ByRef- bir bağımsız değişkeni referans olarak iletmek. Yani, bellekteki argüman konumunun gerçek adresi prosedüre iletilir. Prosedür içinde bir bağımsız değişkende yapılan herhangi bir değişiklik, prosedürden çıkıldığında kaydedilecektir.

    Anahtar kelimeleri kullanma ByVal veya ByRef yordam bildiriminde, bağımsız değişkenin yordama nasıl iletileceğini belirtebilirsiniz. Bu, aşağıdaki örneklerde gösterilmiştir:

    VBA'daki argümanların varsayılan olarak referans olarak iletildiğini unutmayın. Başka bir deyişle, anahtar kelimeler kullanılmadığında ByVal veya ByRef, ardından bağımsız değişken başvuruya göre iletilir.

    Prosedürlere devam etmeden önce işlev Ve Alt daha ayrıntılı olarak, bu iki prosedür arasındaki özelliklere ve farklılıklara bir kez daha göz atmak faydalı olacaktır. Aşağıdakiler, VBA prosedürlerinin kısa tartışmalarıdır işlev Ve Alt ve basit örnekler gösterilmiştir.

    VBA prosedürü "İşlev"

    VBA editörü prosedürü tanır işlev

    İşlev ... Son İşlev

    Daha önce de belirtildiği gibi, prosedür işlev VBA'da (aksine Alt) bir değer döndürür. Dönüş değerleri için aşağıdaki kurallar geçerlidir:

    • Dönüş değerinin veri türü, prosedürün başlığında bildirilmelidir. işlev.
    • Dönüş değerini içeren değişken, prosedürle aynı şekilde adlandırılmalıdır. işlev. Bu değişken, her zaman prosedürün ayrılmaz bir parçası olarak var olduğundan ayrı olarak bildirilmesi gerekmez. işlev.

    Bu, aşağıdaki örnekte iyi bir şekilde gösterilmiştir.

    VBA Fonksiyon Örneği: 3 Sayıda Matematiksel İşlem Yapmak

    Aşağıda bir VBA prosedür kodu örneği verilmiştir. işlev türünden üç bağımsız değişken alan Çift(çift duyarlıklı kayan noktalı sayılar). Sonuç olarak, prosedür başka bir tür türü döndürür. Çift ilk iki bağımsız değişkenin toplamından üçüncü bağımsız değişkene eşittir:

    Fonksiyon SumEksi(dNum1 Çift Olarak, dNum2 Çift Olarak, dNum3 Çift Olarak) Çift Olarak SumMinus = dNum1 + dNum2 - dNum3 Son Fonksiyon

    Bu çok basit VBA prosedürü işlev argümanlar aracılığıyla verilerin bir prosedüre nasıl iletildiğini gösterir. Prosedür tarafından döndürülen veri tipinin şu şekilde tanımlandığını görebilirsiniz. Çift(kelimeler söylüyor çift ​​olarak bağımsız değişkenler listesinden sonra). Bu örnek ayrıca prosedürün sonucunun nasıl olduğunu gösterir. işlev prosedür adıyla aynı ada sahip bir değişkende saklanır.

    VBA prosedürünü "İşlev" olarak çağırma

    Eğer yukarıdaki basit prosedür işlev Visual Basic düzenleyicisindeki bir modüle eklendiğinde, diğer VBA yordamlarından çağrılabilir veya bir Excel çalışma kitabındaki bir çalışma sayfasında kullanılabilir.

    Başka bir prosedürden VBA prosedürünü "İşlev" olarak adlandırın

    prosedür işlev o prosedürü bir değişkene atayarak başka bir VBA prosedüründen çağrılabilir. Aşağıdaki örnek, bir prosedür çağrısını göstermektedir. ToplamEksi, yukarıda tanımlanmıştır.

    Alt ana() Çift toplam olarak Dim toplamı = SumMinus(5, 4, 3) End Sub

    Bir çalışma sayfasından VBA prosedürünü "İşlev" olarak adlandırın

    VBA prosedürü işlev diğer tüm yerleşik Excel işlevleriyle aynı şekilde bir Excel çalışma sayfasından çağrılabilir. Bu nedenle, önceki örnekte oluşturulan prosedür işlevToplamEksi bir çalışma sayfası hücresine aşağıdaki ifadeyi girerek çağrılabilir:

    ToplamEksi(10, 5, 2)

    VBA alt prosedürü

    VBA editörü önünde bir prosedür olduğunu anlıyor. Alt, aşağıdaki açılış ve kapanış ifadeleri arasına alınmış bir grup komutla karşılaştığında:

    Alt... Son Alt

    VBA prosedürü "Sub": Örnek 1. Seçilen hücre aralığında hizalamayı ortalayın ve yazı tipi boyutunu değiştirin

    Basit bir VBA prosedürü örneği düşünün Alt, görevi seçilen hücre aralığının biçimlendirmesini değiştirmek olan. Hücreler ortalanır (hem dikey hem de yatay olarak) ve yazı tipi boyutu kullanıcı tarafından belirlenen şekilde değiştirilir:

    Alt Format_Centered_And_Sized(İsteğe bağlı iFontSize As Integer = 10) Selection.HorizontalAlignment = xlCenter Selection.VerticalAlignment = xlCenter Selection.Font.Size = iFontSize End Sub

    Bu prosedür Alt eylemleri gerçekleştirir ancak bir sonuç döndürmez.

    Bu örnek ayrıca bir İsteğe Bağlı bağımsız değişken kullanır iFontSize. eğer argüman iFontSize prosedüre geçilmedi Alt, bu durumda varsayılan değeri 10'dur. Ancak, bağımsız değişken iFontSize prosedüre geçildi Alt, ardından seçilen hücre aralığı, kullanıcı tarafından belirtilen yazı tipi boyutuna ayarlanacaktır.

    VBA prosedürü "Alt": Örnek 2 - Ortaya hizalayın ve seçilen hücre aralığındaki yazı tipine kalın uygulayın

    Aşağıdaki prosedür az önce tartışılan prosedüre benzer, ancak bu sefer yeniden boyutlandırmak yerine seçilen hücre aralığına kalın bir yazı tipi stili uyguluyor. Bu örnek bir prosedürdür Alt, hiçbir bağımsız değişken almaz:

    Alt Format_Centered_And_Bold() Selection.HorizontalAlignment = xlCenter Selection.VerticalAlignment = xlCenter Selection.Font.Bold = True End Sub

    Excel VBA'da "Sub" Prosedürünü Çağırma

    Başka bir prosedürden VBA prosedürünü "Sub" olarak çağırın

    Bir VBA prosedürünü çağırmak için Alt başka bir VBA prosedüründen, anahtar kelimeyi yazmanız gerekir Arama, prosedür adı Alt ve ayrıca parantez içinde prosedürün argümanlarıdır. Bu, aşağıdaki örnekte gösterilmiştir:

    Alt ana() Çağrı Biçimi_Ortalanmış_And_Sized(20) Son Alt

    eğer prosedür Format_Centered_And_Sized birden fazla bağımsız değişken varsa, bunlar virgülle ayrılmalıdır. Bunun gibi:

    Alt ana() Çağrı Biçimi_Ortalanmış_And_Sized(arg1, arg2, ...) End Sub

    Bir çalışma sayfasından VBA prosedürünü "Sub" olarak çağırın

    prosedür Alt bir prosedürle yapılabildiği gibi doğrudan bir Excel sayfa hücresine girilemez işlevçünkü prosedür Alt bir değer döndürmez. Ancak prosedürler Alt bağımsız değişkeni olmayan ve olarak bildirilen Halk(aşağıda gösterildiği gibi) çalışma sayfasının kullanıcıları tarafından kullanılabilir. Dolayısıyla, yukarıda tartışılan basit prosedürler Alt Visual Basic Düzenleyicisi'ndeki bir modüle yerleştirildiğinde, prosedür Format_Centered_And_Bold bir Excel çalışma sayfasında kullanıma hazır olacak ve prosedür Format_Centered_And_Sized– bağımsız değişkenleri olduğu için kullanılamayacak.

    İşte bir prosedürü çalıştırmanın (veya yürütmenin) kolay bir yolu Alt, çalışma sayfasından erişilebilir:

    • Tıklamak alt+F8(Tuşa basın alternatif ve basılı tutarken tuşuna basın F8).
    • Görünen makro listesinde çalıştırmak istediğinizi seçin.
    • Tıklamak Koşmak(Koşmak)

    Bir prosedür gerçekleştirmek için Alt hızlı ve kolay bir şekilde, ona bir klavye kısayolu atayabilirsiniz. Bunun için:

    • Tıklamak alt+F8.
    • Görünen makrolar listesinde klavye kısayolu atamak istediğinizi seçin.
    • Tıklamak Seçenekler(Seçenekler) ve beliren iletişim kutusunda klavye kısayolunu girin.
    • Tıklamak TAMAM ve iletişim kutusunu kapatın Makro(makro).

    Dikkat: Bir makroya klavye kısayolu atarken, bunun Excel'de standart olarak kullanılmadığından emin olun (örneğin, ctrl+c). Halihazırda var olan bir klavye kısayolunu seçerseniz, makroya yeniden atanır ve sonuç olarak kullanıcı yanlışlıkla makroyu başlatabilir.

    VBA Prosedür Kapsamı

    Bu öğreticinin 2. Bölümü, değişkenlerin ve sabitlerin kapsamını ve anahtar sözcüklerin rolünü ele aldı. Halk Ve Özel. Bu anahtar sözcükler VBA prosedürleriyle de kullanılabilir:

    Unutmayın, bir VBA prosedürü bildirmeden önce işlev veya Alt anahtar kelime girilmez, prosedür için varsayılan özellik ayarlanır Halk(yani, bu VBA projesinde her yerde mevcut olacaktır). Bu, varsayılan olarak değişken bildirimlerinin tersidir. Özel.

    "İşlev" ve "Alt" VBA prosedürlerinden erken çıkış

    Bir VBA prosedürünün yürütülmesini sonlandırmanız gerekirse işlev veya Alt, doğal sonunu beklemeden, bunun için operatörler var çıkış işlevi Ve çıkış alt. Bu işleçlerin kullanımı, örnek olarak basit bir prosedür kullanılarak aşağıda gösterilmiştir. işlev Daha fazla işlem gerçekleştirmek için olumlu bir bağımsız değişken almayı bekleyen bir. Prosedüre pozitif olmayan bir değer iletilirse, daha fazla işlem yapılamaz, bu nedenle kullanıcıya bir hata mesajı gösterilmeli ve prosedürden hemen çıkılmalıdır:

    İşlev VAT_Amount(sVAT_Rate As Single) Tek olarak VAT_Amount = 0 ise sVAT_Rate ise<= 0 Then MsgBox "Expected a Positive value of sVAT_Rate but Received " & sVAT_Rate Exit Function End If ... End Function

    Prosedürü tamamlamadan önce lütfen unutmayın işlevKDV_Tutarı, koda yerleşik bir VBA işlevi eklenir Mesaj Kutusu, kullanıcıya bir uyarı açılır penceresi görüntüler.