Professional Documents
Culture Documents
Amoozesh VB in Excel PDF
Amoozesh VB in Excel PDF
ﺗﻬﯿﻪ و ﺗﻨﻈﯿﻢ:
وﺣﯿﺪ اﺑﺮاﻫﯿﻤﯽ
www.ParsBook.org
ﺑﻪ ﻧﺎم ﺣﻖ
اﯾﻦ ﮐﺘﺎب ﺷﺮوﻋﯽ اﺳﺖ ﺑﺮاي ﯾﺎدﮔﯿﺮي ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺴﯽ در ﻣﺤﯿﻂ اﮐﺴﻞ ) ( VB in Excelدر اﯾﻦ
ﮐﺘﺎب ﺳﻌﯽ ﺷﺪه ﻧﮑﺎت ﺑﻪ اﺧﺘﺼﺎر آورده ﺷﻮد ﺗﺎ در ﺣﺪ اﻣﮑﺎن ﻣﻄﻠﻮب واﻗﻊ ﮔﺮدد.
Ebrahimi.vah@gmail.com
ارادﺗﻤﻨﺪﺗﺎن
وﺣﯿﺪ اﺑﺮاﻫﯿﻤﯽ
www.ParsBook.org
VB in Excel برنامه نویسی ویژوال بیسیک در محیط اکسل
تَ ُش زال تا یکی اص سّؽِای فْق ّاسد هسیػ تشًاهَ ًْیغی هیؽْین.
1|Page
www.ParsBook.org
VB in Excel برنامه نویسی ویژوال بیسیک در محیط اکسل
Range("A11") =10
Range("B11").Value = 20
"Range("C11").Value = "=A11+B11
End Sub
-5اجرای برًاهَ :تشای اخشای تشًاهَ چٌذیي سّػ ّخْد داسد
تشای قشاس دادى Command Buttonتش سّی هسیػ اکغل هغیش صیش سا غی هیکٌین:
2|Page
www.ParsBook.org
VB in Excel برنامه نویسی ویژوال بیسیک در محیط اکسل
دعتْس تؼذی ًیض زاصل خوغ علْلِای B11 ّ A11سا دس علْل C11قشاس هیذُذ.
دعتْس آخش ًیض هقذاس علْل D11سا ًیض تا سّػ دیگشی تشاتش تا زاصلدوغ B11 ّ A11
قشاس هیذُذ .تا اًذکی دقت هتْخَ هیؽْین کَ ایي دعتْس تا دعتْس قثلی هتفاّت اعت.
3|Page
www.ParsBook.org
VB in Excel برنامه نویسی ویژوال بیسیک در محیط اکسل
>> اجرای برًاهَ :تشای اخشای ایي تشًاهَ تَ هسیػ اکغل تشهیگشدین( .هیتْاى اص
ً ALT + F11یض اعتفادٍ کشد).
تا فؾشدى آیکي Exit Design Modeاص Control Toolboxاص زالت غشازی
خاسج هیؽْین .پظ اص آى تا کلیک تش سّی Command Buttonتشًاهَ اخشا هیؽْد
کَ خشّخی آى دس ؽکل ًؾاى دادٍ ؽذٍ اعت.
دستْر :CELLS
ایي دعتْس تا اعتفادٍ اص هختصات علْلِا آًِا سا هؾخص هیکٌذ .تَ ػٌْاى
هثال ) CELLS(2,5عطش ّ 2عتْى 5یؼٌی E2سا هؾخص هی کٌذ.
Cells(2,5).Select
RANGE("E2").SELECT
دعتْس:
4|Page
www.ParsBook.org
VB in Excel برنامه نویسی ویژوال بیسیک در محیط اکسل
یادداؽت :ساٌُوای خاهؼی تشای کاس تا علْلِا ّ ًازیَ تِیَ ؽذٍ کَ تطْس خذاگاًَ ًیض آهذٍ
اعت.
دّ دعتْس صیش غشیقَ اًتخاب عطش عتْى ّ عطش کلی هی تاؽذ:
Range("A:F").Value = 100
Range("1:5").Value = 100
کَ هؾخص ؽذٍ دس آًِا هقذاس 111گزاسدٍ ؽْد.دس ایي دعتْسُا تواهی عتًِْای هاتیي ّ
تواهی عطِای ها تیي ًیض اسصػ هؾخص ؽذٍ سا هی گیشًذ.
دعتْس صیش:
Range("A:A,F:F").Value = 100
دعتْسی اعت کَ تَ تشًاهَ هی گْیذ عتْى ّ Aعتْى Fسا تَ تٌِایی اسصػ 111تگزاس.
دعتْس صیش:
Range("A1:A5,C1:C5,D1:D5").Value = 4
5|Page
www.ParsBook.org
VB in Excel برنامه نویسی ویژوال بیسیک در محیط اکسل
A=1
B=2
C=3
کَ دس ایي صْست هتغیشُای A B Cسا هی تْاى تشای تشًاهَ تؼشیف کشد ّ دس دعتْس
CELLSاعتفادٍ ًوْد.
6|Page
www.ParsBook.org
VB in Excel برنامه نویسی ویژوال بیسیک در محیط اکسل
دکوَ خذیذ سا اًتخاب کشدٍ ّ تش سّی آى داتل کلیک هی کٌین تا صفسَ ّیژّال تیغیک
تاص ؽْد.
Range("A1:A10").Value = 10
تا ایي دعتْس تَ اکغل گفتَ ؽذٍ کَ A1تا A10سا گشفتَ ّ تَ آى هقذاس 11سا تذُذ.
زال اص ایي صفسَ خاسج ؽذٍ ّ تش سّی دکوَ گًْیا(دس هٌْی ّیژّال تیغیک ًْاس
خاکغتشی سًگ تاالی صفسَ) کلیذ کشدٍ ّ EXIT DESIGN MODEسا هی صًین.
تش سّی دکوَ خذیذ ساعت کلیذ کشدٍ ّ هؾخصات سا سا اًتخاب کشدٍ ّ دس ایي زالت
هؾخصات دکوَ اص قثیل سًگ ّ ًام ّ ...سا هی تْاى تغییش داد.
زال اص ایي صفسَ خاسج ؽذٍ ّ تش سّی دکوَ گًْیا(دس هٌْی ّیژّال تیغیک ًْاس
خاکغتشی سًگ تاالی صفسَ) کلیذ کشدٍ ّ EXIT DESIGN MODEسا هی صًین.
ّقتی کَ اص زالت DESIGNخاسج ؽذین زال تش سّی دکوَ کلیک کشدٍ ّ هؾاُذٍ هی
کٌین کَ دسعلِای هؾخص ؽذٍ اسصػ ػذدی 11سا قشاس هی دُذ.
هی تْاى تَ خای 11یک ػثاست سا دس داخل " " قشاس داد ّ دس ایي زالت تَ خای 11
آى ػثاست ًْؽتَ هی ؽْد.
تْخَ :دس صْستی کَ اص ػالهت ' دس اتتذای یک خػ تشًاهَ ًْیغی دس هسیػ VB
اعتفادٍ ؽْد آى خػ عثض ؽذٍ ّ ػولیاتی تش سّی آى خػ اخشا ًخْاُذ ؽذ .ایي خػ
اصطالزا ( Commentتْظیسات)ًاهیذٍ هی ؽْد Comment .زالت اخشایی ًذاسد ّ
7|Page
www.ParsBook.org
VB in Excel برنامه نویسی ویژوال بیسیک در محیط اکسل
اص آى تشای اسایَ تْظیسات اعتفادٍ هیؾْدُ Comment .ا تَ خْاًایی تشًاهَ تغیاس
کوک هیکٌٌذ.
"Range("E1").Value = "=A1+A2
اگش تَ هسیػ اکغل تاصگشدین ّ دسعلْلِایی کَ فشهْل ًْؽتَ هی ؽْد تْخَ کٌین دیذٍ هی
ؽْد کَ هستْای ایي علْلِا تا ػالهت = ؽشّع هی ؽْد .یؼٌی اکغل تَ هستْای یک
علْل ًگاٍ هیکٌذ اگش تا ػالهت = ؽشّع ؽْد آًشا فشهْل تلقی هی کٌذ ّ ًَ هقذاس .پظ ها
ُن اص ُویي سّػ اعتفادٍ هیکٌین ّ ّقتی دس ًظش داسین کَ فشهْلی سا دس یک علْل ّاسد
کٌین هی تایغت تا ػالهت = ؽشّع کٌین.
دستْر SELECT
تا اًدام ایي دعتْس علِای هْسد اؽاسٍ اًتخاب هی ؽْد هی تْاى تؼذ اص RANGEاص
دعتْس تاال اعتفادٍ ًوْد.
Range("F1:F10").Select
ّ دکوَ سا RUNهی کٌین.هالزظَ هی ؽْد کَ عطشُای هْسد اؽاسٍ ُای اًتخاب ؽذ.
هی تْاى تَ خای :اص ػالهت ,اعتفادٍ ًوْد کَ دس ایي زالت تَ هؼٌی ANDهی تاؽذ.
هطالثی کَ اسایَ ؽذ هقذهَ ای تْد تا آهادگی الصم تشای ّسّد تَ هثسث تشًاهَ ًْیغی
ایداد ؽْد.
8|Page
www.ParsBook.org
VB in Excel برنامه نویسی ویژوال بیسیک در محیط اکسل
Range("B6:D14").ClearContents
هتغیرُا()Variables
گاُی اّقات دس فشهْل ًْیغی دس اکغل ًیاص تَ هتغیش هی ؽْد
9|Page
www.ParsBook.org
VB in Excel برنامه نویسی ویژوال بیسیک در محیط اکسل
تْضیح ّ یا دآّری:
فشهْل ( =)COUNT(A:Aدس اکغل تؼذاد سدیفِای پشؽذٍ دس دسعتْى aسا هی دُذ.
پظ اص ًْؽتي هاکشّ ّاسد هسیػ VBAهی ؽْین ّ هی تیٌین کَ اغالػات صیش ًْؽتَ ؽذٍ
اعت:
)(Sub dll
dll Macro
Macro recorded 2009/12/20 by hamed.beirami
'Keyboard Shortcut: Ctrl+g
Range("A1:A32").Select
Selection.ClearContents
Sheets("Sheet2").Select
Range("A1:A30").Select
Selection.Copy
Sheets("Sheet1").Select
Range("A1").Select
ActiveSheet.Paste
Sheets("Sheet3").Select
ActiveWindow.SmallScroll Down:=-54
Range("A1:A70").Select
Application.CutCopyMode = False
Selection.Copy
Sheets("Sheet1").Select
Range("A31").Select
ActiveSheet.Paste
End Sub
هغالَ هْخْد ایي اعت کَ دس اًتِای اغالػات ّاسد ؽذٍ دس ؽیت اّل(پظ اص دلیت کشدى)
اغالػات ؽیت عْم سا ّاسد ًوایذ.تشای ایي هٌظْس تایذ تغییشاتی دس هاکشّ ًْؽتَ ؽذٍ دس
اکغل ایداد کشد ّ تا اعتفادٍ اص اغالػات عتْى ّ cتؼشیف دّ هتغیش ّ x1 ,x2اظافَ
ًوْدى دس عطشُای تشًاهَ ًْؽتَ ؽذٍ تَ ایي ُذف سعیذ .تخؼ اصلی تشای زل ایي هغالَ
اعتفادٍ اص سّػ آدسط دُی هختصاتی تشای هؼشفی ًازیَ ُا اعت .صیشا ًْازی کَ
اًتخاب هی ؽًْذ تغییش هیکٌٌذ ّ هی تایغت اص دعتْس ٍ ) cells(i,jاعتفادٍ کٌین
10 | P a g e
www.ParsBook.org
VB in Excel برنامه نویسی ویژوال بیسیک در محیط اکسل
Sub rep()
Range("A:a").Select
Selection.ClearContents
Sheets("Sheet2").Select
Dim x1, x2, x3
x1 = Cells(1, 3)
Range("A1", Cells(x1, 1)).Select
Selection.Copy
Sheets("Sheet1").Select
Range("A1").Select
ActiveSheet.Paste
Sheets("Sheet3").Select
x2 = Cells(1, 3)
Range("A1", Cells(x2, 1)).Select
Application.CutCopyMode = False
Selection.Copy
Sheets("Sheet1").Select
x3 = x1 + 1
Cells(x3, 1).Select
ActiveSheet.Paste
ActiveWindow.SmallScroll Down:=-3
Range("B1").Select
End Sub
11 | P a g e
www.ParsBook.org
VB in Excel برنامه نویسی ویژوال بیسیک در محیط اکسل
هثال :دس علْل A1ػذدی قشاس داسد کَ عي ؽخصی سا ًؾاى هیذُذ .هیخْاُین
تا تْخَ تَ عي دس علْل B1پیغاهی تٌْیغین
)(Sub grade
End Sub
Else
دعتْسات
Endif
12 | P a g e
www.ParsBook.org
VB in Excel برنامه نویسی ویژوال بیسیک در محیط اکسل
:خْاب
Sub grade()
13 | P a g e
www.ParsBook.org
VB in Excel برنامه نویسی ویژوال بیسیک در محیط اکسل
Select CASE
دعتْس SELECT CASEدعتْسی تا کاستشدی هاًٌذ IFهی تاؽذ .دس خِت اعتفادٍ اص
ایي دعتْس ها ًیاصهٌذ تؼشیف هتغیشی هاًٌذ ُ Xغتین ّ عپظ تشای هتغیش هْسد اؽاسٍ
ؽشّغ هْسد ًیاص سا هی گزاسین.
Case Else
دعتْسات
End Select
14 | P a g e
www.ParsBook.org
VB in Excel برنامه نویسی ویژوال بیسیک در محیط اکسل
یک ؽیتA1 دس صیش تشًاهَ ای ًْؽتَ ؽذٍ اعت کَ تشای هقادیش هختلف هْخْد دس عل
. سا دس عل هقاتل آى هی گزاسدA , B, C, … اکغل ػثاسات
Sub level( )
x = Range("a1").Value
Select Case x
Case 17 To 20
Range("b1").Value = " A"
Case 14 To 17
Range("b1").Value = " B"
Case 12 To 14
Range("b1").Value = " C"
Case 10 To 12
Range("b1").Value = " D"
Case 0 To 10
Range("b1").Value = " E"
Case Else
Range("b1").Value = "false"
End Select
End Sub
15 | P a g e
www.ParsBook.org
VB in Excel برنامه نویسی ویژوال بیسیک در محیط اکسل
زلقَ ُا دعتْساتی ُغتٌذ کَ هی تْاى خِت اًدام دعتْسات تکشاسی اص آًِا اعتفادٍ ًوْد.
زلقَ FOR Eachتشای کاس تش سّی ػعُْای( )membersیک
هدوْػَ( )collectionاعتفادٍ هی ؽْد .هدوْػَ ؽاهل تؼذادی ؽیء یکغاى اعت .تَ
ػٌْاى هثال )" Range("A1:A10یک collectionاعت صیشا تؼذادی ػعْ تَ ًام
علْل اعت کَ ُوگی اص یک خٌظ ُغتٌذُworksheet .ای یک فایل اکغل هدوْػَ ای
تَ ًام Worksheetsتؾکیل هی دٌُذ .چاستِای یک فایل اکغل هدوْػَ ای تَ ًام
Chartsتؾکیل هی دٌُذ.
الگْی صیش الگْی اعتفادٍ اص یک زلقَ FOR Eachدس تشًاهَ ًْیغی هی تاؽذ:
دس تشًاهَ ای کَ دس صیش ًْؽتَ ؽذٍ ػولیات هْسد ًظش تش سّی سدیفِای 1تا 11عتْى
Aاًدام هی ؽْد.تشًاهَ تَ گًَْ ای ًْؽتَ ؽذٍ اعت کَ اػذاد کوتش اص 11هْخْد دس
عتْى اّل ،سا Boldکٌذ
زال تا اعتفادٍ ّ تشکیة دّ دعتْس FOR-NEXTتَ عادگی تشًاهَ هْسد اؽاسٍ تَ ؽشذ
ریل ًْؽتَ هی ؽْد:
)(Sub a
End Sub
16 | P a g e
www.ParsBook.org
VB in Excel برنامه نویسی ویژوال بیسیک در محیط اکسل
تشًاهَ تاال تشًاهَ هٌاعثی تْد اها دس فاص تؼذی تشًاهَ ًْیغی ها خْاُاى ایي ًکتَ ُغتین
تشًاهَ ای ًْؽتَ ؽْد کَ تَ اصای هقادیش هختلف دس یک عتْى دس اکغل ػثاساتی هتٌاعة
تا آى اػذاد سا دس هقاتل آًِا تٌْیغذ.
تٌِا ًکتَ هْخْد دس ایي تشًاهَ ّخْد دعتْس ROWاعت کَ اص دعتَ دعتْساتی هاًٌذ
VALUEهی تاؽذ کَ دس ایٌدا ROWتَ هفِْم سدیف هْسد ًظش هی تاؽذ ّ.تشای ًیل
تَ ُذف تاال هی تایغت دّ هتغیش تؼشیف ًوْد.
هتغیش اّل تشای ػذد هْسد ًظش کَ ُذف تشًاهَ آى اعت ّ هتغیش دّم سدیف ػذد هْد
ًظش کَ تشای ایٌکَ دس هقاتل آى ػذد تایذ ػثاست هْسد ًظش تشًاهَ تایپ گشدد ،هْسد ًیاص
اعت.هغ الْصف تشًاهَ هْسد ًظش تَ ؽکل صیش ًْؽتَ هی ؽْد:
)(Sub range_level
Dim c As Range
)"For Each c In Range("a1:a10
x = c.Value
i = c.Row
Case 17 To 20
"Cells(i, 2) = "A
Case 14 To 17
"Cells(i, 2) = "B
Case 12 To 14
"Cells(i, 2) = "C
Case 10 To 12
"Cells(i, 2) = "D
Case 0 To 10
"Cells(i, 2) = "E
Case Else
"Cells(i, 2) = "ERROR
End Select
Next
End Sub
17 | P a g e
www.ParsBook.org
VB in Excel برنامه نویسی ویژوال بیسیک در محیط اکسل
)(Sub message
"MsgBox "hello my frends
End Sub
ب -پیغاهِای ػولیاتی کَ تش سّی دادٍ ُای هْخْد دس تاًک اغالػاتی یا تشًاهَ
هساعثاتی کاستش ،تغیشاتی اًدام هی دُذ .دس ایٌدا عاختاس اصلی یک پیغام ،کَ ؽاهل ُش
عَ قغوت یک پیغام اعت(ػٌْاى ،ؽشذ ّ گضیٌَ) هؾاُذٍ هی ؽْد
دس صیش هثالی آّسدٍ ؽذٍ اعت تا ؽشزی کَ آیا هایل ُغتیذ اداهَ دُیذ ّ عَ گضیٌَ اًتخاتی
تلَ ،خیش ّ کٌغل سا ؽاهل هی گشدد .عپظ تَ اصای اًتخاب گضیٌَ تلَ تؼذادی اص دادٍ ُا سا
دلیت ًوْدٍ ّ تَ اصای گضیٌَ خیشُ ،واى اغالػات سا اًتخاب هی ًوایذ.
عاختاس چٌیي تشًاهَ ای تَ ؽکل صیش ًْؽتَ هی ؽْد:
)(Sub message
x = MsgBox("do you want to continue?", vbYesNoCancel, "message
)"box
If x = vbYes Then
Rows("1000:2000").Select
Selection.Delete Shift:=xlUp
ElseIf x = vbNo Then
Rows("1000:2000").Select
End If
End Sub
18 | P a g e
www.ParsBook.org
VB in Excel برنامه نویسی ویژوال بیسیک در محیط اکسل
ُواًطْس کَ دس خػ دّم تشًاهَ هالزظَ هی گشددعاختاس کلی یک کادس پیغام ؽاهل عَ
تخؼ ػٌْاى ،ؽشذ ّ گضیٌَ ُای پیغام هی تاؽذ کَ تَ ػالهت ,اص ُن خذا هی ؽْد .تَ
ػثاست VBAدس قغوت هیاًی فشهْل تْخَ کٌیذ.
ًکتَ :اغالػات کاهل دس هْسد Massage Boxدس HELPاکغل آّسدٍ ؽذٍ اعت .
19 | P a g e
www.ParsBook.org
VB in Excel برنامه نویسی ویژوال بیسیک در محیط اکسل
حلقه ها
خِت اًدام کاسُای تکشاسی اص زلقَ ُا اعتفادٍ هی ؽْد .دس اتتذا تا زلقَ ُای forؽشّع
هی کٌین .
عاختاس کلی ایي زلقَ تَ ؽکل صیش ا عت:
دعتْسات
…………………
]Next [counter
تشای هثال :تشًاهَ ای هی ًْیغین کَ دس علِای اکغل تَ صْست یکی دسهیاى پش ًوایذ:
خِت ًیل تَ ایي ُذف اص فشهْل صیش اعتفادٍ هی ؽْد:
20 | P a g e
www.ParsBook.org
VB in Excel برنامه نویسی ویژوال بیسیک در محیط اکسل
21 | P a g e
www.ParsBook.org
VB in Excel برنامه نویسی ویژوال بیسیک در محیط اکسل
دس ایي خلغَ هی خْاُین پشّعَ ایداد یک ؽواسًذٍ) ،(CONTERغشیقَ خوغ ًوْدى
هقادیش ػذدی هْخْد دس یک عطش یا عتْى ّ ّ ...دس ًِایت هؼشفی زلقَ ؽشغی
LOOP-WHILEتپشداصین.
شوارًذٍ()COUNTER
دس خلغات گزؽتَ دیذین کَ تشای خوغ ًوْدى تؼذاد اغالػات هْخْد دس یک عطش یا یک
عتْى اص فشهْل ) ( =COUNTدس یک عل اص علِای اکغل اعتفادٍ هی ؽْد .دس ایي
هشزلَ هیخْاُین تا اعتفادٍ اص هتغیش ،COUNTERؽواسػ تؼذاد کشکتشُا صْست
پزیشد.
تذیي هٌظْس اتتذا تایذ هقذاس کاًتش سا تشاتش صفش گزاؽتَ ّ دس هشزلَ تؼذی پظ اص گزاسدى
ؽشغ تشًاهَ ،کاًتش سا هغاّی کاًتش 1+قشاس هی دُین:
دس هثال صیش تؼذاد ًوشات هْخْد داًؼ آهْصاى یک کالط ّخْد داسد .هی خْاُین تشًاهَ
ای تٌْیغین کَ تؼذاد افشادی کَ قثْل ؽذٍ اًذ ّ تؼذاد افشادی کَ قثْل ًؾذٍاًذ سا دس یک
عطش اکغل ًْؽتَ ّ خْد ًوشات سا ًیض تشزغة قثْلی ّ یا سد ؽذى افشاد تغییش سًگ
دُذ:
تشای ًیل تَ ایي ُذف هی تایغت اص یک زلقَ ّ FORیک ؽشغ IFاعتفادٍ ًواین.لزا
تشًاهَ تَ ؽکل صیش ًْؽتَ هی ؽْد:
)(Sub ccc
counter = 0
For i = 1 To 20
If Cells(i, 1).Value >= 10 Then
counter = counter + 1
Cells(i, 1).Font.ColorIndex = 5
Else
Cells(i, 1).Font.ColorIndex = 3
End If
Next i
End Sub
22 | P a g e
www.ParsBook.org
VB in Excel برنامه نویسی ویژوال بیسیک در محیط اکسل
ُواًطْس کَ هالزظَ ؽذ ،تشًاهَ دس اتتذا تشای هقذاس هتغیش COUNTERػذد صفش سا
دس ًظش داسدُ .واًطْس کَ ُش عػ خذّل تا ؽشغ خػ چِاسم تشسعی هی ؽْد ّ چٌاًچَ
ّاخذ ایي ؽشغ تْد(اػذاد تضسگتش اص )11یک ؽواسٍ تَ کاًتش اظافَ هی گشدد ّ
ُواًطْس تا اتوام تشًاهَ ایي پشعَ خایگضیٌی اداهَ پیذا هی کٌذ.
ًکتَ :هتغیش COUNTERفشهْل خاصی دس تشًاهَ ً VBAیغت.تَ خای ایي ػثاست
هی تْاى اص ُش هتغیش دیگشی کَ تْعػ VBAپزیشفتَ تاؽذ ًیض اعتفادٍ ًوْد.اعتفادٍ اص
ایي ػثاست تٌِا تشای اًتقال دسعت تش هفِْم ّ قاتل فِن تش ؽذى تشًاهَ تشای دیگش
اعتفادٍ کٌٌذگاى هی تاؽذ.
اًثاسٍ ()accumulator
دس ایي هشزلَ هی خْاُین پشّعَ خوغ ًوْدى اػذاد یک عطش یا یک عتْى ّ یا اػذادی
کَ هْسد تْخَ تشًاهَ هی تاؽٌذ سا هذ ًظش قشاس دُین .تَ ػٌْاى هثال هی خْاُین تشًاهَ
ای تٌْیغین کَ اػذاد فشد 1تا 111سا خوغ ًوْدٍ ّ ًتیدَ سا دس عل B1تایپ ًوایذ.
تشای ایي هٌظْس هی تایغت هتغیشی هاًٌذ Sumسا دس ًظش گشفت ّ زاصلدوغ سا هشتثا
دس آى اًثاس کٌین تشای ًیل تَ ایي هٌظْس هی تایغت تشًاهَ ای تَ ؽشذ صیش ًْؽت:
)(Sub aaa
Sum = 0
Cells(1, 2) = Sum
End Sub
ًکتَ :تَ ػثاست sum=sum+Iتْخَ کٌیذ .دس ًْؽتي یک ؽواسًذٍ ها تَ ؽواسٍ قثلی یک
1اظافَ هی کشدین ّلی دس خوغ ًوْدى تؼذاد اػذاد دس ایي تشًاهَ تایذ Iاًتخاتی سا هذ
ًظش قشاس دُینI .ای کَ تْعػ ؽشّغ هْخْد تشًاهَ ایداد گشدیذٍ اعت.
ُواًطْس کَ تشای هتغیش ً COUNTERیض ػٌْاى ؽذً SUM ،یض یک هتغیش اعت.
هتغیشی خِت اًتخاب ،خایگضیٌی ،خوغ ًوْدى ّ دس ًِایت خایگضیٌی هدذد.
23 | P a g e
www.ParsBook.org
VB in Excel برنامه نویسی ویژوال بیسیک در محیط اکسل
دس ایٌدا هی خْاُین تا رکش تشًاهَ عادٍ ای کاستشد ایي زلقَ سا تَ اختصاس تْظیر دُین.
تَ ػٌْاى ًوًَْ هی خْاُین تشًاهَ ای دس هسیػ VBAتٌْیغین کَ اػذاد هْخْد دس یک
عتْى اکغل سا تا خایی کَ ػذد ّخْد داسد خوغ ًوایذ.چٌیي تشًاهَ ای تایذ تَ ؽکل صیش
ًْؽتَ ؽْد:
)(Sub do_loop
i=0
Do
i=i+1
""><)Loop While Cells(i, 1
Cells(1, 2) = i – 1
End Sub
24 | P a g e
www.ParsBook.org
VB in Excel برنامه نویسی ویژوال بیسیک در محیط اکسل
هالزظَ هی ؽْد کَ تشًاهَ اػذاد Iسا دس عتْى هزکْس تا خایی کَ تَ عل خالی تشعیذ تا
ُن خوغ هی کٌذ.تْظیر تیؾتش ّ تشًاهَ ُای تیؾتش دس هْسد ایي زلقَ ؽشغی تَ خلغَ تؼذ
هْکْل هی ؽْد.
ًکتَّ :قتی اص WHILEاعتفادٍ هی ؽْد هاداهیکَ ؽشغ تشقشاس تاؽذ دعتْسات اًدام
هیؾًْذ
ّقتی اص Untilاعتفادٍ هی ؽْد زلقَ تَ هسط ّقْع ؽشغ زلقَ خاتوَ هی یاتذ( تَ
ػثاستی زلقَ تا صهاًیکَ ؽشغ تشقشاس ًیغت اداهَ پیذا هی کٌذ)
25 | P a g e
www.ParsBook.org
VB in Excel برنامه نویسی ویژوال بیسیک در محیط اکسل
تَ خای ایي ػثاست دس صْستی کَ اص زلقَ ؽشغی DO-LOOPاعتفادٍ هی کٌین هی
تْاًین اص ػثاست صیش اعتفادٍ ًوایین:
))Loop Until IsEmpty(Cells(i, 1
)(Sub do_loop
i=0
Do
i=i+1
))Loop Until IsEmpty(Cells(i, 1
Cells(1, 2) = i - 1
End Sub
هثال دّم :هی خْاُین تشًاهَ ای تٌْیغین هدوْع هقادیش 1تا 111سا تذّى آًکَ دس
علِای خذّل ایي اػذاد سا ًؾاى دُذ ،دس یک ً MASSAGE BOXؾاى دُذ.تشًاهَ تَ
ؽکل صیش ًْؽتَ هی ؽْد:
)(Sub do_loop2
i=1
Sum = 0
Do
Sum = Sum + i
26 | P a g e
www.ParsBook.org
VB in Excel برنامه نویسی ویژوال بیسیک در محیط اکسل
i=i+1
Loop While i <= 100
MsgBox Sum
End Sub
هثال سْم:تؼذادی ػذد دس علِای یک عتْى اکغل ّخْد داسد کَ تشخی علِای ُواى
عتْى خالی ّ فاقذ ػذد اعت .تشًاهَ ای تٌْیغیذ کَ آخشیي ػذد آى عتْى سا دس عطش B1
تٌْیغذ.
تشًاهَ هْسد اؽاسٍ تَ ؽکل صیش ًْؽتَ خْاُذ ؽذ:
)(Sub do_loop3
i = 1000
Do
i=i-1
))Loop While IsEmpty(Cells(i, 1
MsgBox i
End Sub
27 | P a g e
www.ParsBook.org
VB in Excel برنامه نویسی ویژوال بیسیک در محیط اکسل
هی خْاُین تاتؼی تٌْیغین تا هؼشفی ًوْدى عَ هالفَ دس آهذُ ،ضیٌَ ّ دسصذ هالیات،
خالص دس آهذ سا هساعثَ ًوایذ:
الف -استفادٍ از گسیٌَ user difandبرای اجرای برًاهَ کَ دس ایي زالت پٌدشٍ ای تاص
هی ؽْد ّ اص ها هی خْاُذ کَ ُش یک اص عَ هتغیش تشًاهَ سا هؾخص کٌین تا دس ًِایت
زاصل سا تَ ها گضاسػ ًوایذ.
دّمًْ -شتي فرهْل در یکی از سلِای اکسل:ایٌکَ ّاسد یکی اص علِای اکغل ؽْین دس
ایٌدا هاًٌذ ُش تشًاهَ دیگشی هی ًْیغین:
)=NETPROFIT(A1;B1;C1
تذیِی اعت علِای داخل پشاًتض تَ تشتیة دس ایٌدا دس تش گیشًذٍ دس آهذُ ،ضیٌَ ّ دسصذ
هالیات هی تاؽذ.
28 | P a g e
www.ParsBook.org
VB in Excel برنامه نویسی ویژوال بیسیک در محیط اکسل
هثال اّل:
هی خْاُین تاتؼی تٌْیغین کَ عي افشاد سا تگیشد ّ چٌاًچَ صیش 11عال اعت تگْیذ خیلی
خْاى ،تیي 11تا 25سا هٌاعة ّ تاالی 25عال سا تَ ػٌْاى خیلی پیش هؼشفی
ًوایذ.عاختاس چٌیي تاتؼی تَ ؽکل صیش هی تاؽذ:
)Function check_old(old
Select Case old
Case Is <= 18
"check_old = "too young
Case 18 To 65
"check_old = "ok
Case Is > 65
"check_old = "too old
End Select
End Function
29 | P a g e
www.ParsBook.org
VB in Excel برنامه نویسی ویژوال بیسیک در محیط اکسل
هثال دّم:
هی خْاُین تشًاهَ ای تٌْیغین کَ دس اتتذا تش زغة ّصى ّقذ افشاد ُ BMIش فشد سا
هساعثَ ّ ًؾاى دُذ.عپظ تشًاهَ دیگشی کَ تا تْخَ تَ ایي ػذد ًؾاى دُذ کَ ایي اًذاصٍ
ً BMIؾاى دٌُذٍ کذاهیک اص ّظؼیتِای کن ّصًیً ،شهال ّ یا اظافَ ّصى هی تاؽذ؟
چٌیي تشًاهَ ای تَ ؽکل صیش ًْؽتَ هی ؽْد:
)Function check_weight(BMI
Select Case BMI
Case Is <= 15
"check_weight = "under weight
Case 15 To 25
"check_weight = "normal
Case Is > 25
"check_weight = "over weight
End Select
End Function
30 | P a g e
www.ParsBook.org
VB in Excel برنامه نویسی ویژوال بیسیک در محیط اکسل
)(Sub bbb
"s = "this class name is
s = s & vbNewLine
"s = s & "VBA
MsgBox s
End Sub
31 | P a g e
www.ParsBook.org
VB in Excel برنامه نویسی ویژوال بیسیک در محیط اکسل
ج – تابع LEN:
ایي تاتغ تؼذاد کشکتشُای هْخْد دس سؽتَ ؽوا سا هی ؽواسد .تْخَ تَ ایي ًکتَ زائض
اُویت اعت کَ سؽتَ ؽوا هی تْاًذ دادٍ ُای هْخْد دس یک عل اکغل تاؽذ .عاختاس کلی
تاتغ LENتَ ؽکل صیش هی تاؽذ:
) (Len
کَ دس داخل پشاًتض سؽتَ هْسد ًظش ها قشاس خْاُذ گشفت.
هثال سْم:هی خْاُین تؼذاد کشکتش ُای هْخْد دس ًام Ali Fatehiتْعػ تشًاهَ دس
یک هغیح تاکظ ًوایؼ دادٍ ؽْد.تشًاهَ هْسد ًظش ها تا اعتفادٍ اص تاتغ تاال هی تایغت
ؽکلی هاًٌذ صیش داؽتَ تاؽذ:
)(Sub ccc
)"s = Len("ALI FATEHI
MsgBox s
End Sub
هثال چِارم:هی خْاُین تا اعتفادٍ اص تاتغ فْق ،تشًاهَ ای تٌْیغین کَ چِاس سقن عال
1359دس تاسیخ تغیاس هِن 1359/12/22سا خذا ًوْدٍ ّ ًوایؼ دُذ .عاختاس چٌیي
تشًاهَ ای تَ ؽکل صیش ًْؽتَ خْاُذ ؽذ:
)(Sub ddd
"s = "1359/12/22
)t = Left(s, 4
MsgBox t
End Sub
32 | P a g e
www.ParsBook.org
VB in Excel برنامه نویسی ویژوال بیسیک در محیط اکسل
هثال پٌجن:هی خْاُین دس سؽتَ ای هاًٌذ" "VBAتٌِا عَ کلوَ ً VBAوایؼ دادٍ ؽْد.
عاختاس چٌیي تشًاهَ ای تَ ؽکل صیش خْاُذ تْد:
)(Sub eee
"s = " VBA
)t = Trim(s
MsgBox t
End Sub
)(Sub fff
"s = "visual basic
)t = Mid(s, 8, 5
MsgBox t
End Sub
33 | P a g e
www.ParsBook.org
VB in Excel برنامه نویسی ویژوال بیسیک در محیط اکسل
تاتغ INSTRدس سؽتَ هْسد ًظش اصُش خایی کَ تخْاُین ؽشّع هی کٌذ ،سؽتَ اّل سا
دس ًظش هی گیشد ،دًثال سؽتَ یا هتغیش خاصی تگشدد ّ ؽواسٍ آى سا تَ ها تگْیذ:
هثال آخر:
یک تاسیخ هؾخص هاًٌذ تاسیخ هِن 1355/12/22سا کَ تا هویض" "/اص ُن خذا ؽذٍ اًذ سا
دس ًظش هی گیشین .تشًاهَ ای تٌْیغیذ کَ عال هاٍ ّ سّص سا خذا ًوْدٍ ّ دس عَ کادس
پیغام ًوایؼ دُذ.
)(Sub hhh
"s = "1359/12/22
)"i = InStr(1, s,"/
)"j = InStr(i + 1, s,"/
)y = Mid(s, 1, i – 1
)m = Mid(s, i + 1, (j - 1) – i
)d = Mid(s, j + 1
MsgBox y
MsgBox m
MsgBox d
End Sub
34 | P a g e
www.ParsBook.org