あるSEのつぶやき・改

ITやシステム開発などの技術に関する話題を、取り上げたりしています。

Excelでチェックボックスを指定セルで高さのセンタリングに配置する方法

Excel でチェックボックスを配置したはいいものの、セルの高さを変えると、折角高さのセンタリングをしていたのに位置がずれてしまいますね。

一応は、セル内の上位置は維持しているものの、やりたいのはチェックボックスを配置したセル内での高さセンタリングだったりします。

この場合、単純にはできず VBA で処理を書く必要があるのですが、簡単に適用できる方法を見つけたので記事にします。

まず、"target"シートにチェックボックスを3つ並べます。

f:id:fnyablog:20190411220027p:plain:w480

そして、"config"シートの A列にチェックボックスのキャプション名を、B列にチェックボックスを配置したいセル番号を記入して、マクロを実行するボタンを配置します。

f:id:fnyablog:20190411220315p:plain:w480

続いて肝心の VBA は以下のようになります。この VBA をボタンに割り当てます。

Sub AdjustCheckboxPosition()
    Dim sheet As Worksheet
    Dim myCheck As checkbox
    Dim cellName As String
 
    
    Set sheet = ThisWorkbook.Worksheets("target")
    
    For Each myCheck In sheet.CheckBoxes
        cellName = GetTargetCell(myCheck.caption)
        
        If cellName <> "" Then
            myCheck.Top = sheet.Range(cellName).Top + (sheet.Range(cellName).Height / 2) - (myCheck.Height / 2)
            myCheck.Left = sheet.Range(cellName).Left
        End If
    
    Next
    
    Set sheet = Nothing
End Sub

Function GetTargetCell(caption)
    Const MAX_INDEX = 100  'Checkbox定義の最大セル
    Dim configSheet As Worksheet
    Dim i As Integer
    Dim cellName As String
    
    cellName = ""
    Set configSheet = ThisWorkbook.Worksheets("config")
    
    For i = 1 To MAX_INDEX
        If configSheet.Cells(i, 1).Value = caption Then
            cellName = configSheet.Cells(i, 2).Value
            Exit For
        End If
    Next

    Set configSheet = Nothing
    GetTargetCell = cellName
End Function

セルの高さを広げた状態で、「センタリング」ボタンを押すと。。。

f:id:fnyablog:20190411220738p:plain:w480

指定セルで、高さのセンタリングでチェックボックスが配置されました。

f:id:fnyablog:20190411220930p:plain:w480