internet pencereler Android
Genişletmek

Yerleşik vba işlevleri. Excel için VBA'da Özel İşlevler

VBA'da aşağıdaki işlev türleri kullanılır:

Matematiksel yerleşik fonksiyonlar;

VBA'da temsil edilmeyen matematiksel işlevler;

Veri biçimlendirme fonksiyonları;

Tür Dönüştürme İşlevleri

Matematik yerleşik işlevleri

Geri dönüş değeri

Bir sayının mutlak değeri

arctg(x) – radyan cinsinden belirtilen parametre değerinin arktanjantı

sin(x) – radyan cinsinden belirtilen parametre değerinden açının sinüsünü döndürür

cos(x) – radyan cinsinden belirtilen açının kosinüsü

tg(x) – radyan cinsinden belirtilen parametre değerinden açının tanjantını döndürür

e x – belirtilen kuvvete yükseltilen e sayısını döndürür; burada e, doğal logaritmanın tabanıdır

ln(x) – sayısal bir ifadenin değerinin doğal logaritmasını döndürür

- sayısal bir ifadenin karekökünü döndürür

Aralıktan rastgele sayı)

Adlandırılmış sayı biçimleri

Biçim adı

Tanım

Binlik ayırıcısı olmayan sayı

Ondalık noktanın sağında iki rakamı görüntüler

Ondalık noktanın solunda bir basamak ve sağında iki basamak görüntüler

Ondalık noktanın solunda bir basamak ve sağında iki basamak görüntüler ve binlik ayırıcıyı görüntüler

Bir sayıyı yüzde olarak görüntüler ve ondalık ayırıcının sağında iki basamak görüntüler

Kayan ondalık nokta biçimini kullanır

Sayı 0 ise Hayır, aksi takdirde Evet görüntülenir

Sayı 0 ise Yanlış, aksi takdirde Doğru değerini görüntüler

Sayı 0 ise Kapalı, aksi halde Açık görüntülenir

VBA'da yazılan bir işlev, hesaplamaları gerçekleştiren ve bir değer (veya bir değer dizisi) döndüren koddur. Bir işlev oluşturduğunuzda onu üç şekilde kullanabilirsiniz:

  1. Bağımsız değişkenleri alabildiği ve değerleri döndürebildiği bir çalışma sayfasındaki formül olarak.
  2. VBA rutininizin bir parçası olarak. Bir Alt prosedürde veya diğer işlevlerin içinde.
  3. Koşullu biçimlendirme kurallarında.

Excel'de halihazırda 450'den fazla yerleşik işlev bulunsa da, bunlar bazen eksik de olabiliyor. Bazen yerleşik işlevler yapmak istediğiniz şeyi yapamaz. Bazen bir sonuca ulaşmak için başkalarının anlayamadığı devasa ve karmaşık bir formül oluşturmanız gerekir. Bu durumda okunması ve kullanılması kolay özel bir işlev oluşturabilirsiniz.

VBA ile oluşturulan kullanıcı tanımlı işlevlerin genellikle yerleşik işlevlerden önemli ölçüde daha yavaş olduğunu unutmayın. Bu nedenle, yerleşik işlevleri kullanarak sonuç elde edemediğiniz veya fazla hesaplamanın olmadığı ve performans kaybının kritik olmadığı durumlar için en uygun olanlardır.

Yerleşik işlevleri yalnızca siz değil iş arkadaşlarınız da kullanabilirsiniz. Yazdığınız işlevler, İşlev Sihirbazı iletişim kutusunda diğerlerinin yanında görünecektir. İşlev oluşturma sürecinden korkmuş olabilirsiniz, ancak bunun oldukça basit olduğuna sizi temin etmek için acele ediyorum.

Bir prosedür (Sub) ile bir fonksiyon (Fonksiyon) arasındaki fark nedir?

Temel fark, bir prosedürün (alt) bir dizi komutu yürütmek için kullanılması ve bir fonksiyondan (fonksiyon) farklı olarak bir değer (veya bir değerler dizisi) döndürmek için tasarlanmamasıdır.

Göstermek için bir örnek verelim. Mesela 1'den 100'e kadar bir sayı dizisi var ve çiftleri teklerden ayırmanız gerekiyor.

(Alt) prosedürünü kullanarak, örneğin hücreler arasında dolaşabilir ve dolgu kullanarak tek sayıları vurgulayabilirsiniz. Ve fonksiyon bitişik sütunda kullanılabilir ve değerin çift olup olmadığına bağlı olarak DOĞRU veya YANLIŞ değerini döndürür. Onlar. çalışma sayfasındaki bir işlevi kullanarak dolgu rengini değiştiremezsiniz.

VBA'da Basit Kullanıcı Tanımlı Fonksiyon Oluşturma

VBA'da basit bir özel işlev oluşturalım ve nasıl çalıştığını görelim.

Aşağıda, harf değerlerini atarak metinden yalnızca sayıları bırakan bir fonksiyonun kodu bulunmaktadır.

Fonksiyon Numaraları(Text As String) As Long Dim i As Long Dim result As String For i = 1 To Len(Text) If IsNumeric(Mid(Text, i, 1)) Then result = result & Mid(Text, i, 1) ) Sonraki Sayılar = CLng(sonuç) Bitiş Fonksiyonu

Her şeyin işinize yaraması için bu kodu kitap modülüne eklemeniz gerekir. Bunu nasıl yapacağınızı bilmiyorsanız, Excel'de makro nasıl kaydedilir makalesiyle başlayın.

Şimdi fonksiyonun nasıl çalıştığına bakalım, onu bir sayfada kullanmayı deneyelim:

Fonksiyonun kendisini analiz etmeden önce, oluşturulduktan sonra ortaya çıkan 2 hoş anı not edelim:

  • Diğer yerleşik işlevler gibi kullanılabilir hale geldi (size daha sonra gizli bir işlevin nasıl oluşturulacağını anlatacağız).
  • "=" işaretini girip işlevin adını yazmaya başladığınızda, Excel tüm eşleşmeleri görüntüler ve yalnızca yerleşik işlevleri değil, aynı zamanda özel işlevleri de gösterir.

Fonksiyonu adım adım analiz edelim

Şimdi derinlemesine bir inceleme yapalım ve bu özelliğin nasıl oluşturulduğunu görelim. Fonksiyon satırla başlar

Fonksiyon Numaraları (Dize Olarak Metin) Uzunluğunda

Kelime İşlev bizim durumumuzda fonksiyonun başlangıcından ve ardından adından bahseder Sayılar.

  • İşlev adı boşluk içeremez. Ayrıca, bir hücre referans adıyla çakışması durumunda bir işlevi çağıramazsınız. Örneğin, ABC123 işlevine ad veremezsiniz çünkü bu ad aynı zamanda Excel çalışma sayfasındaki bir hücreye de başvuruda bulunur.
  • İş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 karakterini kullanabilirsiniz. Örneğin, Küfürlü Suma geçerli bir isimdir.

İsmin ardından fonksiyon argümanları parantez içinde açıklanmıştır. Yerleşik Excel işlevlerine benzer. Bizim durumumuzda kullanılan tek argüman Metin. Belirttiğimiz argümanın adından sonra Dize olarak Bu, argümanımızın bir metin değeri veya bir metin değeri içeren bir hücre başvurusu olduğu anlamına gelir. Bir veri türü belirtmezseniz VBA bunu şu şekilde değerlendirecektir: Varyant(bu, herhangi bir veri türünü kullanabileceğiniz anlamına gelir; VBA bunu sizin için çözecektir).

İlk satırın son kısmı O Kadar Uzun işlevin döndürdüğü veri türünü belirtir. Bizim durumumuzda fonksiyon tamsayı değerleri döndürecektir. Bu da gerekli değildir.

Fonksiyonun ikinci ve üçüncü satırları kullanacağımız ek dahili değişkenleri bildirir.

Dim i As Long Dim sonucu As String

Değişken Ben Karakterleri numaralandırmak için kullanacağız. Bir değişken sonuç Bir fonksiyonun ara sonucunu saklamak için.

İşlevin görevi, Metin değişkenindeki tüm karakterleri gözden geçirmek ve yalnızca sayı olanları kaydetmektir. Bu nedenle döngüyü 1'den son karaktere kadar başlatacağız.

i = 1 için Len(Metin)

Len karakter sayısını belirleyen bir fonksiyondur.

Fonksiyonun ana satırı, metindeki bir sonraki karakterin sayı olup olmadığını kontrol etmek ve eğer öyleyse bunu sonuç değişkeninde saklamaktır.

If IsNumeric(Mid(Metin, i, 1)) Then result = result & Mid(Metin, i, 1)

Bunun için bir fonksiyona ihtiyacımız var Sayısaldır- geri döndü Doğru metin bir sayıysa ve YANLIŞ aksi takdirde.

İşlev Orta Metin argümanından alır Ben karakter (anlamı 1 , fonksiyonun olduğunu gösterir Orta yalnızca 1 karakter alır)/

İşlev Sonraki- döngüyü kapatır İçin burada her şey açık.

Sayılar = CLng(sonuç)

Bu satırla metin değişkenini dönüştürüyoruz sonuç argümanın tüm rakamlarını içeren Metin, sayısal bir değere. Ve fonksiyonumuzun hangi sonucu vermesi gerektiğini söylüyoruz Sayılar.

Kodun son satırı Son İşlev. Bu, VBA'ya işlev kodunun burada bittiğini bildiren gerekli bir kod satırıdır.

Yukarıdaki kod, VBA'da oluşturulan tipik bir kullanıcı tanımlı işlevin farklı bölümlerini açıklar. Gelecek makalelerde bu öğelere daha ayrıntılı olarak bakacağız ve Excel'de VBA işlevini gerçekleştirmenin farklı yollarına da bakacağız.

Fonksiyon prosedürü sonuç döndüren özel bir VBA prosedürü türüdür. VBA'nın yerleşik işlevleri gibi kullanıcı tanımlı prosedür işlevleri de isteğe bağlı ve adlandırılmış bağımsız değişkenlere sahip olabilir. Bir prosedür işlevini kaydetmek için makro kaydediciyi kullanamazsınız, ancak kaydedici tarafından kaydedilen bir makroyu düzenleyebilir ve onu bir prosedür işlevine dönüştürebilirsiniz.

Bir prosedür fonksiyonu ile diğer prosedürler arasındaki temel fark, fonksiyonların bir değer döndürmesi ve prosedürlerin döndürmemesinin yanı sıra, bir prosedür fonksiyonunun anahtar sözcükler kullanmasıdır. İşlev Ve Son İşlev.

Sözdizimi:

Fonksiyon adı()
"VBA İfadeleri
Son İşlev

Fonksiyon, bir fonksiyonun başlangıcını bildiren bir anahtar kelimedir.

Ad - işlev adı. İşlev adları, diğer VBA tanımlayıcı adlarıyla aynı kurallara uyar.

Arglist - bu işlev için bağımsız değişkenlerin listesi, isteğe bağlı öğe.

Tür - herhangi bir işlev dönüş değeri türü. Tür tanımsızsa prosedür işlevi tarafından döndürülen sonuç Variant türündedir.

Ad = ifadesi, VBA'ya işlevin hangi değeri döndürmesi gerektiğini söyleyen bir işlev atamasıdır; isteğe bağlı bir öğedir. Ancak prosedür fonksiyonlarına her zaman bir atama operatörü eklemelisiniz.

İşlevi Sonlandır - bir işlevi sonlandıran anahtar kelimeler.


Fonksiyonun hiçbir argümanı olmasa bile (örneğin, Şimdi, Tarih), fonksiyon bildiriminde parantez kullanmanız gerekir.

Tipik olarak bir işlev, bir hesaplama gerçekleştirmek ve sonucu döndürmek için tasarlanmıştır. Bir prosedür işlevi bildirirken, işleve aktarılan her bağımsız değişkenin adını belirtirsiniz. Listedeki bağımsız değişken adları virgülle ayrılmıştır ve tüm VBA tanımlayıcıları için geçerli olan kurallara uygun olmalıdır.


Aşağıda, baştaki ve sondaki boşlukları kaldıran ve bir ifadedeki karakter sayısını sayan basit bir prosedür fonksiyonunun kullanımının bir listesi bulunmaktadır.



Fonksiyon kullanılmadan liste şu şekilde görünecektir:



Bu basit örnekten, prosedür işlevlerini kullanmanın ana fikrinin açık olduğunu düşünüyorum - program kodunun okunabilirliğini artırmak ve azaltmak (başka bir deyişle, aynı kod "parçası" 2'den fazla oluştuğunda bir prosedür işlevi yazılır) -3 kez program kodunda). Aslında prosedür fonksiyonumuz bir satırdan değil de 10 satırdan oluşsaydı; ve program kodu bu prosedür fonksiyonunu 5 kez kullanacaktır, bu durumda genel program listesi 38 satır daha kısa olacaktır.


Daha önce belirtildiği gibi VBA, tüm argümanları Variant türleri olarak bir işlev prosedürüne aktarır. Bağımsız değişken listesindeki her bağımsız değişken için belirli veri türlerini bildirebilirsiniz.

Kendi VBA işlevlerinizi oluşturmaya başlamadan önce, Excel VBA'nın kod yazarken kullanabileceğiniz geniş bir önceden oluşturulmuş yerleşik işlevler koleksiyonuna sahip olduğunu bilmek yararlı olacaktır.

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 (buraya tıklayın) Alt+F11) ve ardından tıklayın F2.
  • Ekranın sol üst köşesindeki 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ünür. Pencerenin alt kısmında kısa bir açıklama görüntülemek için işlev adına tıklayın. Presleme F1 bu işlev için çevrimiçi yardım sayfasını açacaktır.

Ayrıca yerleşik VBA işlevlerinin örneklerle birlikte tam listesini Visual Basic Geliştirici Merkezi web sitesinde bulabilirsiniz.

VBA'da Özel İşlev ve Alt Prosedürler

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

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

Argümanlar

Argümanlar kullanılarak VBA prosedürlerine çeşitli veriler aktarılabilir. Argümanların listesi prosedür bildirildiğinde belirtilir. Örneğin, prosedür Alt VBA'da, belirtilen aralıktaki her hücreye belirtilen tamsayıyı (Tamsayı) ekler. Bu numarayı aşağıdaki gibi bir argüman kullanarak prosedüre iletebilirsiniz:

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

Prosedürlere ilişkin argümanlara sahip olduğunuzu unutmayın İşlev Ve Alt VBA'da isteğe bağlıdır. Bazı prosedürler argüman gerektirmez.

İsteğe Bağlı Bağımsız Değişkenler

VBA yordamlarında isteğe bağlı bağımsız değişkenler bulunabilir. 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 yönelik tamsayı bağımsız değişkenini isteğe bağlı hale getirmek için, bunu şu şekilde beyan edersiniz:

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

Bu durumda tamsayı argümanı Ben varsayılan 0 olacaktır.

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

Argümanları değere ve referansa göre iletme

VBA'daki argümanlar bir prosedüre iki şekilde aktarılabilir:

  • ByVal– bir argümanı değere göre iletmek. Bu, prosedüre yalnızca değerin (yani argümanın bir kopyasının) iletildiği ve dolayısıyla prosedür içindeki argümanda yapılan tüm değişikliklerin prosedürden çıkıldığında kaybolacağı anlamına gelir.
  • ByRef– bir argümanın referans yoluyla iletilmesi. Yani argümanın hafızaya yerleştirildiği asıl adres prosedüre iletilir. Bir prosedür içindeki 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 Bir prosedür bildiriminde, argümanın prosedüre tam olarak nasıl aktarılacağını belirtebilirsiniz. Bu, aşağıda örneklerle 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ılmazsa ByVal veya ByRef, daha sonra argüman referans olarak iletilecektir.

Prosedürleri öğrenmeye devam etmeden önce İşlev Ve Alt Daha detaylı olarak bu iki işlem türü arasındaki özelliklere ve farklılıklara bir kez daha bakmak yararlı olacaktır. Aşağıda VBA prosedürlerinin kısa bir tartışması bulunmaktadır İşlev Ve Alt ve basit örnekler gösterilmektedir.

VBA prosedürü "İşlev"

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

İşlev...Son İşlev

Daha önce de belirtildiği gibi prosedür İşlev VBA'da (karşıt olarak) 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 başlığında bildirilmelidir İşlev.
  • Dönüş değerini içeren değişken prosedürle aynı şekilde adlandırılmalıdır. İşlev. Bu değişkenin her zaman prosedürün ayrılmaz bir parçası olarak mevcut olması nedeniyle ayrı olarak bildirilmesine gerek yoktur. İşlev.

Bu, aşağıdaki örnekte mükemmel bir şekilde gösterilmiştir.

Örnek VBA prosedürü "Fonksiyon": 3 sayıyla matematiksel bir işlem gerçekleştirin

Aşağıda örnek bir VBA prosedür kodu verilmiştir İşlev türünde üç bağımsız değişken alan Çift(çift duyarlıklı kayan nokta sayıları). Sonuç olarak prosedür, türden başka bir sayı döndürür Çift, ilk iki argümanın toplamı eksi üçüncü argümana eşittir:

Fonksiyon SumMinus(dNum1 As Double, dNum2 As Double, dNum3 As Double) As Double SumMinus = dNum1 + dNum2 - dNum3 End Fonksiyonu

Bu çok basit bir VBA prosedürüdür İşlev Verilerin argümanlar aracılığıyla bir prosedüre nasıl aktarıldığını gösterir. Prosedür tarafından döndürülen veri tipinin şu şekilde tanımlandığını görebilirsiniz: Çift(sözler bunu söylüyor Çift Kişilik Olarak argümanlar listesinden sonra). Bu örnek aynı zamanda prosedürün sonucunun nasıl olduğunu da gösterir. İşlev prosedür adıyla aynı adı taşıyan bir değişkende saklanır.

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

Yukarıda tartışılan basit prosedür ise İşlev Visual Basic düzenleyicisindeki bir modüle eklendiğinde, diğer VBA prosedürlerinden ç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 çağırmak

Prosedür İşlev Bu prosedürü bir değişkene atayarak başka bir VBA prosedüründen çağrılabilir. Aşağıdaki örnek prosedüre yapılan bir çağrıyı göstermektedir ToplamEksi yukarıda tanımlandığı gibi.

Sub main() Dim total as Double total = SumMinus(5, 4, 3) End Sub

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

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

ToplamEksi(10, 5, 2)

VBA prosedürü "Alt"

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ü "Alt": Örnek 1. Seçilen hücre aralığında hizalamayı ortalayın ve yazı tipi boyutunu değiştirin

Basit bir VBA prosedürü örneğine bakalım Alt Görevi seçilen hücre aralığının biçimlendirmesini değiştirmek olan. Hücreler orta hizalamaya ayarlanır (hem dikey hem de yatay olarak) ve yazı tipi boyutu kullanıcı tarafından belirlenen boyuta değiştirilir:

Sub 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 sonuçları döndürmez.

Bu örnek aynı zamanda İsteğe bağlı bir bağımsız değişken kullanır iFontSize. Eğer argüman iFontSize prosedüre geçilmedi Alt, varsayılan değeri 10 olarak alınır. Bununla birlikte, eğer argüman iFontSize prosedüre geçildi Alt, ardından kullanıcı tarafından belirtilen yazı tipi boyutu seçilen hücre aralığına ayarlanacaktır.

VBA prosedürü "Alt": Örnek 2. Seçilen hücre aralığında orta hizalama ve yazı tipine kalın uygulama

Bir sonraki prosedür az önce tartışılan prosedüre benzer, ancak bu kez boyutu değiştirmek yerine seçilen hücre aralığına kalın yazı tipi stili uygulanır. Bu örnek bir prosedürdür Alt, kendisine hiçbir argüman iletilmeyen:

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

Excel VBA'da "Alt" prosedürünü çağırma

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

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 sonra parantez içinde prosedürün argümanları. Bu, aşağıdaki örnekte gösterilmektedir:

Sub main() Çağrı Formatı_Centered_And_Sized(20) End Sub

Prosedür ise Format_Centered_And_Sized birden fazla argümanı varsa virgülle ayrılmalıdır. Bunun gibi:

Sub main() Çağrı Format_Centered_And_Sized(arg1, arg2, ...) End Sub

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

Prosedür Alt bir prosedürle yapılabileceği gibi doğrudan bir Excel çalışma sayfası hücresine girilemez İşlevçünkü prosedür Alt bir değer döndürmez. Ancak prosedürler Alt, hiçbir argümanı olmayan ve olarak bildirilenler Halk(daha sonra gösterileceği gibi) çalışma sayfasının kullanıcılarına sunulacaktır. Dolayısıyla yukarıda tartışılan basit prosedürler Alt Visual Basic düzenleyicisindeki bir modüle eklenir, ardından prosedür Format_Centered_And_Bold Excel çalışma sayfasında kullanıma sunulacak ve prosedür Format_Centered_And_Sized– argümanları olduğundan kullanılamayacak.

Prosedürü çalıştırmanın (veya yürütmenin) basit bir yolu: Alt, çalışma sayfasından ulaşılabilir:

  • Tıklamak Alt+F8(Tuşa basın Alternatif ve basılı tutarken tuşuna basın F8).
  • Görüntülenen makrolar listesinde çalıştırmak istediğiniz makroyu seçin.
  • Tıklamak Uygulamak(Koşmak)

Prosedürü gerçekleştirmek için Alt hızlı ve kolay bir şekilde ona bir tuş kombinasyonu atayabilirsiniz. Bunun için:

  • Tıklamak Alt+F8.
  • Görüntülenen makrolar listesinde klavye kısayolu atamak istediğiniz makroyu seçin.
  • Tıklamak Seçenekler(Seçenekler) ve beliren iletişim kutusuna klavye kısayolunu girin.
  • Tıklamak TAMAM ve iletişim kutusunu kapatın Makro(Makro).

Dikkat: Bir makroya klavye kısayolu atarken, bunun Excel'deki standart kısayol gibi kullanılmadığından emin olun (örneğin, Ctrl+C). Mevcut bir klavye kısayolunu seçerseniz, makroya yeniden atanır ve bunun sonucunda kullanıcı yanlışlıkla makroyu tetikleyebilir.

VBA Prosedürü Kapsamı

Bu eğitimin 2. Bölümünde değişkenlerin ve sabitlerin kapsamı ve anahtar kelimelerin rolü tartışıldı Halk Ve Özel. Bu anahtar kelimeler VBA prosedürleriyle ilgili olarak da kullanılabilir:

Bir VBA prosedürünü bildirmeden önce şunu unutmayın: İşlev veya Alt anahtar kelime girilmezse prosedür için varsayılan özellik ayarlanır Halk(yani belirli bir VBA projesinin her yerinde mevcut olacaktır). Bu, varsayılan olarak değişkenlerin bildirilmesinden farklıdır. Özel.

VBA prosedürlerinden "Fonksiyon" ve "Alt"tan erken çıkış

Bir VBA prosedürünün yürütülmesini sonlandırmanız gerekiyorsa İşlev veya Alt, doğal sonunu beklemeden, bunun için operatörler var Çıkış Fonksiyonu Ve Alttan Çık. Bu operatörlerin kullanımı aşağıda basit bir prosedür örneği kullanılarak gösterilmiştir. İşlev, daha fazla işlem gerçekleştirmek için olumlu bir argüman almayı bekleyen. Prosedüre pozitif olmayan bir değer iletilirse başka bir işlem gerçekleştirilemez, bu nedenle kullanıcıya bir hata mesajı gösterilmeli ve prosedür derhal sonlandırılmalıdır:

İşlev VAT_Amount(sVAT_Rate As Single) As Single VAT_Amount = 0 If sVAT_Rate<= 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 İşlevKDV_Amount, koda yerleşik bir VBA işlevi eklenir Mesaj Kutusu kullanıcıya bir açılır uyarı penceresi gösterir.

Tamsayı Olarak Dim nSonuç

nMult1 = CInt(InputBox("İlk sayıyı girin: ")) nMult2 = CInt(InputBox("İkinci sayıyı girin: ")) nResult = fMultiply(nMult1, nMult2)

Selection.InsertAfter nResult Selection.Collapse wdCollapseEnd

4. Kodu yorumlamak için AutoNew() , bu prosedüre ilişkin tüm kodu vurgulayın ( Public Sub AutoNew() ve End Sub dahil ) ve Düzenle araç çubuğundaki Yorum Bloğu düğmesini tıklayın.

3.9. Yerleşik VBA Dil İşlevleri

3.9.1. Yerleşik işlevler nelerdir

İÇİNDE VBA programlama dili birkaç düzine sağlaryerleşik işlevler. Bunlar VBA dilindeki herhangi bir programda mevcuttur ve hangi yazılım ürününde olduğumuz önemli değildir - Excel, Word, Access veya örneğin AutoCAD. Çok aktif olarak kullanılırlar ve birçok durumda onlarsız yapamazsınız. Profesyonel programcılar bunları tamamen otomatik olarak kullanır, ancak sıradan kullanıcılara bunları tanımak için birkaç saat harcamalarını tavsiye ederim, çünkü bu işlevler hakkında bilgi sahibi olmadan VBA'da etkili bir şekilde çalışamayacaklardır. Bunları incelemenin lehine ek bir argüman, normal Visual Basic ve VBScript'te neredeyse aynı işlev kümesinin bulunması ve aynı adlara ve sözdizimine sahip bu işlevlerin çoğunun diğer programlama dillerinde (C++, Delphi, Java) bulunmasıdır. , JavaScript vb.

İÇİNDE VBA yardımında yerleşik işlevler harflere göre gruplandırılmıştır (Şekil 3.2).

Kurslara katılanların çoğu şu soruyu sordu: Bu işlevlerle ilgili Rusça yardım var mı? Ne yazık ki bu tür bilgilere ulaşamadım, bu yüzden bu kitapta kısa bir referans vermeye çalışacağım. Daha sonra VBA dilinin aktif olarak kullanılan fonksiyonlarının çoğundan bahsedeceğiz (pratik çalışmalarda neredeyse hiç kullanılmayan kosinüs veya tanjant gibi matematiksel fonksiyonlar ve finansal fonksiyonları dikkate almayacağız). Yerden tasarruf etmek için işlevlerin tam sözdizimi verilmeyecektir: asıl önemli olan, her işlevin ne yaptığını ve hangi durumlarda kullanılabileceğini anlamaktır.

Aşağıdaki bölümlerdeki özellikler işlevselliğe göre gruplandırılmıştır. Bilgiyi yalnızca bir fonksiyonun adına göre bulmanız gerekiyorsa kitabın sonundaki dizini kullanabilirsiniz.

Pirinç. 3.2. Yerleşik İşlevler Yardımı

3.9.2. Dönüştürme ve veri türü kontrol işlevleri

VBA programlarında değerleri bir veri türünden diğerine dönüştürmek çok yaygındır. Bunu yapmanız gereken birkaç tipik durum şunlardır:

inputBox() yoluyla kullanıcıdan bir değer alırken dize değerinden sayısal değere dönüştürme;

Kullanıcıların bilgisayarlarındaki bölgesel ayarlara bakılmaksızın tarih veya saati tekdüze olarak görüntülememiz gerektiğinde tarih/saat değerini dize değerine dönüştürmek;

özel tarih/saat işlevlerini kullanmak için bir değeri bir dizeden tarih/saat'e dönüştürmek.

Çoğu zaman, veri türlerini dönüştürmek için, adı “C” öneki (Dönüştürme kelimesinden) ve veri türünün adından oluşan işlevler kullanılır. Bu fonksiyonların listesi şu şekildedir: CBool(), CByte(), CCur(), CDate(),

CDbl(), CDec(), CInt(), CLng(), CSng(), CStr(), CVar(), CVDate(), CVErr().

Kullanılan veri türünün adını döndüren TypeName() işlevini kullanarak sonunda ne olduğunu görebilirsiniz, örneğin:

nVar1 = CInt(InputBox("Bir değer girin")) MsgBox TypeName(nVar1)

Bu durumda bu fonksiyon "Tamsayı" değerini döndürecektir.

Ek olarak, dönüştürme için yararlı olan başka işlevler de vardır.

Str() - sayısal bir değeri dizeye dönüştürmenize olanak tanır. Neredeyse CStr() ile aynı şeyi yapar, ancak pozitif sayıların önüne bir boşluk ekler.

Val() - sayı ve harflerden oluşan bir karışımdan yalnızca sayısal bir değeri “çıkarır”. Bu durumda, fonksiyon verileri soldan sağa okur ve ilk sayısal olmayan değerde durur (izin verilen tek sayısal olmayan değer, tamsayı kısmını kesirli kısımdan ayıracak olan noktadır). Ölçü birimlerini veya para birimini sayısal verilerle serpiştirerek yazmamız çok kullanışlıdır.

IsNumeric() ve IsDate() - dönüştürme sırasında hata oluşmaması için değerleri tutarlılık açısından kontrol edin. Özel değerlerle uyumu kontrol etmek için IsArray(), IsEmpty(), fonksiyonlarını kullanabilirsiniz.

IsError(), IsMissing(), IsNull() ve IsObject() . Tüm bu işlevler geri dönüyor

Kendilerine iletilen değerin kontrol edilmesine bağlı olarak Doğru veya Yanlış.

Hex() ve Oct() - Ondalık verileri onaltılık ve sekizlik değerlerin dize temsiline dönüştürür.

3.9.3. Dize işlevleri

Bunlar en sık kullanılan işlevlerdir. Onlara sürekli ihtiyaç duyulur ve bunları çok iyi bilmek gerekir.

Asc() - bu işlev, iletilen karakterin sayısal kodunu döndürmenize olanak tanır. Örneğin, Asc("D") 68 değerini döndürecektir. Bu işlev sonraki veya önceki harfi belirlemek için kullanışlıdır. Genellikle ters işlemi gerçekleştiren Chr() işleviyle birlikte kullanılır; karakteri sayısal koduna göre döndürür. Örneğin, Excel'deki bu kod, A1'den A20'ye kadar olan hücrelere Rus alfabesinin harflerini A'dan U'ya sırayla yazmanıza olanak tanır:

Dim n, nCharCode As Tamsayı n = 1

nCharCode = Asc("A") Do While n<= 20

ActiveWorkbook.ActiveSheet.Range("A" & n).Value = Chr(nCharCode)

VBA Söz Dizimi ve Programlama Yapıları

nCharCode = nCharCode + 1 Döngü

Bu işlevin çeşitleri AscB() ve AscW()'dur. AscB(), karakterin sayısal kodunun yalnızca ilk baytını döndürürken AscW(), karakterin Unicode kodunu döndürür.

Chr() - bir karakteri sayısal koduna göre döndürür. Asc() işleviyle birlikte kullanılmasına ek olarak (önceki örneğe bakın), bir durumda daha onsuz yapamazsınız: bir hizmet karakteri çıktısı almanız gerektiğinde. Örneğin Word'de "Gazprom" değerini (tırnak içinde) yazmamız gerekiyor. Alıntı bir hizmet karakteridir ve aşağıdaki gibi bir dize kullanma girişimidir:

Selection.Text = ""Gazprom""

sözdizimi hatasıyla sonuçlanacaktır. Ve her şey şu şekilde yoluna girecek:

Selection.Text = Chr(34) & "Gazprom" & Chr(34)

Bu işlevin çeşitleri vardır - ChrB() ve ChrW(). Asc() işlevi için aynı seçeneklere benzer şekilde çalışırlar.

InStr() ve InStrRev() en popüler işlevlerden bazılarıdır. Bir dize değişkeninin gövdesindeki bir karakter dizisini tespit etmenize ve konumunu döndürmenize olanak tanır. Sıra bulunamazsa, 0 döndürülür. InStr() işlevi dizenin başından itibaren arama yapar ve InStrRev() ise sondan itibaren arama yapar.

Left() , Right() , Mid() - sırasıyla sol, sağ veya ortadaki mevcut bir dize değişkeninden belirttiğiniz sayıda karakter almanıza olanak tanır.

Len() - dizedeki karakter sayısını (dize uzunluğu) döndürür. Genellikle döngüler, değiştirme işlemleri vb. ile birlikte kullanılır.

LCase() ve UCase() - bir dizeyi sırasıyla küçük ve büyük harfe dönüştürür. Genellikle büyük/küçük harfin önemli olmadığı durumlarda (soyadlar, şirket adları, şehirler vb.) karşılaştırma amacıyla değerleri hazırlamak için kullanılır.

LSet() ve RSet() - bir değişkeni uzunluğunu değiştirmeden diğerinin sembolleriyle doldurun (sırasıyla sol ve sağ). Fazladan karakterler kesilir ve eksik karakterlerin yerine boşluk konulur.

LTrim() , RTrim() , Trim() - sırasıyla soldaki, sağdaki veya hem soldaki hem de sağdaki boşlukları kaldırın.

Değiştir() - bir dizedeki bir karakter dizisini diğeriyle değiştirir.

Space() ve String() - sırasıyla belirttiğiniz sayıda boşluk veya karakterden oluşan bir dize döndürür. Genellikle oluşturmak için kullanılır