قبلا در مورد ماکرو در اکسل و راحت روش ایجاد آن در اکسل مطلبی منتشر کردیم و حالا می خواهیم 20 ماکرو بسیار کاربردی و البته ساده را معرفی کنیم که با استفاده از آنها می توانید در وقت خود به میزان قابل توجهی صرفه جویی کنید .
ویدیو آموزش استفاده از ماکروها
[su_box title=”دسترسی سریع ” style=”soft” box_color=”#006300″]
نمایش تمام شیتهای مخفی شده در اکسل
مخفی کردن تمام شیتها به غیر از شیتی که فعال هست
شیتهای موجود در فایل اکسل را به ترتیب الفبا مرتب سازی می کند .
با یک کلیک تمام شیتهای اکسل خود را محافظت کنید
برعکس کد بالا عمل کرده و پسورد شیتها را بر می دارد .
تمام ردیفها و ستونهای فایل اکسل را از حالت مخفی خارج کنید .
سلولهایی که با هم یکی شده اند را از هم جدا کنید
ذخیره کردن فایل اکسل جاری به نام تاریخ فعلی
ذخیره کردن شیتهای یک فایل اکسل با فرمکت PDF
فقط شیت جاری رو با فرمت PDF ذخیره می کنه
تمام فرمولهایی که استفاده کرده اید را به مقدار تبدیل می کند
سلولهای حاوی فرمول را قفل می کند
تمام شیتهای موجود در فایل اکسل را محافظت کنید
یک سطر بین تمام سطرهای انتخاب شده اضافه کنید
یک سطر در میان محدوده انتخابی را هایلایت می کند .
تمام پایوت تیبل های ایجاد شده را رفرش کنید
سلولهای دارای توضیحات رو هایلایت می کند
استخراج داده های عددی که با فایل متنی وارد شده اند
استخراج داده های متنی یک محدوده
[/su_box]
1[sta_anchor id=”1″ /]- نمایش تمام شیتهای مخفی شده در اکسل
اگر با فایل اکسلی کار می کنید که حاوی تعدادی شیت مخفی است می توانید با ماکرو زیر و با یک کلیک همه آنها را نمایش دهید .
'این کد تمام شیتهای مخفی اکسل را نمایش می دهد Sub UnhideAllWoksheets() Dim ws As Worksheet For Each ws In ActiveWorkbook.Worksheets ws.Visible = xlSheetVisible Next ws End Sub
2- [sta_anchor id=”2″ /]مخفی کردن تمام شیتها به غیر از شیت فعال توسط ماکرو در اکسل
برعکس کد بالا عمل می کند و تمام شیتهای اکسلی که باز است را مخفی می کند به غیر از شیت جاری
'به جز شیت جاری بقیه مخفی می شوند Sub HideAllExceptActiveSheet() Dim ws As Worksheet For Each ws In ThisWorkbook.Worksheets If ws.Name <> ActiveSheet.Name Then ws.Visible = xlSheetHidden Next ws End Sub
3-[sta_anchor id=”3″ /] شیتهای موجود در فایل اکسل را به ترتیب الفبا مرتب سازی می کند .
امکان دارد فایل اکسلی داشته باشید که از تعداد زیادی شیت تشکیل شده باشد و بخواهید شیتها را بر اساس نام مرتب سازی کنید . به عنوان مثال نام شیتها ماههای سال است .
'شیتهای فایل اکسل شما را به ترتیب الفبا مرتب می کند Sub SortSheetsTabName() Application.ScreenUpdating = False Dim ShCount As Integer, i As Integer, j As Integer ShCount = Sheets.Count For i = 1 To ShCount - 1 For j = i + 1 To ShCount If Sheets(j).Name < Sheets(i).Name Then Sheets(j).Move before:=Sheets(i) End If Next j Next i Application.ScreenUpdating = True End Sub
4- [sta_anchor id=”4″ /]با یک کلیک تمام شیتهای اکسل خود را محافظت کنید
با استفاده از کد زیر می توانید برای همه شیتهای فایل اکسل خود پسورد انتخاب کرده آنها رو قفل کنید ، در مثال زیر پسورد 123 در نظر گرفته شده که می توانید عوض کنید .
' برای همه شیتها پسورد در نظر گرفته و قفل می شوند Sub ProtectAllSheets() Dim ws As Worksheet Dim password As String password = "123" For Each ws In Worksheets ws.Protect password:=password Next ws End Sub
5- [sta_anchor id=”5″ /]برعکس کد بالا عمل کرده و پسورد شیتها را بر می دارد .
اگر شیتهای فایل اکسل خود را با رمز محافظت کرده باشید با کد زیر می توانید تمام پسوردها رو بردارید.
'پسورد شیتهای خود را بردارید Sub ProtectAllSheets() Dim ws As Worksheet Dim password As String password = "123" ' For Each ws In Worksheets ws.Unprotect password:=password Next ws End Sub
نکته : کد بالا در صورتی کار می کند که رمز شیتهای شما 123 باشد .
6- [sta_anchor id=”6″ /]تمام ردیفها و ستونهای فایل اکسل را از حالت مخفی خارج کنید .
با استفاده از کد زیر و تنها یک کلیک می توانید تمام ردیفها و ستونهایی که از دید شما پنهان شده اند را به نمایش در آورید.
'نمایش همه ستونها و ردیفها Sub UnhideRowsColumns() Columns.EntireColumn.Hidden = False Rows.EntireRow.Hidden = False End Sub
7- [sta_anchor id=”7″ /]سلولهایی که با هم یکی شده اند را از هم جدا کنید ، Merge و Unmerg
فایل اکسلی دارید که بعضی از سلولهای آن با هم یکی شده اند با استفاده از کد زیر به راحتی می توانید آنها جدا کنید .
'جدا کردن سلولهایی که با هم یکی شده اند Sub UnmergeAllCells() ActiveSheet.Cells.UnMerge End Sub
8- [sta_anchor id=”8″ /]ذخیره کردن فایل اکسل جاری به نام تاریخ فعلی
کد زیر فایل جاری رو با یه اسم منحصر به فرد در مسیر درایو D ذخیره می کنه .
نکته : اگر از تاریخ شمسی اکسل استفاده می کنید می تونید با تاریخ شمسی ذخیره کنید .
Sub SaveWorkbookWithTimeStamp() Dim timestamp As String timestamp = Format(Date, "dd-mm-yyyy") & "_" & Format(Time, "hh-ss") ThisWorkbook.SaveAs "D:Officebaz" & timestamp End Sub
9- [sta_anchor id=”9″ /]ذخیره کردن شیتهای یک فایل اکسل با فرمت PDF
فرض کنید فایل اکسلی دارید که 10 تا شیت مختلف داره با اجرای کد زیر می تونید فایل رو تو 10 تا فایل PDF جداگانه ذخیره کنید
نکته : برای استفاده از ماکرو زیر مطمئن شوید که در دریاو C پوشه ای با نام pdfs داشته باشید .
Sub createPDFfiles()
Dim ws As Worksheet
Dim Fname As String
For Each ws In ActiveWorkbook.Worksheets
On Error Resume Next 'Continue if an error occurs
Fname = "Annex 1.1." & ws.Index & "_result"
Fname = "C:\pdfs\" & ActiveWorkbook.Name & "-" & ws.Name
ws.ExportAsFixedFormat _
Type:=xlTypePDF, _
Filename:=Fname, _
Quality:=xlQualityStandard, _
IncludeDocProperties:=True, _
IgnorePrintAreas:=False
Next ws
End Sub
نکته :
اگر بخواهید محدوده ثابتی از یک شیت را ذخیره کنید ، کد زیر مناسب شماست :
- هر عبارتی که در A1 وارد کرده باشید به عنوان نام در نظر گرفته میشود
- کد زیر محدوده A1:C1 را با فرمت PDF ذخیره می کند
Public Sub Save_Range_As_PDF_On_Desktop()
Dim fileName As String, saveAsFileName As Variant
Dim PDFrange As Range
With ActiveSheet
fileName = .Range("A1").Value & ".pdf"
Set PDFrange = .Range("A1:C1")
End With
saveAsFileName = Application.GetSaveAsFilename(InitialFileName:=Get_SpecialFolderPath("Desktop") & fileName, _
FileFilter:="PDF file (*.pdf), *.pdf", _
Title:="Save PDF file")
If saveAsFileName <> False Then
PDFrange.ExportAsFixedFormat Type:=xlTypePDF, fileName:=saveAsFileName, _
Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=False
End If
End Sub
Private Function Get_SpecialFolderPath(SpecialFolderName As Variant) As String
Get_SpecialFolderPath = CreateObject("WScript.Shell").SpecialFolders(SpecialFolderName) & "\"
End Function
10-[sta_anchor id=”10″ /] فقط شیت جاری رو با فرمت PDF ذخیره می کنه
کد بالا تک تک شیتها رو ذخیره می کرد و این کد فقط شیت جاری رو با پسوند PDF ذخیره می کنه ، البته فراموش نکنید که آدرس فولدر رو در کد زیر باید عوض کنید .
Sub PDFActiveSheet()
'for Excel 2010 and later
Dim wsA As Worksheet
Dim wbA As Workbook
Dim strTime As String
Dim strName As String
Dim strPath As String
Dim strFile As String
Dim strPathFile As String
Dim myFile As Variant
On Error GoTo errHandler
Set wbA = ActiveWorkbook
Set wsA = ActiveSheet
strTime = Format(Now(), "yyyymmdd\_hhmm")
'get active workbook folder, if saved
strPath = wbA.Path
If strPath = "" Then
strPath = Application.DefaultFilePath
End If
strPath = strPath & "\"
'replace spaces and periods in sheet name
strName = Replace(wsA.Name, " ", "")
strName = Replace(strName, ".", "_")
'create default name for savng file
strFile = strName & "_" & strTime & ".pdf"
strPathFile = strPath & strFile
'use can enter name and
' select folder for file
myFile = Application.GetSaveAsFilename _
(InitialFileName:=strPathFile, _
FileFilter:="PDF Files (*.pdf), *.pdf", _
Title:="Select Folder and FileName to save")
'export to PDF if a folder was selected
If myFile <> "False" Then
wsA.ExportAsFixedFormat _
Type:=xlTypePDF, _
Filename:=myFile, _
Quality:=xlQualityStandard, _
IncludeDocProperties:=True, _
IgnorePrintAreas:=False, _
OpenAfterPublish:=False
'confirmation message with file info
MsgBox "PDF file has been created: " _
& vbCrLf _
& myFile
End If
exitHandler:
Exit Sub
errHandler:
MsgBox "Could not create PDF file"
Resume exitHandler
End Sub
11- [sta_anchor id=”11″ /]تمام فرمولهایی که استفاده کرده اید را به مقدار تبدیل می کند
داده های به دست آمده توسط فرمول را از حالت فرمول خارج می کند ( تمام فرمولهای استفاده شده )
'This code will convert all formulas into values Sub ConvertToValues() With ActiveSheet.UsedRange .Value = .Value End With End Sub
12- [sta_anchor id=”12″ /]سلولهای حاوی فرمول را قفل می کند
اگر فایل اکسلی داشته باشید که حاوی فرمولهای مختلفی باشد به راحتی با استفاده از کدهای زیر می توانید از تمام سلولهای حاوی فرمول محافظت نمائید .
'This macro code will lock all the cells with formulas Sub LockCellsWithFormulas() With ActiveSheet .Unprotect .Cells.Locked = False .Cells.SpecialCells(xlCellTypeFormulas).Locked = True .Protect AllowDeletingRows:=True End With End Sub
13-[sta_anchor id=”13″ /] تمام شیتهای موجود در فایل اکسل را محافظت کنید
با استفاده از کد زیر تمام شیتها قفل می شود
'This code will protect all sheets in the workbook Sub ProtectAllSheets() Dim ws As Worksheet For Each ws In Worksheets ws.Protect Next ws End Sub
14- [sta_anchor id=”14″ /]یک سطر بین تمام سطرهای انتخاب شده اضافه کنید
'This code will insert a row after every row in the selection Sub InsertAlternateRows() Dim rng As Range Dim CountRow As Integer Dim i As Integer Set rng = Selection CountRow = rng.EntireRow.Count For i = 1 To CountRow ActiveCell.EntireRow.Insert ActiveCell.Offset(2, 0).Select Next i End Sub
15-[sta_anchor id=”15″ /] یک سطر در میان محدوده انتخابی را هایلایت می کند .
This code would highlight alternate rows in the selection
Sub HighlightAlternateRows()
Dim Myrange As Range
Dim Myrow As Range
Set Myrange = Selection
For Each Myrow In Myrange.Rows
If Myrow.Row Mod 2 = 1 Then
Myrow.Interior.Color = vbCyan
End If
Next Myrow
End Sub
16- [sta_anchor id=”16″ /]تمام پایوت تیبل های ایجاد شده را رفرش کنید
'This code will refresh all the Pivot Table in the Workbook Sub RefreshAllPivotTables() Dim PT As PivotTable For Each PT In ActiveSheet.PivotTables PT.RefreshTable Next PT End Sub
با استفاده از کد بالا می توانید پایوت تیبلهای موجود در شیت خود را به روزرسانی نمائید
17- [sta_anchor id=”17″ /]سلولهای دارای توضیحات رو هایلایت می کند
'This code will highlight cells that have comments` Sub HighlightCellsWithComments() ActiveSheet.Cells.SpecialCells(xlCellTypeComments).Interior.Color = vbBlue End Sub
فرض کنید که فایل اکسلی دارید که دارای کامنت و یا توضیحات مختلفی در سلولهای خود می باشد . با استفاده از کد بالا تمام سلولهای حاوی کامنت هایلایت می شوند .
کانتهای سلولهای اکیل می تواند تصویری باشد .
18- [sta_anchor id=”18″ /]با این ماکرو در اکسل سلولهای خالی را رنگی کنید
'This code will highlight all the blank cells in the dataset Sub HighlightBlankCells() Dim Dataset as Range Set Dataset = Selection Dataset.SpecialCells(xlCellTypeBlanks).Interior.Color = vbRed End Sub
قبلا در مورد سلولها خالی و پیدا کردن آنها مزلب داشته ایم و کد بالا تمام سلولهای خالی رنج انتخب شده را رنگی می کند .
19-[sta_anchor id=”19″ /] استخراج داده های عددی که با فایل متنی وارد شده اند
اگر فایل اکسلی مطابق عکس زیر داشته باشید ، به راحتی با استفاده از کد می توانید مقادیر عددی سلولها را جدا کنید.
Sub ExtrNumbersFromRange()
Dim xRg As Range
Dim xDRg As Range
Dim xRRg As Range
Dim nCellLength As Integer
Dim xNumber As Integer
Dim strNumber As String
Dim xTitleId As String
Dim xI As Integer
xTitleId = "Officebaz.ir"
Set xDRg = Application.InputBox("محدوده داده را انتخاب کنید:", xTitleId, "", Type:=8)
If TypeName(xDRg) = "Nothing" Then Exit Sub
Set xRRg = Application.InputBox("لطفا آدرس هدف را انتخاب کنید:", xTitleId, "", Type:=8)
If TypeName(xRRg) = "Nothing" Then Exit Sub
xI = 0
strNumber = ""
For Each xRg In xDRg
xI = xI + 1
nCellLength = Len(xRg)
For xNumber = 1 To nCellLength
If IsNumeric(Mid(xRg, xNumber, 1)) Then
strNumber = strNumber & Mid(xRg, xNumber, 1)
End If
Next xNumber
xRRg.Item(xI) = strNumber
strNumber = ""
Next xRg
End Sub
20- [sta_anchor id=”20″ /]استخراج داده های متنی یک محدوده
برعکس کد بالا عمل کرده و داده های متنی یک محدوده را از داده های عددی جدا می کند .
Function ExtractNumbers(strText As String) 'Declare the necessary variables. Dim i As Integer, strDbl As String 'Loop through each character in the cell. For i = 1 To Len(strText) 'If the character is a digit, append it to the strDbl variable. If IsNumeric(Mid(strText, i, 1)) Then strDbl = strDbl & Mid(strText, i, 1) End If Next i ExtractNumbers = CDbl(strDbl) End Function Function ExtractLetters(strText As String) 'Declare the necessary variables. Dim x As Integer, strTemp As String 'Loop through each character in the cell. For x = 1 To Len(strText) 'If the character is not numeric, it must be a letter, 'so append it to the strTemp variable. If Not IsNumeric(Mid(strText, x, 1)) Then strTemp = strTemp & Mid(strText, x, 1) End If Next x ExtractLetters = strTemp End Function
امیدوارد که ماکروهای بالا مفید باشد و بتوانید از آنها بهره ببرید اگر شما هم ماکرویی به ذهنتان می رسد در نظرات عنوان نمائید تا به لیست بالا افزوده شود .





باسلام وخسته نباشید
مطالب ارئه شده خیلی کاربردی ومفید میباشد. برای من راهنمای خوبی در یادگیری مطالب اکسل واکسس بوده است . لطفا در صورت امکان ماکروجهت اخطارسررسید چک بنویسید
باتشکر فراوان
سلام
اخطار سررسید چک ماکرو لازم نداره و با ترکیب چند تابع قابل انجام هست
سلام
بسیار عالی و مفید . ممنون
خواهش می کنم
سلام
عالی بود ، ردیف 9 غلط املایی دارد.
سلام
ممنون از شما ارتقا پیدا کرد
سلام
مورد 10فکر کنم مشکل دارد ، همه شیت ها رو در یک فایل تبدیل میکند به PDF
ماکرو شماره 10 کامل شده
حالا دیگه مسیر ذخیره فایل PDF رو ازتون سوال میکنه
فقط یه نکته برای متغیر strTime اگه توابع شمسی داشته باشید می تونید فایلتون رو با تاریخ شمسی روز ذخیره کنید
سلام آقای مهندس خیلی خیلی ممنون واقعا کارتون درسته
آقای مهندس من یه فایل دارم میخوام یه قسمت خاصی از اون رو تبدیل به pdf کنم توی ماکروهایی که قرار دادین تبدیل یه شیت به pdf وجود داره ولی من نمیخوام تمام اون شیت تبدیل به pdf بشه و یه قسمت خاصی رو میخوام دقیقا باید چیکار کنم
سلام
به ماکرو شماره 9 نکته ای اضافه کردم که فکر کنم خواسته شما باشه
سلام مهندس وقتتون بخیر و تشکر از زحماتتون
با کسب اجازه سوالی داشتم خدمتتوت در صورت تمایل پاسخ بدهید ممنون می شم
بنده در یک شرکت کار می کنم که هر روز لیست اکسل شماره تلفن های مشتری ها وده خط شرکت که با ان تماس گرفته شده و یا ما تماس گرفته ایم داده می شود با چه نرم افزار می توانم ببینم بیشترین تماس گیرنده و مشتری ما کدام است لیست گفته شده در دو برگه اکسل و بصورت مجزا داده شده که در یک لیست اسامی و شماره تلفن مشتریان و در لیست دیگر فقط شماره های تماس گرفته شده ثبت شده من می تونم با اکسل کاری کنم (البته با گذرندن دوره شما) مجزا کردن مشتریان 2 تعداد تماس انها به تفکیک در یک جدول دیگر و 3 جایگزینی اسامی انها با شماره ها بصورت خودکار
سلام: از آموزش های که گذاشتید بسیار لذت بردم استاد بزرگوار دست مریزاد ممنون ازتون مهدی علیزاده 09125977356
باسلام و خسته نباشید
میشه ماکرو را بنویسید که برای نمایش و مخفی کردن یک جدول باشه؟
ممنونم
یله در واقع می تونین یک رنج داده رو مخفی کنین
با سلام
میشه برای مخفی شدن و نمایش دادن یک جدول ماکرو نوشت ؟
امکانش هست این را هم بنویسید
ممنونم