Étiquette : create

  • Develop Customized Data Security Protocols with Excel VBA

    Step 1: Enable Macro Security

    Before creating custom security protocols in Excel, you must first enable macro security settings to protect your workbooks from potentially harmful code. Excel provides several macro security levels that can be customized:

    • Disable all macros without notification: Macros are completely disabled.
    • Disable all macros with notification: Macros are disabled, but you will be notified when macros are present.
    • Disable all macros except digitally signed macros: Only macros signed by a trusted certificate will run.
    • Enable all macros: All macros will run, which is not recommended due to security risks.

    To enable macro security:

    1. Open Excel.
    2. Go to File > Options.
    3. Select the Trust Center.
    4. Click on Trust Center Settings.
    5. Under Macro Settings, choose the desired security level.

    This step ensures that your macros run with the appropriate level of security enabled.

    Step 2: Create a Secure Workbook

    In Excel, creating a secure workbook can be done by adding a password to the workbook itself. This will prevent unauthorized access to the workbook and its contents.

    Sub CreateSecureWorkbook()
        Dim wb As Workbook
        Set wb = Workbooks.Add   
        ' Add a password to the workbook
        wb.Password = "SecurePassword"  ' Replace with your password   
        ' Save the workbook with the password protection
        wb.SaveAs "C:\path\to\your\workbook.xlsx", Password:="SecurePassword"   
        ' Close the workbook
        wb.Close
    End Sub

    Explanation: This code creates a new workbook and adds a password to protect the workbook from unauthorized access. The workbook is then saved with the password protection enabled.

    Step 3: Implement Password Protection

    In addition to protecting the workbook, you can protect individual sheets and ranges within the workbook. This will prevent unauthorized users from modifying or viewing certain data.

    Sub ProtectSheetWithPassword()
        Dim ws As Worksheet
        Set ws = ThisWorkbook.Sheets("Sheet1")  ' Specify the sheet to protect   
        ' Protect the sheet with a password
        ws.Protect Password:="SheetPassword"  ' Replace with your desired password   
        ' Optional: Lock specific ranges while keeping others editable
        ws.Range("A1:B10").Locked = False
        ws.Protect Password:="SheetPassword", AllowFormattingColumns:=True
    End Sub

    Explanation: This code protects a specific worksheet with a password. It also demonstrates how to unlock specific ranges (e.g., A1:B10) while keeping the rest of the sheet locked. This can be helpful when you want users to be able to input data in certain cells but not modify others.

    Step 4: Encrypt Sensitive Data

    To secure sensitive data, you can encrypt the data stored in Excel. One way to achieve this is by using VBA to encrypt cell data before saving it and decrypting it when needed.

    Here’s an example of using a simple encryption technique (Caesar Cipher) to encrypt and decrypt data. Please note that this is a basic encryption technique and should be replaced with more robust methods for serious applications.

    ' Encryption Function (Caesar Cipher)
    Function EncryptData(ByVal text As String, ByVal shift As Integer) As String
        Dim i As Integer
        Dim encryptedText As String
        Dim char As String
        encryptedText = ""   
        For i = 1 To Len(text)
            char = Mid(text, i, 1)
            If Asc(char) >= 65 And Asc(char) <= 90 Then
                ' Encrypt uppercase letters
                encryptedText = encryptedText & Chr(((Asc(char) - 65 + shift) Mod 26) + 65)
            ElseIf Asc(char) >= 97 And Asc(char) <= 122 Then
                ' Encrypt lowercase letters
                encryptedText = encryptedText & Chr(((Asc(char) - 97 + shift) Mod 26) + 97)
            Else
                encryptedText = encryptedText & char
            End If
        Next i  
        EncryptData = encryptedText
    End Function
    
    ' Decryption Function
    Function DecryptData(ByVal text As String, ByVal shift As Integer) As String
        ' Reverse the encryption by applying the inverse shift
        DecryptData = EncryptData(text, 26 - shift)
    End Function
    
    ' Example Usage
    Sub EncryptAndSaveData()
        Dim originalText As String
        Dim encryptedText As String
        originalText = "SensitiveData"   
        ' Encrypt the data
        encryptedText = EncryptData(originalText, 3)  ' Shift of 3
        Debug.Print "Encrypted: " & encryptedText   
        ' Save encrypted data to a cell
        ThisWorkbook.Sheets("Sheet1").Range("A1").Value = encryptedText   
        ' Decrypt the data
        Dim decryptedText As String
        decryptedText = DecryptData(encryptedText, 3)
        Debug.Print "Decrypted: " & decryptedText
    End Sub

    Explanation: The EncryptData function applies a simple Caesar Cipher to shift letters in the alphabet, and the DecryptData function reverses this process. In this example, the data is encrypted with a shift of 3 and saved into a cell. It can later be decrypted when needed.

    Step 5: Decrypt Data

    As shown in the previous code, decryption is simply reversing the encryption process. This can be done by applying the inverse shift to the encrypted data.

    Sub DecryptStoredData()
        Dim encryptedText As String
        encryptedText = ThisWorkbook.Sheets("Sheet1").Range("A1").Value   
        ' Decrypt the encrypted text
        Dim decryptedText As String
        decryptedText = DecryptData(encryptedText, 3)   
        Debug.Print "Decrypted: " & decryptedText
    End Sub

    Explanation: This code retrieves encrypted data from a cell, decrypts it using the decryption function, and prints the decrypted data.

    Step 6: Access Control

    Access control ensures that only authorized users can interact with specific parts of the workbook. You can implement this by checking for user credentials before granting access to certain actions or data.

    Sub UserAuthentication()
        Dim userInput As String
        Dim correctPassword As String
        correctPassword = "UserPassword"  ' The correct password   
        userInput = InputBox("Enter your password:")   
        If userInput = correctPassword Then
            MsgBox "Access Granted"
            ' Proceed with secure actions
        Else
            MsgBox "Access Denied"
        End If
    End Sub

    Explanation: This code prompts the user to enter a password via an InputBox. If the entered password matches the correct one, access is granted, and secure actions can proceed. Otherwise, the user is denied access.

    Final Notes

    1. Security Limitations: Excel’s native VBA capabilities do not provide robust cryptographic functions (like AES encryption). For higher security, consider integrating Excel with external tools or libraries that offer more advanced encryption methods.
    2. User Experience: Make sure to inform users about password policies and security protocols to prevent frustration or unauthorized access attempts.
    3. Data Integrity: Always make backups of important workbooks and implement version control where applicable.

    This approach allows you to create a multi-layered security protocol to protect sensitive data within your Excel workbooks using VBA.

  • Create Sudoku Solver with Excel VBA

    Creating a Sudoku Solver in Excel using VBA is a great way to practice algorithm design and automation. Here’s a detailed breakdown of how to build the solver in Excel VBA:

    Overview:

    The Sudoku puzzle consists of a 9×9 grid, where some cells are pre-filled with numbers, and others are empty (represented by zeroes or blanks). The solver will try to fill the empty cells by following these rules:

    1. Each row must contain the numbers 1 to 9 without repetition.
    2. Each column must contain the numbers 1 to 9 without repetition.
    3. Each of the nine 3×3 sub-grids must contain the numbers 1 to 9 without repetition.

    The VBA code will employ a backtracking algorithm to solve the puzzle, trying different numbers for empty cells and backtracking if it reaches an invalid state.

    Steps to Implement the Solver in VBA:

    1. Prepare the Worksheet

    In your Excel worksheet, set up a 9×9 grid where the Sudoku puzzle will be displayed. You can represent the puzzle using a simple range like A1:I9, where each cell corresponds to a number in the puzzle.

    1. Open the VBA Editor

    Press Alt + F11 to open the Visual Basic for Applications (VBA) editor. In the editor, go to Insert → Module to create a new module where you will paste the VBA code.

    1. Write the Sudoku Solver Code

    Here’s the detailed VBA code for the Sudoku Solver using a backtracking algorithm:

    Sub SolveSudoku()
        ' Define variables
        Dim sudoku(1 To 9, 1 To 9) As Integer
        Dim row As Integer, col As Integer
        Dim i As Integer, j As Integer   
        ' Read the Sudoku puzzle from the worksheet into the sudoku array
        For row = 1 To 9
            For col = 1 To 9
                sudoku(row, col) = Cells(row, col).Value
            Next col
        Next row   
        ' Call the recursive solver function
        If Solve(sudoku) Then
            ' Write the solved Sudoku puzzle back to the worksheet
            For row = 1 To 9
                For col = 1 To 9
                    Cells(row, col).Value = sudoku(row, col)
                Next col
            Next row
            MsgBox "Sudoku Solved!"
        Else
            MsgBox "No solution exists."
        End If
    End Sub
    
    Function Solve(ByRef sudoku() As Integer) As Boolean
        ' This function attempts to solve the Sudoku using a backtracking algorithm
        Dim row As Integer, col As Integer
        Dim num As Integer   
        ' Find the next empty cell (0 represents an empty cell)
        If Not FindEmptyCell(sudoku, row, col) Then
            ' No empty cell found, puzzle is solved
            Solve = True
            Exit Function
        End If   
        ' Try all numbers from 1 to 9
        For num = 1 To 9
            ' Check if the number is valid for this cell
            If IsValid(sudoku, row, col, num) Then
                ' Assign the number to the cell
                sudoku(row, col) = num           
                ' Recursively attempt to solve the rest of the puzzle
                If Solve(sudoku) Then
                    Solve = True
                    Exit Function
                End If
                ' Backtrack if no solution was found
                sudoku(row, col) = 0
            End If
        Next num   
        ' No valid number was found, backtrack
        Solve = False
    End Function
    
    Function FindEmptyCell(ByRef sudoku() As Integer, ByRef row As Integer, ByRef col As Integer) As Boolean
        ' This function finds the next empty cell in the Sudoku puzzle (represented by 0)
        For row = 1 To 9
            For col = 1 To 9
                If sudoku(row, col) = 0 Then
                    FindEmptyCell = True
                    Exit Function
                End If
            Next col
        Next row
        FindEmptyCell = False
    End Function
    
    Function IsValid(ByRef sudoku() As Integer, row As Integer, col As Integer, num As Integer) As Boolean
        ' This function checks if a number is valid for a given cell (row, col) in the Sudoku puzzle   
        ' Check if the number already exists in the row
        Dim i As Integer
        For i = 1 To 9
            If sudoku(row, i) = num Then
                IsValid = False
                Exit Function
            End If
        Next i   
        ' Check if the number already exists in the column
        For i = 1 To 9
            If sudoku(i, col) = num Then
                IsValid = False
                Exit Function
            End If
        Next i   
        ' Check if the number already exists in the 3x3 subgrid
        Dim startRow As Integer, startCol As Integer
        startRow = Int((row - 1) / 3) * 3 + 1
        startCol = Int((col - 1) / 3) * 3 + 1
        For i = startRow To startRow + 2
            For j = startCol To startCol + 2
                If sudoku(i, j) = num Then
                    IsValid = False
                    Exit Function
                End If
            Next j
        Next i  
        ' The number is valid if it isn't in the row, column, or subgrid
        IsValid = True
    End Function

    Explanation of the Code:

    1. Sub SolveSudoku: This is the main subroutine that reads the Sudoku puzzle from the Excel worksheet, calls the recursive Solve function, and then writes the solved puzzle back to the worksheet.
    2. Function Solve: This is the recursive backtracking function that solves the Sudoku puzzle. It tries to fill the empty cells one by one by placing numbers 1-9 and checking if they are valid. If a number leads to an invalid state, it backtracks (removes the number and tries the next one).
    3. Function FindEmptyCell: This function searches for the next empty cell (0) in the puzzle. It returns True if an empty cell is found, and False if the puzzle is completely filled.
    4. Function IsValid: This function checks if placing a given number in a specific cell is valid. It checks the row, column, and 3×3 subgrid to ensure no duplicates.
    1. Using the Solver:
    • Enter your Sudoku puzzle in the range A1:I9 (9×9 grid). Use 0 or leave the cells empty for the puzzle’s blanks.
    • Run the macro by pressing Alt + F8, selecting SolveSudoku, and clicking Run.
    • The solver will fill in the grid and display a message box when the puzzle is solved or if no solution exists.
    1. Handling Edge Cases:
    • If the puzzle has no solution (e.g., due to an invalid initial configuration), the solver will display a message saying « No solution exists. »
    • Ensure that the input puzzle follows the basic rules of Sudoku to avoid inconsistencies or invalid states.

    Conclusion:

    This code utilizes the backtracking algorithm, a common approach to solving constraint satisfaction problems like Sudoku. It systematically tries potential solutions, backtracking when it encounters an invalid state, until it finds a valid solution or concludes that no solution exists.

  • Create Sudoku Puzzle with Excel VBA

    1. Set Up the Excel Sheet:

    Before you start the VBA code, you should create a grid in Excel that represents the Sudoku board. You can do this by selecting a 9×9 range of cells (for example, A1:I9).

    1. VBA Code to Generate a Sudoku Puzzle:
    Option Explicit
    Dim SudokuGrid(1 To 9, 1 To 9) As Integer
    Dim SolvedGrid(1 To 9, 1 To 9) As Integer
    Sub GenerateSudokuPuzzle()
        Dim i As Integer, j As Integer
        ' Initialize the Sudoku grid
        Call GenerateSolution
        ' Remove some numbers to create the puzzle
        Call RemoveNumbers
        ' Display the puzzle in the Excel grid
        Call DisplayPuzzle
    End Sub
    
    Sub GenerateSolution()
        ' Fill the grid with a valid Sudoku solution
        Call FillGrid(1, 1)
    End Sub
    
    Function FillGrid(Row As Integer, Col As Integer) As Boolean
        Dim num As Integer
        If Row > 9 Then
            FillGrid = True
            Exit Function
        End If
        If Col > 9 Then
            FillGrid = FillGrid(Row + 1, 1)
            Exit Function
        End If
        If SudokuGrid(Row, Col) > 0 Then
            FillGrid = FillGrid(Row, Col + 1)
            Exit Function
        End If
        For num = 1 To 9
            If IsSafeToPlace(Row, Col, num) Then
                SudokuGrid(Row, Col) = num
                If FillGrid(Row, Col + 1) Then
                    FillGrid = True
                    Exit Function
                End If
                SudokuGrid(Row, Col) = 0
            End If
        Next num
        FillGrid = False
    End Function
    
    Function IsSafeToPlace(Row As Integer, Col As Integer, num As Integer) As Boolean
        ' Check if the number can be placed in the specified position
        Dim i As Integer, j As Integer
        ' Check the row
        For i = 1 To 9
            If SudokuGrid(Row, i) = num Then
                IsSafeToPlace = False
                Exit Function
            End If
        Next i
        ' Check the column
        For i = 1 To 9
            If SudokuGrid(i, Col) = num Then
                IsSafeToPlace = False
                Exit Function
            End If
        Next i
        ' Check the 3x3 box
        Dim startRow As Integer, startCol As Integer
        startRow = (Row - 1) \ 3 * 3 + 1
        startCol = (Col - 1) \ 3 * 3 + 1
        For i = startRow To startRow + 2
            For j = startCol To startCol + 2
                If SudokuGrid(i, j) = num Then
                    IsSafeToPlace = False
                    Exit Function
                End If
            Next j
        Next i
        IsSafeToPlace = True
    End Function
    
    Sub RemoveNumbers()
        Dim removed As Integer
        removed = 0
        Dim i As Integer, j As Integer
        Dim index As Integer
        Dim numbers(81) As Integer
        For i = 1 To 81
            numbers(i) = i
        Next i
        ' Shuffle numbers array
        For i = 1 To 81
            index = Int((81 - 1 + 1) * Rnd + 1)
            Dim temp As Integer
            temp = numbers(i)
            numbers(i) = numbers(index)
            numbers(index) = temp
        Next i
        ' Remove numbers to create the puzzle
        For i = 1 To 81
            Dim row As Integer, col As Integer
            row = (numbers(i) - 1) \ 9 + 1
            col = (numbers(i) - 1) Mod 9 + 1
            If SudokuGrid(row, col) <> 0 Then
                SudokuGrid(row, col) = 0
                removed = removed + 1
            End If
            If removed >= 40 Then Exit For
        Next i
    End Sub
    
    Sub DisplayPuzzle()
        Dim row As Integer, col As Integer
        For row = 1 To 9
            For col = 1 To 9
                If SudokuGrid(row, col) > 0 Then
                    Cells(row, col).Value = SudokuGrid(row, col)
                Else
                    Cells(row, col).Value = ""
                End If
            Next col
        Next row
    End Sub

    Explanation of the Code:

    1. Global Arrays (SudokuGrid, SolvedGrid):
      • SudokuGrid: This is the array that holds the current state of the puzzle. It will be filled with numbers from 1 to 9 for the solution, and some numbers will be removed to create the puzzle.
      • SolvedGrid: This array holds the full, completed Sudoku solution.
    2. Main Subroutine (GenerateSudokuPuzzle):
      • This is the main subroutine that drives the generation of the Sudoku puzzle. It first calls GenerateSolution to create a valid solution, then it calls RemoveNumbers to remove some numbers from the grid to make it a puzzle, and finally, it displays the puzzle in the Excel worksheet using DisplayPuzzle.
    3. Generating the Solution (GenerateSolution):
      • The GenerateSolution subroutine calls the FillGrid function, which is a recursive function that attempts to fill the grid with a valid solution.
    4. Filling the Grid (FillGrid):
      • This function tries to fill the Sudoku grid row by row, column by column, and uses backtracking to find a valid configuration. If it encounters a situation where a number cannot be placed, it backtracks and tries another number.
    5. Safety Check (IsSafeToPlace):
      • This function checks if placing a specific number in a given cell violates the Sudoku rules. It checks the current row, column, and the 3×3 subgrid to ensure the number doesn’t appear elsewhere.
    6. Removing Numbers (RemoveNumbers):
      • After the grid has been filled with a valid solution, the RemoveNumbers subroutine randomly removes numbers from the grid to create the puzzle. It ensures that there are enough numbers removed (about 40 cells) to create a solvable puzzle.
    7. Displaying the Puzzle (DisplayPuzzle):
      • This subroutine loops through the SudokuGrid and displays the numbers in the corresponding cells of the Excel sheet. If a cell contains a zero, it will display nothing.

    How to Use the Code:

    1. Open your Excel workbook and press ALT + F11 to open the VBA editor.
    2. Insert a new module by clicking Insert > Module.
    3. Paste the entire code into the module.
    4. Close the VBA editor and return to your Excel workbook.
    5. Run the GenerateSudokuPuzzle macro by pressing ALT + F8, selecting GenerateSudokuPuzzle, and clicking « Run ».

    This code will generate a random Sudoku puzzle every time it’s run, with some cells filled and others left empty. You can adjust the number of cells to remove by changing the condition in RemoveNumbers (currently set to remove 40 cells).

  • Create Stopwatch with Excel VBA

    Step 1: Understanding the Requirements

    A stopwatch in Excel should:

    • Start counting time when triggered.
    • Pause and resume when needed.
    • Reset to zero.
    • Display the elapsed time dynamically.
    • Work without freezing Excel (using Application.OnTime instead of DoEvents).

    Step 2: Creating the User Interface (UI)

    Before writing the VBA code, let’s create a simple UI in an Excel worksheet:

    1. Insert Buttons (using Form Controls) and link them to the macro:
      • Start Button (e.g., named « btnStart »)
      • Pause Button (e.g., named « btnPause »)
      • Reset Button (e.g., named « btnReset »)
    2. Designate a Cell for Display:
      • Select a cell (e.g., B2) to display the elapsed time.

    Step 3: Writing the VBA Code

    Now, let’s write the VBA code for the stopwatch.

    1. Declare Variables

    We need to track:

    • The start time
    • The elapsed time before pausing
    • Whether the stopwatch is running
    Option Explicit
    Dim startTime As Double
    Dim elapsedTime As Double
    Dim isRunning As Boolean
    Dim nextTick As Date
    1. Start Stopwatch

    This macro initializes the stopwatch and begins updating the display every second.

    Sub StartStopwatch()
        If Not isRunning Then
            ' Capture the start time if not already running
            startTime = Timer - elapsedTime
            isRunning = True
            UpdateTime
        End If
    End Sub

    Explanation:

    • If the stopwatch isn’t running, we capture the start time (Timer is the number of seconds since midnight).
    • We subtract the previously recorded elapsedTime (to allow resuming).
    • isRunning is set to True and we start updating the time.
    1. Update Displayed Time

    This subroutine keeps updating the elapsed time.

    Sub UpdateTime()
        If isRunning Then
            elapsedTime = Timer - startTime
            Sheet1.Range("B2").Value = Format(elapsedTime, "0.00") & " sec"
            ' Schedule the next update
            nextTick = Now + TimeValue("00:00:01")
            Application.OnTime nextTick, "UpdateTime"
        End If
    End Sub

    Explanation:

    • Calculates elapsed time dynamically.
    • Updates the assigned cell (B2).
    • Schedules itself to run again in 1 second using Application.OnTime.
    1. Pause Stopwatch

    This macro stops the timer temporarily.

    Sub PauseStopwatch()
        If isRunning Then
            isRunning = False
            Application.OnTime nextTick, "UpdateTime", , False
        End If
    End Sub

    Explanation:

    • Stops Application.OnTime, preventing further updates.
    • Stores the elapsedTime so it can resume later.
    1. Reset Stopwatch

    This resets everything to zero.

    Sub ResetStopwatch()
        isRunning = False
        elapsedTime = 0     Sheet1.Range("B2").Value = "0.00 sec"
        Application.OnTime nextTick, "UpdateTime", , False
    End Sub

    Explanation:

    • Stops the stopwatch.
    • Resets elapsedTime to zero.
    • Clears the scheduled Application.OnTime events.

    Step 4: Assign Macros to Buttons

    1. Right-click each button.
    2. Select « Assign Macro ».
    3. Link them as follows:
      • « StartStopwatch » → Start Button
      • « PauseStopwatch » → Pause Button
      • « ResetStopwatch » → Reset Button

    Step 5: Testing the Stopwatch

    1. Click Start → The time should begin updating.
    2. Click Pause → The time should stop but remain visible.
    3. Click Start again → The stopwatch should resume from where it stopped.
    4. Click Reset → The timer should reset to 0.

    Final Notes

    • Application.OnTime ensures Excel remains responsive.
    • The format « 0.00 sec » makes the output readable.
    • The logic supports pausing and resuming, unlike traditional DoEvents-based loops.
  • Create Waterfall Chart in Excel With VBA

    A Waterfall Chart is used to visually illustrate cumulative effects of sequential positive and negative values, often for financial data like revenue, expenses, and net profit. Since Excel 2016 introduced a built-in Waterfall Chart, we will use VBA to create a Waterfall Chart dynamically for earlier Excel versions as well.

    1. Understanding the Waterfall Chart

    A Waterfall Chart consists of:

    • Starting Value: The first column (e.g., « Opening Balance »).
    • Positive and Negative Changes: Columns representing increases (green) and decreases (red).
    • Ending Value: The last column (e.g., « Closing Balance »).
    • Bridges: The cumulative flow of values.

    Since Excel does not provide built-in Waterfall Charts before Excel 2016, we will use Stacked Column Charts and format them manually.

    1. Data Structure for the Waterfall Chart

    We need a structured dataset:

    Category Value Base Increase Decrease
    Opening 5000 0 5000 0
    Revenue 3000 5000 3000 0
    Expenses -2000 8000 0 2000
    Profit 4000 6000 4000 0
    • Base Column: Helps position floating bars.
    • Increase Column: Positive values.
    • Decrease Column: Negative values converted to positive.
    1. VBA Code to Create the Waterfall Chart

    This VBA macro:

    • Reads data from an active worksheet.
    • Processes data into the required format.
    • Creates a stacked column chart.
    • Applies colors for increases (green) and decreases (red).
    • Removes the base series from visibility.

    VBA Code

    Sub CreateWaterfallChart()
        Dim ws As Worksheet
        Dim chartObj As ChartObject
        Dim chartWaterfall As Chart
        Dim lastRow As Long
        Dim rngCategory As Range, rngBase As Range, rngIncrease As Range, rngDecrease As Range
        ' Set the worksheet
        Set ws = ActiveSheet
        ' Find the last row of data
        lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row
        ' Define data ranges
        Set rngCategory = ws.Range("A2:A" & lastRow) ' Categories
        Set rngBase = ws.Range("C2:C" & lastRow) ' Base values
        Set rngIncrease = ws.Range("D2:D" & lastRow) ' Increase
        Set rngDecrease = ws.Range("E2:E" & lastRow) ' Decrease
        ' Add a new chart
        Set chartObj = ws.ChartObjects.Add(Left:=300, Width:=500, Top:=50, Height:=350)
        Set chartWaterfall = chartObj.Chart
        ' Set chart type
        chartWaterfall.ChartType = xlColumnStacked
        ' Add series
        With chartWaterfall
            .SetSourceData Source:=Union(rngBase, rngIncrease, rngDecrease)
            ' Format Base Series (Make it invisible)
            With .SeriesCollection(1)
                .Format.Fill.Visible = msoFalse
                .Border.LineStyle = xlNone
            End With
             ' Format Increase Series (Green)
            With .SeriesCollection(2)
                .Format.Fill.ForeColor.RGB = RGB(0, 176, 80) ' Green
            End With
            ' Format Decrease Series (Red)
            With .SeriesCollection(3)
                .Format.Fill.ForeColor.RGB = RGB(192, 0, 0) ' Red
            End With     
            ' Set Axis Titles
            .Axes(xlCategory).HasTitle = True
            .Axes(xlCategory).AxisTitle.Text = "Categories"
            .Axes(xlValue).HasTitle = True
            .Axes(xlValue).AxisTitle.Text = "Values"     
            ' Chart title
            .HasTitle = True
            .ChartTitle.Text = "Waterfall Chart"
        End With
        ' Cleanup
        Set ws = Nothing
        Set chartObj = Nothing
        Set chartWaterfall = Nothing
        Set rngCategory = Nothing
        Set rngBase = Nothing
        Set rngIncrease = Nothing
        Set rngDecrease = Nothing
        MsgBox "Waterfall Chart Created Successfully!", vbInformation, "Success"
    End Sub
    1. Explanation of the VBA Code
    • Data Selection:
      • The macro identifies the last row (lastRow) for dynamic range selection.
      • It assigns each column (Categories, Base, Increase, Decrease) to a VBA Range variable.
    • Chart Creation:
      • Adds a new ChartObject to the active worksheet.
      • Defines it as a Stacked Column Chart (xlColumnStacked).
    • Series Formatting:
      • Base Series (Series 1) is hidden to create the floating effect.
      • Increase Series (Series 2) is set to Green (RGB(0, 176, 80)).
      • Decrease Series (Series 3) is set to Red (RGB(192, 0, 0)).
    • Axis and Titles:
      • Labels the X-axis as « Categories » and the Y-axis as « Values ».
      • Assigns the title « Waterfall Chart ».
    • User Notification:
      • Displays a message box confirming chart creation.
    1. How to Use the VBA Macro
    • Open an Excel workbook and enter the data structure mentioned earlier.
    • Press ALT + F11 to open the VBA Editor.
    • Click Insert > Module and paste the VBA code.
    • Run the macro by pressing F5 or from Developer > Macros > Run.
    1. Conclusion

    This VBA macro dynamically creates a Waterfall Chart in Excel, making it useful for users who don’t have Excel 2016 or later. It ensures:

    • Automatic formatting with green/red color-coding.
    • Dynamic data handling.
    • User-friendly execution via a macro.
  • Create UserForm in Excel VBA

    1. What is a UserForm?

    A UserForm is a custom dialog box that allows users to interact with VBA applications in Excel. It provides a graphical interface to input and display data using controls like text boxes, labels, buttons, combo boxes, and list boxes.

    1. Steps to Create a UserForm in Excel VBA

    Step 1: Open the VBA Editor

    1. Open Excel.
    2. Press ALT + F11 to open the VBA Editor.
    3. In the VBA Editor, go to Insert → UserForm.

    A blank UserForm will appear along with the Toolbox, where you can add controls like text boxes, labels, buttons, etc.

    Step 2: Add Controls to the UserForm

    1. Drag and drop the following controls onto the UserForm:
      • Labels (for field names)
      • TextBoxes (for user input)
      • CommandButtons (for actions like Submit and Cancel)
      • ComboBox (for selection options)
      • ListBox (for multiple choices)
    2. Rename each control appropriately using the Properties Window.

    Step 3: VBA Code to Handle UserForm Events

    Below is the complete VBA code for a UserForm that collects user details (Name, Age, and Gender) and stores them in an Excel sheet.

    Code: UserForm with Data Entry Functionality

    ' Define the UserForm and its components
    Option Explicit
    Private Sub UserForm_Initialize()
        ' Initialize the ComboBox with gender options
        Me.cboGender.AddItem "Male"
        Me.cboGender.AddItem "Female"
        Me.cboGender.AddItem "Other"
    End Sub
    Private Sub cmdSubmit_Click()
        Dim ws As Worksheet
        Dim lastRow As Long
        ' Set the worksheet
        Set ws = ThisWorkbook.Sheets("UserData")
        ' Find the last empty row
        lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row + 1
        ' Transfer data from the UserForm to the worksheet
        ws.Cells(lastRow, 1).Value = Me.txtName.Value
        ws.Cells(lastRow, 2).Value = Me.txtAge.Value
        ws.Cells(lastRow, 3).Value = Me.cboGender.Value
        ' Clear fields for new entry
        Me.txtName.Value = ""
        Me.txtAge.Value = ""
        Me.cboGender.Value = ""
        ' Inform user
        MsgBox "Data Submitted Successfully!", vbInformation, "Success"
    End Sub
    Private Sub cmdCancel_Click()
        ' Close the UserForm
        Unload Me
    End Sub
    1. Explanation of the Code
    • UserForm_Initialize()
    • This event is triggered when the form loads.
    • It populates the ComboBox (cboGender) with gender options.
    • cmdSubmit_Click()
    • Retrieves values from TextBoxes and ComboBox.
    • Finds the next available row in the worksheet.
    • Saves the user’s input in the UserData worksheet.
    • Clears the input fields for new entries.
    • Displays a confirmation message.
    • cmdCancel_Click()

    Run ShowUserForm from the Macro window (ALT + F8) or assign it to a button.Closes the UserForm when the Cancel button is clicked.

    1. How to Run the UserForm
    • Ensure your Excel sheet has a worksheet named « UserData » with headers (Name, Age, Gender).
    • Open the VBA Editor, go to Insert → Module, and add this macro:
        • Sub ShowUserForm()
        • Show
        • End Sub
    1. Enhancements & Best Practices
    • Input Validation: Add error handling to prevent empty fields.
    • Database Storage: Store data in an external database (e.g., Access).
    • UI Improvements: Use frames, colors, and formatting for better aesthetics.
  • Creating a Thermometer Chart in Excel Using VBA

    A Thermometer Chart is a great way to visually represent progress towards a goal, such as tracking sales performance, project completion, or any percentage-based metric.

    1. Understanding the Thermometer Chart Structure

    A Thermometer Chart consists of:

    • A background column representing 100% of the target.
    • A filled column representing the actual progress.
    • A properly formatted chart to resemble a thermometer.

    The core concept behind this chart is using a Stacked Column Chart where:

    • One data series represents the actual value.
    • Another series represents the maximum possible value.
    1. Preparing the Data for the Chart

    We need a simple table with:

    • Current Value (e.g., actual progress towards the goal).
    • Target Value (e.g., 100%).
    Metric Value
    Current Value 75
    Target Value 100
    1. VBA Code to Create a Dynamic Thermometer Chart

    The following VBA macro automates the process of creating and formatting the Thermometer Chart:

    Sub CreateThermometerChart()
         Dim ws As Worksheet
         Dim chartObj As ChartObject
         Dim chart As Chart
         Dim rng As Range
         ' Set the worksheet where the data is stored
         Set ws = ActiveSheet
         ' Define the data range for the chart
         Set rng = ws.Range("A1:B3")
     ' Assumes data starts at A1 with headers
         ' Delete any existing chart in the worksheet
         For Each chartObj In ws.ChartObjects
             chartObj.Delete
         Next chartObj
         ' Add a new chart
         Set chartObj = ws.ChartObjects.Add(Left:=100, Top:=50, Width:=300, Height:=400)
         Set chart = chartObj.Chart
         ' Set chart source data 
        chart.SetSourceData Source:=rng
         ' Change chart type to a Stacked Column Chart
         chart.ChartType = xlColumnStacke
         ' Format the chart to look like a thermometer
         With chart
             .HasTitle = True
             .ChartTitle.Text = "Thermometer Chart"
             .Legend.Delete ' Remove legend
             .Axes(xlCategory).Delete
     ' Remove horizontal axis 
      End With
    ' Format the data series
    With chart.SeriesCollection(1)
    .IsFiltered = False
    .Format.Fill.ForeColor.RGB = RGB(255, 0, 0) ' Red color for the progress
    .Format.Fill.Transparency = 0
    End With
    ' Format the second series (background)
    With chart.SeriesCollection(2)
    .Format.Fill.ForeColor.RGB = RGB(200, 200, 200) ' Gray background
    .Format.Fill.Transparency = 0.5 ' Slight transparency
    End With
    ' Adjust the Y-Axis
    With chart.Axes(xlValue)
    .MaximumScale = ws.Range("B3").Value ' Set max scale to the target value
    .MinimumScale = 0 ' Ensure the scale starts at zero
    .TickLabels.NumberFormat = "0%"
    End With
    ' Align the chart properly
    chartObj.Left = ws.Range("D1").Left
    chartObj.Top = ws.Range("D1").Top
    End Sub
    
    ' Format the data series
    With chart.SeriesCollection(1)
    .IsFiltered = False
    .Format.Fill.ForeColor.RGB = RGB(255, 0, 0) ' Red color for the progress
    .Format.Fill.Transparency = 0
    End With
    ' Format the second series (background)
    With chart.SeriesCollection(2)
    .Format.Fill.ForeColor.RGB = RGB(200, 200, 200) ' Gray background
    .Format.Fill.Transparency = 0.5 ' Slight transparency
    End With
    ' Adjust the Y-Axis
    With chart.Axes(xlValue)
    .MaximumScale = ws.Range("B3").Value ' Set max scale to the target value
    .MinimumScale = 0 ' Ensure the scale starts at zero
    .TickLabels.NumberFormat = "0%"
    End With
    ' Align the chart properly
    chartObj.Left = ws.Range("D1").Left
    chartObj.Top = ws.Range("D1").Top
    End Sub
    1. Explanation of the Code

    Step 1: Setting Up the Worksheet and Data

    • The macro works on the active sheet.
    • It assumes that column A contains labels and column B contains numerical values (Current & Target).

    Step 2: Deleting Existing Charts

    • Before adding a new chart, any existing charts in the sheet are deleted to prevent duplication.

    Step 3: Creating a New Chart

    • A ChartObject is inserted into the worksheet at a specified location.
    • The source data for the chart is set using chart.SetSourceData.

    Step 4: Changing Chart Type

    • The macro sets the chart type to Stacked Column Chart (xlColumnStacked).

    Step 5: Formatting the Thermometer Effect

    • The first data series (Actual Value) is colored red to represent the progress.
    • The second data series (Target Value) is colored gray to represent the full scale.
    • The legend is removed for a cleaner look.
    • The horizontal axis is deleted to give a thermometer appearance.

    Step 6: Adjusting the Y-Axis

    • The maximum scale is set dynamically to the Target Value.
    • The axis labels are formatted as percentages.
    1. Running the VBA Code

    To run the macro:

    • Open Excel and press ALT + F11 to open the VBA Editor.
    • Insert a new Module (Insert → Module).
    • Copy and paste the VBA code into the module.
    • Run the macro by pressing F5.
    1. Enhancements and Customizations
    2. Make the Chart Update Automatically
    • Instead of recreating the chart every time, modify the macro to update an existing chart when values change.

    8. Add a UserForm for Input

    • Allow users to enter values in a UserForm and dynamically update the chart.

    9. Improve Aesthetics

    • Add rounded edges and a glossy effect to the thermometer.
    • Use gradient fills to enhance the visualization.

    10. Conclusion

    This VBA macro provides a structured way to create a dynamic Thermometer Chart in Excel. By following this guide, you can automate the visualization of progress tracking, making reports more interactive and insightful.

  • Creating Treemap Chart in Excel with VBA

    A Treemap Chart is a data visualization tool that represents hierarchical data as nested rectangles. Each category is assigned a rectangle whose size is proportional to the corresponding value.

    1. Understanding Treemap Charts
    • Treemaps are useful for displaying proportions within a hierarchy.
    • They work well with structured data such as product sales by category and sub-category.
    1. Setting Up the Data

    To create a Treemap Chart using VBA, your data should be structured hierarchically, like this:

    Category Sub-Category Value
    Fruits Apples 100
    Fruits Bananas 150
    Fruits Oranges 120
    Vegetables Carrots 80
    Vegetables Broccoli 90
    Dairy Milk 200
    Dairy Cheese 160
    1. VBA Code to Create Treemap Chart

    The following VBA macro will:

    1. Insert a Treemap Chart in the active worksheet.
    2. Format the chart for better readability.

    VBA Code

    Sub CreateTreemapChart()
        Dim ws As Worksheet
        Dim chartObj As ChartObject
        Dim rng As Range
        Dim treemapChart As Chart
        ' Set worksheet
        Set ws = ActiveShee
        ' Define the data range (adjust as necessary)
        Set rng = ws.Range("A1:C8") ' A1:C8 contains Category, Sub-Category, and Value
        ' Insert Chart Object
        Set chartObj = ws.ChartObjects.Add(Left:=100, Width:=400, Top:=50, Height:=300)
        ' Reference the Chart inside the ChartObject
        Set treemapChart = chartObj.Chart
        ' Set chart source data
        treemapChart.SetSourceData Source:=rng
        ' Change chart type to Treemap
        treemapChart.ChartType = xlTreemap
        ' Format Chart Title
        treemapChart.HasTitle = True
        treemapChart.ChartTitle.Text = "Sales Distribution by Category"
        ' Set legend position
        treemapChart.Legend.Position = xlLegendPositionBottom
        ' Improve readability of the chart
        With treemapChart
            .ApplyLayout (1) ' Apply a default layout
            .ChartStyle = 5 ' Use a pre-defined chart style
        End With
        ' Auto-size chart for better visibility
        chartObj.Width = 500
        chartObj.Height = 350
        chartObj.Top = 20
        chartObj.Left = 50
        ' Release objects
        Set treemapChart = Nothing
        Set chartObj = Nothing
        Set ws = Nothing
        Set rng = Nothing
        MsgBox "Treemap Chart Created Successfully!", vbInformation, "Success"
    End Sub

    Explanation of the VBA Code

    Step 1: Selecting the Worksheet

    Set ws = ActiveSheet
    • This ensures the macro runs on the currently active worksheet.

    Step 2: Defining the Data Range

    Set rng = ws.Range("A1:C8")
    • This specifies the range of data for the Treemap Chart.

    Step 3: Inserting a Chart Object

    Set chartObj = ws.ChartObjects.Add(Left:=100, Width:=400, Top:=50, Height:=300)
    • Adds a new chart to the worksheet with specific dimensions.

    Step 4: Setting Up the Chart

    Set treemapChart = chartObj.Chart
    treemapChart.SetSourceData Source:=rng
    treemapChart.ChartType = xlTreemap
    • Defines the data source and sets the chart type to Treemap.

    Step 5: Formatting the Chart

    treemapChart.HasTitle = True
    treemapChart.ChartTitle.Text = "Sales Distribution by Category"
    • Enables and customizes the chart title.
    treemapChart.Legend.Position = xlLegendPositionBottom
    • Moves the legend to the bottom for clarity.
    With treemapChart
        .ApplyLayout (1) ' Apply default layout
        .ChartStyle = 5 ' Use a pre-defined chart style
    End With
    • Applies formatting to enhance the appearance of the chart.

    Step 6: Adjusting Chart Size and Position

    chartObj.Width = 500
    chartObj.Height = 350
    chartObj.Top = 20
    chartObj.Left = 50
    • Resizes and repositions the chart on the worksheet.

    Step 7: Cleaning Up Objects

    Set treemapChart = Nothing
    Set chartObj = Nothing
    Set ws = Nothing
    Set rng = Nothing
    • Releases object references to free up memory.
    1. Running the VBA Code
    1. Open Excel and press ALT + F11 to open the VBA Editor.
    2. Insert a new module and paste the VBA code.
    3. Select your sheet and ensure data is structured correctly.
    4. Run the macro CreateTreemapChart by pressing F5.
    1. Expected Output

    After running the macro, a Treemap Chart will appear on the active worksheet, displaying the hierarchical sales data. The rectangles will be sized proportionally to their values, making it easy to compare categories and sub-categories.

    1. Additional Customization

    You can enhance the chart by:

    • Changing the chart title dynamically based on a cell value:
    • ChartTitle.Text = ws.Range(« E1 »).Value
    • Modifying color themes:
    • ChartStyle = 10
    • Adding Data Labels:
    • ApplyDataLabels xlDataLabelsShowValue
    • Adjusting the legend format:
    • Legend.Font.Size = 12
    1. Conclusion

    This VBA macro automates the creation of a Treemap Chart in Excel, making it easy to visualize hierarchical data. You can modify the macro further to dynamically select data or enhance the chart formatting.

  • Creating a stock chart in Excel VBA

    Stock Chart is used to represent stock prices or any data that includes open, high, low, and close values over a set period. In Excel, we can create a stock chart using VBA by arranging the data appropriately and then using Excel’s built-in charting features to create the chart.

    Step-by-Step Explanation:

    1. Data Preparation

       The data for a stock chart typically requires 4 columns:

       – Date (or Time Period)

       – Open Price

       – High Price

       – Low Price

       – Close Price

       The data must be structured properly, with each row representing one day of stock data.

    1. Creating the Chart

       Excel has a built-in « Stock » chart type, which you can access through VBA. The stock chart supports several variations (Open-High-Low-Close, Volume-High-Low-Close, etc.), but we will focus on the Open-High-Low-Close version in this example.

    1. VBA Code to Create the Stock Chart

    Here’s a VBA code that demonstrates how to create a Stock Chart in Excel:

    Sub CreateStockChart()
        Dim ws As Worksheet
        Dim rng As Range
        Dim chartObj As ChartObject
        ' Set reference to the current active sheet
        Set ws = ActiveSheet   
        ' Define the range containing the data
        ' Assuming the data is in columns A to E, with headers in row 1 and data starting from row 2
        Set rng = ws.Range("A1:E10") ' Adjust the range to your actual data   
        ' Create a new chart object
        Set chartObj = ws.ChartObjects.Add(Left:=100, Width:=375, Top:=75, Height:=225)   
        ' Set the chart data source
        chartObj.Chart.SetSourceData Source:=rng   
        ' Set the chart type to Stock Chart (OHLC)
        chartObj.Chart.ChartType = xlStockOHLC   
        ' Set chart title
        chartObj.Chart.HasTitle = True
        chartObj.Chart.ChartTitle.Text = "Stock Price Chart"   
        ' Set axis titles
        chartObj.Chart.Axes(xlCategory, xlPrimary).HasTitle = True
        chartObj.Chart.Axes(xlCategory, xlPrimary).AxisTitle.Text = "Date"   
        chartObj.Chart.Axes(xlValue, xlPrimary).HasTitle = True
        chartObj.Chart.Axes(xlValue, xlPrimary).AxisTitle.Text = "Price"   
        ' Format the chart (optional)
        With chartObj.Chart
            .Axes(xlCategory).CategoryNames = ws.Range("A2:A10") ' Set category names to dates
            .Axes(xlValue).MinimumScale = 0 ' Set minimum value for price axis
            .Axes(xlValue).MaximumScale = 100 ' Adjust as needed
        End With   
    End Sub

     Explanation of the Code:

    Setting the Range:

      The code assumes that the data for the stock chart is in columns A to E, where column A contains the Date, and columns B, C, D, and E contain Open, High, Low, and Close values, respectively. You can adjust the range `ws.Range(« A1:E10 »)` to match your actual data.

    Creating the Chart:

      The `ws.ChartObjects.Add` method is used to create a new chart on the active sheet. The `Left`, `Width`, `Top`, and `Height` parameters specify the position and size of the chart.

    Setting the Chart Type:

      `chartObj.Chart.ChartType = xlStockOHLC` tells Excel to use the OHLC (Open-High-Low-Close) version of the stock chart.

    Chart Title and Axis Titles:

      Titles for the chart and axes are added using the `Chart.HasTitle` and `Axes.HasTitle` properties. You can modify the text for the titles according to your preference.

    Formatting the Axes:

      The `CategoryNames` property of the x-axis is set to the dates from column A (`ws.Range(« A2:A10 »)`). Additionally, you can adjust the minimum and maximum scale of the y-axis for better visualization of stock prices.

    Customization:

    Data Range: You can adjust the range `A1:E10` to include more rows of stock data. Ensure the data is in the correct format.

    Chart Type: You can change the chart type to other stock variations (e.g., Volume-High-Low-Close) by setting `ChartType = xlStockVHLC`.

    Formatting: You can customize the chart appearance further, such as changing the colors of the price bars, adding gridlines, or adjusting the axis formatting.

    How to Run the Code:

    1. Open Excel and press `Alt + F11` to open the VBA editor.
    2. Insert a new module by clicking `Insert > Module`.
    3. Paste the above code into the module.
    4. Press `F5` to run the macro or assign it to a button in your workbook.

    This code will generate a stock chart based on the data you provide and display it in your worksheet.

  • Create Tree Map Chart with Excel VBA

    1. steps to Create a Tree Map Chart with VBA

    To create a Tree Map Chart using VBA, we will:

    • Prepare sample hierarchical data in an Excel worksheet.
    • Insert a Tree Map Chart.
    • Format the chart for better readability.
    1. VBA Code to Create a Tree Map Chart

    The following VBA code:

    • Inserts sample data in an Excel worksheet.
    • Creates a Tree Map Chart.
    • Adjusts formatting.
    Sub CreateTreeMapChart()
        Dim ws As Worksheet
        Dim chartObj As ChartObject
        Dim treeMapChart As Chart
        Dim dataRange As Range
        ' Step 1: Set the worksheet
        On Error Resume Next
        Set ws = ThisWorkbook.Sheets("TreeMapData")
        If ws Is Nothing Then
            Set ws = ThisWorkbook.Sheets.Add
            ws.Name = "TreeMapData"
        End If
        On Error GoTo 0
        ' Step 2: Add Sample Data for Tree Map
        ws.Cells.Clear
        ws.Range("A1:C1").Value = Array("Category", "Subcategory", "Value"
        ws.Range("A2:C10").Value = Array( _
            Array("Fruits", "Apples", 50), _
            Array("Fruits", "Bananas", 30), _
            Array("Fruits", "Oranges", 40), _
            Array("Vegetables", "Carrots", 20), _
            Array("Vegetables", "Potatoes", 35), _
            Array("Vegetables", "Tomatoes", 25), _
            Array("Dairy", "Milk", 60), _
            Array("Dairy", "Cheese", 45), _
            Array("Dairy", "Yogurt", 30)
        ' Step 3: Define the data range
        Set dataRange = ws.Range("A1:C10")
        ' Step 4: Create the Tree Map Chart
        Set chartObj = ws.ChartObjects.Add(Left:=100, Top:=50, Width:=400, Height:=300)
        Set treeMapChart = chartObj.Chart
        treeMapChart.SetSourceData Source:=dataRange
        treeMapChart.ChartType = xlTreemap
        ' Step 5: Format the Tree Map Chart
        With treeMapChart
            .HasTitle = True
            .ChartTitle.Text = "Tree Map Chart - Sales Data"
            .ChartTitle.Font.Size = 14
            .ChartTitle.Font.Bold = True
            .Legend.Position = xlBottom
        End With
        ' Step 6: Autofit columns
        ws.Columns("A:C").AutoFit
        ' Notify user
        MsgBox "Tree Map Chart created successfully!", vbInformation, "Success"
    End Sub

    Explanation of the Code

    Step 1: Define the Worksheet

    Set ws = ThisWorkbook.Sheets("TreeMapData")
    If ws Is Nothing Then
        Set ws = ThisWorkbook.Sheets.Add
        ws.Name = "TreeMapData"
    End If
    • The code checks if a worksheet named « TreeMapData » exists.
    • If not, it creates a new worksheet and assigns it this name.

    Step 2: Insert Sample Data

    ws.Range("A1:C1").Value = Array("Category", "Subcategory", "Value")
    ws.Range("A2:C10").Value = Array( _
        Array("Fruits", "Apples", 50), _
        Array("Fruits", "Bananas", 30), _
        Array("Fruits", "Oranges", 40), _
        Array("Vegetables", "Carrots", 20), _
        Array("Vegetables", "Potatoes", 35), _
        Array("Vegetables", "Tomatoes", 25), _
        Array("Dairy", "Milk", 60), _
        Array("Dairy", "Cheese", 45), _
        Array("Dairy", "Yogurt", 30))
    • The headers « Category », « Subcategory », and « Value » are set.
    • Sample hierarchical data is inserted.

    Step 3: Define the Data Range

    Set dataRange = ws.Range("A1:C10")
    • The data range for the chart is defined.

    Step 4: Create and Insert the Tree Map Chart

    Set chartObj = ws.ChartObjects.Add(Left:=100, Top:=50, Width:=400, Height:=300)
    Set treeMapChart = chartObj.Chart
    treeMapChart.SetSourceData Source:=dataRange
    treeMapChart.ChartType = xlTreemap
    • A chart is inserted into the worksheet.
    • The data is assigned to the chart.
    • The chart type is set to Tree Map (xlTreemap).

    Step 5: Format the Tree Map Chart

    With treeMapChart
        .HasTitle = True
        .ChartTitle.Text = "Tree Map Chart - Sales Data"
        .ChartTitle.Font.Size = 14
        .ChartTitle.Font.Bold = True
        .Legend.Position = xlBottom
    End With
    • A title is added to the chart.
    • The title’s font size and bold property are set.
    • The legend is positioned at the bottom.

    Step 6: Autofit Columns and Display Success Message

    ws.Columns("A:C").AutoFit
    MsgBox "Tree Map Chart created successfully!", vbInformation, "Success"
    • Columns are resized for better visibility.
    • A message box informs the user that the Tree Map Chart is created successfully.
    1. Running the VBA Code
    • Open Excel and press ALT + F11 to open the VBA Editor.
    • Insert a New Module.
    • Copy and paste the VBA code.
    • Run CreateTreeMapChart.
    1. Expected Output
    • A new worksheet named TreeMapData is created.
    • The sample data is added.
    • A Tree Map Chart is inserted and formatted.
    1. Customization Options

    You can modify:

    • The data to fit your needs.
    • The chart title (treeMapChart.ChartTitle.Text).
    • The chart size (Width, Height).
    • The chart position (Left, Top).
    1. Conclusion

    This VBA macro automates the process of creating a Tree Map Chart in Excel, saving time and ensuring consistency.