18 Mã VBA Excel Hữu ích Giúp Tiết Kiệm Thời Gian

Cách cài đặt macro Trong Excel, nhấn tổ hợp phím alt + F11. Điều này sẽ đưa bạn đến trình soạn thảo VBA trong MS Excel. Sau đó, bấm chuột phải vào thư mục Đối tượng Microsoft Excel ở bên trái và chọn Chèn => Mô-đun. Đây là nơi lưu trữ các macro. Để sử dụng macro, bạn cần lưu tài liệu Excel dưới dạng macro. Từ tệp tab => lưu dưới dạng, chọn lưu dưới dạng sổ làm việc hỗ trợ macro (tiện ích mở rộng .xlsm) Bây giờ, đã đến lúc viết macro đầu tiên của bạn!

Sao chép dữ liệu từ tệp này sang tệp khác.

Macro rất hữu ích, vì nó cho thấy cách sao chép một phạm vi dữ liệu từ bên trong vba và cách tạo và đặt tên cho một bảng tính mới. Bạn có thể dễ dàng nâng cấp nó để phù hợp với yêu cầu của riêng bạn:

Sub CopyFiletoAnotherWorkbook () 'Sao chép các bảng dữ liệu ( "Ví dụ 1" ) .Range ( "B4: C15" ) .Copy ' Tạo một bảng tính mới Sách bài tập 'Dán dữ liệu ActiveSheet.Paste 'Tắt cảnh báo ứng dụng Application.DisplayAlerts = false ' Lưu tệp mới. Thay đổi tên của thư mục. ActiveWorkbook.SaveAs Tên tệp: = "C: \ Temp \ MyNewBook.xlsx" 'Bật lại cảnh báo ứng dụng trên Application.DisplayAlerts = True End Sub

Hiển thị các hàng ẩn

Đôi khi, các tệp Excel lớn chứa các dòng ẩn để rõ ràng hơn. Đây là một macro sẽ bỏ ẩn tất cả các hàng từ một bảng tính hoạt động:

Sub ShowHiddenRows () Cột.EntireColumn.Hidden = false Rows.EntireRow.Hidden = false End Sub

Xóa các hàng và cột trống

Các hàng trống trong Excel là một vấn đề với xử lý dữ liệu. Đây là cách để loại bỏ chúng:

Sub DeleteEmptyRowsAndColumns () 'Khai báo các biến của bạn. Dim MyRange As Range Dim iCount As Long 'Xác định Phạm vi mục tiêu. Đặt MyRange = ActiveSheet.UsedRange 'Bắt đầu vòng lặp ngược qua phạm vi Hàng. Đối với iCount = MyRange.Rows.Count To 1 Bước -1 'Nếu toàn bộ hàng trống thì xóa nó. Nếu Application.CountA (Hàng (iCount) .EntireRow) = 0 Sau đó Hàng (iCount) .Delete 'Xóa nhận xét để xem hàng nào ' MsgBox "hàng" & iCount & "trống" Kết thúc nếu 'Tăng bộ đếm xuống Tiếp theo iCount ' Bước 6: Bắt đầu vòng lặp ngược qua phạm vi Cột. Đối với iCount = MyRange.Columns.Count To 1 Bước -1 'Bước 7: Nếu toàn bộ cột trống thì xóa nó. Nếu Application.CountA (Cột (iCount) .EntireColumn) = 0 Sau đó Cột (iCount) .Xóa Kết thúc nếu 'Bước 8: Tăng bộ đếm xuống Tiếp theo iCount End Sub

Tìm một ô trống

Sub FindEmptyCell () ActiveCell. Offerset ( 1 , 0 ). Chọn Do While Not IsEmpty (ActiveCell) ActiveCell. Offerset ( 1 , 0 ). Chọn vòng lặp kết thúc phụ

Thay thế các ô trống bằng một giá trị.

Như đã đề cập trước đây, các ô trống can thiệp vào xử lý dữ liệu và tạo các bảng trụ. Đây là một mã thay thế tất cả các ô trống bằng 0. Macro này có ứng dụng rất lớn vì bạn có thể sử dụng nó để tìm và thay thế kết quả N / A, cũng như các ký tự khác như dấu chấm, dấu phẩy hoặc giá trị trùng lặp:

Sub FindAndReplace () 'Khai báo các biến của bạn Dim MyRange As Range Dim MyCell As Range ' Lưu Workbook trước khi thay đổi các ô? Chọn Case MsgBox ( "Không thể hoàn tác hành động này." & _ "Lưu sổ làm việc trước?" , VbYesNo Hủy) Case Is = vbYes ThisWorkbook.Save Case Is = vb Hủy Thoát Sub End Chọn 'Xác định Phạm vi đích. Đặt MyRange = Lựa chọn 'Bắt đầu lặp qua phạm vi. Đối với mỗi MyCell trong MyRange 'Kiểm tra độ dài bằng 0, sau đó thêm 0. Nếu Len (MyCell.Value) = 0 Sau đó MyCell = 0 End If ' Nhận ô tiếp theo trong phạm vi Tiếp theo MyCell End Sub

Sắp xếp số

Các macro sau sắp xếp theo thứ tự tăng dần tất cả các số từ cột của ô hiện hoạt. Chỉ cần nhấp đúp vào bất kỳ ô nào từ một cột bạn muốn sắp xếp. Lưu ý: Bạn cần đặt mã trong Bảng 1 chứ không phải trong mô-đun để hoạt động:

Bảng tính phụ riêng tư_ BeforeDoubleClick ( Mục tiêu ByVal là Phạm vi, Hủy dưới dạng Boolean ) 'Khai báo biến của bạn Dim LastRow As Long ' Tìm hàng cuối LastRow = Cells (Rows.Count, 1 ). Kết thúc (xlUp) .Row 'Sắp xếp tăng dần trên hàng cột nhấp đúp ( "6:" & LastRow) .Sort Khóa1: = Các ô ( 6 , ActiveCell.Column), _ Thứ tự1: = xlAsceinating Kết thúc phụ

Xóa các khoảng trống

Đôi khi, dữ liệu trong sổ làm việc chứa các khoảng trắng (khoảng trắng) bổ sung có thể can thiệp vào phân tích dữ liệu và làm hỏng các công thức. Đây là một macro sẽ loại bỏ tất cả các khoảng trắng khỏi một phạm vi ô được chọn trước:

Sub TrimTheSpaces () 'Khai báo các biến của bạn Dim MyRange As Range Dim MyCell As Range ' Lưu Workbook trước khi thay đổi ô Chọn Case MsgBox ( "Không thể hoàn tác hành động này." & _ "Lưu Workbook trước?" , VbYesNoftime) Case Is = vbYes ThisWorkbook.Save Case Is = vb Hủy Thoát Sub End Chọn 'Xác định Phạm vi đích. Đặt MyRange = Lựa chọn 'Bắt đầu lặp qua phạm vi. Đối với mỗi MyCell trong MyRange 'Cắt các không gian. Nếu không phải là IsEmpty (MyCell) thì MyCell = Trim (MyCell) Kết thúc Nếu 'Nhận ô tiếp theo trong phạm vi Tiếp theo MyCell Kết thúc phụ

Làm nổi bật các giá trị được công bố

Đôi khi có các giá trị trùng lặp trong một số cột chúng tôi muốn chiếu sáng. Đây là một macro thực hiện điều đó:

Sub HighlightD repeatates () 'Khai báo các biến của bạn Dim MyRange As Range Dim MyCell As Range ' Xác định Phạm vi mục tiêu. Đặt MyRange = Lựa chọn 'Bắt đầu lặp qua phạm vi. Đối với mỗi MyCell trong MyRange 'Đảm bảo ô có định dạng Văn bản. If WorksheetFunction.Count If (MyRange, MyCell.Value)> 1 Sau đó MyCell.Interior.ColorIndex = 36 End If 'Nhận ô tiếp theo trong phạm vi Kết thúc MyCell Tiếp theo Sub

Đánh dấu mười giá trị hàng đầu

Mã này sẽ làm nổi bật mười giá trị hàng đầu từ một lựa chọn các ô:

Sub TopTen () Lựa chọn.FormatConditions.AddTop10 Lựa chọn.FormatConditions (Lựa chọn.FormatConditions.Count). SetFirstP Warriority Với Lựa chọn.FormatConditions ( 1 ) .TopBottom = xlTop10Top 'Thay đổi thứ hạng ở đây để làm nổi bật một số khác nhau của các giá trị .Rank = 10 .Percent = False End Với Với Selection.FormatConditions ( 1 ) .Font .Color = -16752384 .TintAndShade = 0 End Với Với Selection.FormatConditions ( 1 ) .Interior .PotypeColorIndex = xlAutomatic.Color = 13561798 .TintAndShade = 0 Kết thúc với lựa chọn.FormatConditions ( 1 ) .Stop IfTrue = false End Sub

Bạn có thể dễ dàng điều chỉnh mã để làm nổi bật số lượng giá trị khác nhau.

Đánh dấu lớn hơn giá trị

Khi bạn chạy mã này, một cửa sổ sẽ nhắc. Nó sẽ hỏi bạn giá trị bạn muốn so sánh các ô bạn đã chọn.

Sub HighlightGreaterThanValues () Dim i Như Integer i = InputBox ( "Nhập lớn hơn giá trị" , "Nhập giá trị gia tăng" ) Lựa chọn.FormatConditions.Delete 'Thay đổi Toán tử thành xlLower để tô sáng thấp hơn giá trị Lựa chọn.FormatConditions.Add Type: = xlCellValue, Toán tử : = xlG [, Formula1: = i Lựa chọn.FormatConditions (Lựa chọn.FormatConditions.Count). SetFirstP Warriority Với Lựa chọn.FormatConditions ( 1 ) .Cont.Color = RGB ( 0 , 0 , 0 ) .Interior.Color = RGB ( 31 , 218 , 154 ) End Với End Sub

Bạn cũng có thể điều chỉnh mã này để làm nổi bật các giá trị thấp hơn.

Đánh dấu các ô có ý kiến

Một macro đơn giản làm nổi bật tất cả các ô có chứa các nhận xét:

Sub HighlightVerCells () Lựa chọn. SpecialCells (xlCellTypeComments). Chọn Lựa chọn.Style = "Note" End Sub

Các ô nổi bật với các từ sai chính tả

Điều này cực kỳ hữu ích khi bạn làm việc với các hàm lấy chuỗi, tuy nhiên, ai đó đã nhập chuỗi bị lỗi và công thức của bạn không hoạt động. Đây là cách khắc phục vấn đề này:

Sub ColorMispellingCells () cho mỗi cl trong ActiveSheet.UsedRange If Not Application.CheckSpelling (Word: = cl. Text ) Sau đó _ cl.Interior.ColorIndex = 28 Tiếp theo cl End Sub

Tạo một bảng trụ

Dưới đây là cách tạo bảng xoay vòng từ MS Excel (phiên bản 2007). Đặc biệt hữu ích, khi bạn đang làm một báo cáo tùy chỉnh mỗi ngày. Bạn có thể tối ưu hóa việc tạo bảng trụ theo cách sau:

Sub PivotTableForExcel2007 () Dim SourceRange As Range Set SourceRange = Sheets ( "Sheet1" ) .Range ( "A3: N86" ) ActiveWorkbook.POLLCaches.Create (_ SourceType: = xlDatabase, _ SourceData: = SourceRange, _ Phiên bản: = xlP PivotTableVersion12) .CreateP PivotTable _ Bảng biểu: = "" , _ Tên bảng: = "" , _ Mặc địnhVersion: = xlP PivotTableVersion12 Kết thúc phụ

Đính kèm sổ làm việc đang hoạt động trong Email

Mã VBA yêu thích của tôi. Nó cho phép bạn đính kèm và gửi tệp bạn đang làm việc với một địa chỉ email, tiêu đề thư và nội dung thư được xác định trước! Trước tiên, bạn cần đặt tham chiếu cho Microsoft Outlook (trong trình chỉnh sửa VBA của bạn, nhấp vào công cụ => tài liệu tham khảo và chọn Microsoft Outlook).

Sub SendFIleAsAttachment () 'Khai báo các biến của bạn ' Đặt tham chiếu đến thư viện đối tượng Microsoft Outlook Dim OLApp As Outlook.Application Dim OLMail As Object 'Open Outlook bắt đầu một mục thư mới Đặt OLApp = New Outlook.Application Set OLMail = OLApp.CreateItem ( 0 ) OLApp.Session.Logon 'Xây dựng mục thư của bạn và gửi với OLMail . To = "admin@datapigtechnologists.com; mike@datapigtechnologists.com" .CC = "" .BCC = "" .Subject = "Đây là dòng Tiêu đề" .Body = "Xin chào" .Attachments.Add ActiveWorkbook.FullName .Display 'Thay đổi thành. Gửi để gửi mà không xem lại Kết thúc với ' Dọn dẹp bộ nhớ Đặt OLMail = Không có gì Đặt OLApp = Không có gì kết thúc phụ

Gửi tất cả các biểu đồ Excel đến bản trình bày PowerPoint

Một macro rất tiện dụng cho phép bạn thêm tất cả các biểu đồ Excel trong bản trình bày Powerpoint của bạn chỉ bằng một cú nhấp chuột:

Sub SendExcelFftimeToPowerPoint () 'Đặt tham chiếu đến Thư viện đối tượng Microsoft Powerpoint ' Khai báo các biến của bạn Dim PP dưới dạng PowerPoint. Ứng dụng Dim PPPres As PowerPoint.Pftimeation Dim PPSlide As PowerPoint.Slide Dim i As Integer 'Kiểm tra biểu đồ; thoát nếu không có biểu đồ nào tồn tại Sheets ( "Slide Data" ). Chọn If ActiveSheet.ChartObjects.Count < 1 Sau đó MsgBox "Không có biểu đồ nào tồn tại trang tính hoạt động" Thoát Kết thúc phụ Nếu 'Mở PowerPoint và tạo bản trình bày mới Đặt PP = PowerPoint mới. Ứng dụng Đặt PPPres = PP.Pftimeations.Add PP.Visible = True 'Bắt đầu vòng lặp dựa trên số biểu đồ For i = 1 To ActiveSheet.ChartObjects.Count ' Sao chép biểu đồ dưới dạng hình ảnh ActiveSheet.ChartObjects (i) .Chart.CopyPicture _ Kích thước: = xlScreen, Định dạng: = xlPicture Application.Wait (Now + TimeValue ( "0: 00: 1" )) 'Đếm các slide và thêm slide mới như số slide có sẵn tiếp theo ppSlideCount = PPPres.Slides.Count Đặt PPSlide = PPPres.Slides.Add (SlideCount + 1 , ppLayoutBlank) PPSlide. Chọn 'Dán hình ảnh và điều chỉnh vị trí của nó; Chuyển đến biểu đồ tiếp theo PPSlide.Shapes.Paste. Chọn PP.ActiveWindow.Selection.ShapeRange.Align msoAlignCenters, Đúng PP.ActiveWindow.Selection.ShapeRange.Align msoAlignMiddles, Đúng Tiếp i 'Memory Cleanup Set PPSlide = Không có gì Set PPPres = Không có gì Set PP = Không có gì End Sub

Gửi bảng Excel trong MS Word

Các bảng Excel thường được đặt bên trong các tài liệu văn bản. Đây là một cách tự động để xuất bảng Excel của bạn sang MS Word:

Sub ExcelTableInWord () 'Đặt tham chiếu đến thư viện Microsoft Word Object ' Khai báo các biến của bạn Dim MyRange As Excel.Range Dim wd As Word.Application Dim wdDoc As Word.Document Dim WdRange As Word.Range 'Sao chép phạm vi Bảng đã xác định ( "Bảng doanh thu " ) .Range ( "B4: F10" ) .Cop 'mở mục tiêu tài liệu Word Set WD = New Word.Application Set wdDoc = wd.Documents.Open _ (ThisWorkbook.Path & "\" & "PasteTable.docx" ) wd.Visible = True 'Đặt tiêu điểm vào dấu trang đích Đặt WdRange = wdDoc.Bookmark ( "DataTableHere" ) .Rangе ' Xóa bảng cũ và dán mới On Error Resume Next WdRange.Tables ( 1 ) .Delete WdRange.Paste 'dán vào bảng ' Điều chỉnh độ rộng cột WdRange.Tables ( 1 ) .Columns.SetWidth _ (MyRange.Width / MyRange.Columns.Count), wdAdjustSameWidth 'Đặt lại dấu trang wdDoc.Bookmark. Thêm "DataTableHere" , WdRange ' Bộ nhớ dọn dẹp Bộ wd = nothing Set wdDoc = nothing Set WdRange = nothing End Sub

Trích xuất một từ cụ thể từ một ô

Chúng ta có thể sử dụng các công thức nếu chúng ta muốn trích xuất một số ký hiệu nhất định. Nhưng điều gì sẽ xảy ra nếu chúng ta chỉ muốn trích xuất từ ​​thứ hai từ một câu hoặc một phạm vi từ trong một ô? Để làm điều này, chúng ta có thể tạo một hàm Excel tùy chỉnh với VBA. Đây là một trong những chức năng VBA quan trọng nhất, bởi vì nó cho phép bạn tạo các chức năng của riêng bạn không tồn tại trong MS Excel. Chúng ta hãy tiếp tục và tạo hai hàm: findword () và findwordrev (). Đây là mã vba cho việc này:

Chức năng FindWord (Nguồn Như Chuỗi , Chức Như Integer ) Như Chuỗi On Lỗi Resume Tiếp FindWord = Split (WorksheetFunction.Trim (Nguồn), "" ) (Chức vụ - 1 ) Mở Lỗi GoTo 0 End Function Chức năng FindWordRev (Nguồn Như Chuỗi , Chức Như Integer ) Như Chuỗi Dim Giờ đến () Như Chuỗi arr = VBA.Split (WorksheetFunction.Trim (Nguồn), "" ) Mở Lỗi Resume Tiếp FindWordRev = Giờ đến (UBound (arr) - Chức vụ + 1 ) Khi Lỗi GoTo 0 Kết thúc chức năng

Rất hay, chúng tôi đã tạo hai hàm cstom Excel. Bây giờ, hãy thử sử dụng chúng trong Excel. Hàm = FindWordRev (A1,1) lấy từ cuối cùng từ ô A1. Hàm = FindWord (A1,3) lấy từ thứ ba từ ô A1, v.v.

Bảo vệ sách bài tập của bạn

Đôi khi chúng tôi muốn bảo vệ dữ liệu trong tệp của mình để chỉ chúng tôi mới có thể thay đổi dữ liệu. Đây là cách để làm điều này với VBA:

Sub ProtectSheets () 'Khai báo các biến của bạn Dim ws Như Worksheet ' Bắt đầu vòng lặp qua tất cả các bảng tính Đối Mỗi ws Trong ActiveWorkbook.Worksheets loop Protect và' để cạnh bảng ws.Protect Password: = "1234" Tiếp WS End Sub

Chúc các bạn thành công! Tham khảo khóa học VBA Excel tại NIIT-ICT Hà Nội

Xem thêm: 5 cách sử dụng cho Macro VBA trong Excel với công việc của bạn

Từ khóa » Thư Viện Vba Excel