| プライバシーポリシー |

ExcelVBA Tip集  

このページでは、少しでも皆様のExcelVBA(マクロ)プログラミングでの気付きやヒントになればと思い、Tipなどをご紹介しています。

(参考)
下記 例.にある様に説明欄のタイムスタンプのクリックですぐに該当シーンから再生可能です。
例.説明欄のタイムスタンプ




アクティブなブックやワークシートに頼らない


プロシージャ練習 - ExcelVBA脳トレ



コード例
Sub Sort_Selection(v() As Long)
    Dim n As Long, i As Long, j As Long, k As Long
    Dim Min As Long

    n = UBound(v) + 1
    For i = 0 To n - 2
        Min = v(i)
        k = i
        For j = i + 1 To n - 1
            If v(j) < Min Then
                Min = v(j)
                k = j
            End If
        Next
        v(k) = v(i)
        v(i) = Min
    Next
End Sub


文字列操作(ループ練習) - ExcelVBA脳トレ




シートの表の選択セルを見やすくしたい!

コード例
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
    Dim r As Long, c As Long

    If Sh.Name Like "#月" Or Sh.Name Like "##月" Then '特定のシートのみ
        'Application.EnableEvents = False 'SelectionChangeイベント発生する処理がある場合は記述

        '前回の塗りつぶしクリア
        Cells.Interior.Pattern = xlNone

        'If Target.Count = 1 Then '一つのセル選択のみ(Exce2003まで)
        If Target.CountLarge = 1 Then '一つのセル選択のみ(Exce2007から)
           '選択セルの行番号と列番号の取得
            r = Target.Row
            c = Target.Column

            '塗りつぶし
            If r >= 2 And c >= 2 Then '項目名と日付部分は対象外
                Range(Cells(r, 1), Cells(r, c)).Interior.ColorIndex = 40 'ベージュ
                Range(Cells(1, c), Cells(r, c)).Interior.ColorIndex = 40 'ベージュ
            End If
        End If

        'Application.EnableEvents = True 'SelectionChangeイベント発生する処理がある場合は記述
    End If
End Sub


[閉じる]ボタンを作ってみた!


ブックを開く時の処理

コード例
Sub ProtectAllSheet()
    Dim curWs As Worksheet
    Dim ws As Worksheet

    Set curWs = ActiveSheet

    Application.ScreenUpdating = False
    For Each ws In Worksheets
        With ws
            .Activate
            .Range("A1").Select
            .EnableSelection = xlUnlockedCells
            .Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
        End With
    Next
    Application.ScreenUpdating = True

    ThisWorkbook.Protect Structure:=True, Windows:=False

    curWs.Activate
End Sub

Sub UnprotectAllSheet()
    Dim curWs As Worksheet
    Dim ws As Worksheet

    Set curWs = ActiveSheet

    For Each ws In Sheets
        With ws
            .EnableSelection = xlNoRestrictions
            .Unprotect
        End With
    Next

    ThisWorkbook.Unprotect

    curWs.Activate
End Sub


表示形式 (セルの書式設定・Excel関数・VB関数)

[参考資料 - 表示形式]のページはこちら