FaceID
ツールバーボタンにイメージを表示する時に使うFaceID一覧を表示するためのマクロです。
  1. 画像をキャプチャするために作ったもので、サイズは 690×500 になるようマクロで調整しました。
    環境によっては微調整が必要になるかも知れません。
  2. 定義関数 KGetValue KFindStr 以外は同じモジュールにして下さい。
  3. マクロ KFaceID01 で ControlButton のプロパティを変更しても反映されない時は、Excel の再起動をして下さい。 特に ボタンの追加・削除 faceID などの変更は再起動しないとだめみたいです。
  4. ControlButton で終了すると枠線を表示します。
  5. このマクロは AddinBox を参考にしました。
  6. Excelファイルダウンロード FaceID.lzh (26KB)

Option Explicit

Const myBarname As String = "FaceID List"    'コマンドバーの名前
Const myIdPageMax As Integer = 500           'IDの一画面表示数 (500)
Const myIdColCount As Integer = 25           'IDの一列表示数 (25)
Dim myIdMin As Integer                       '表示されているIDの最小値(先頭)
Dim myIdMax As Integer                       '表示されているIDの最大値(最後)

Sub KFaceID01()

''FaceID一覧表示          2003/12/20

    Dim MyCB As CommandBar
    Dim MyCBCtrl As CommandBarControl
    Dim myCount As Integer                     'カウンタ変数
    Dim myButtonCount As Integer               'ボタン数(FaceIDを除く)
    
    myButtonCount = 4                    '[戻る] [表示範囲] [進む] [消去]
    
''初回のゼロ防止
    If myIdMin = 0 Then
        myIdMin = 1
    End If

    On Error Resume Next
    Set MyCB = Application.CommandBars(myBarname)
    
    If (MyCB Is Nothing) Then
        ''初回表示
        Set MyCB = Application.CommandBars.Add(Name:=myBarname, Temporary:=True)
        ''1つ目のボタンの作成 (Button)
        Set MyCBCtrl = MyCB.Controls.Add(Type:=msoControlButton)
        With MyCBCtrl
            .FaceID = 1017   ' (←)
            .TooltipText = "戻る"
            .OnAction = "KFaceIDBack"
        End With

        Set MyCBCtrl = MyCB.Controls.Add(Type:=msoControlButton)
        With MyCBCtrl
            .Style = msoButtonCaption
            .Caption = "1 〜 " & myIdPageMax
            .TooltipText = "表示範囲"
        End With

        Set MyCBCtrl = MyCB.Controls.Add(Type:=msoControlButton)
        With MyCBCtrl
            .FaceID = 1018   ' (→)
            .TooltipText = "進む"
            .OnAction = "KFaceIDNext"
        End With

        ''4つ目のボタンの作成
        Set MyCBCtrl = MyCB.Controls.Add(Type:=msoControlButton)
        With MyCBCtrl
            .FaceID = 1019
            .TooltipText = "消去"
            .OnAction = "KFaceIDDel"
        End With

        ''5〜504 のボタンの作成
        For myCount = 1 To myIdPageMax
            Set MyCBCtrl = MyCB.Controls.Add(Type:=msoControlButton)
            With MyCBCtrl
                If (myCount = 1) Then
                    .BeginGroup = True
                End If
                .FaceID = myCount
                .TooltipText = myCount
            End With
        Next myCount
        
        ''ツールバー表示
        With MyCB
            .Width = MyCB.Controls(myButtonCount + 1).Width * (myIdColCount + 1) '(25個分+α)
            .Top = 150
            .Left = 300
            .Visible = True
        End With
    ''表示範囲の書き換え
    Else
        With MyCB.Controls(2)   ' 表示範囲
            .Caption = myIdMin & "〜" & myIdMin + myIdPageMax - 1
        End With
    
        For myCount = 1 To myIdPageMax
            With MyCB.Controls(myCount + myButtonCount)   '(5)〜(504)
                myIdMax = myIdMin + myCount - 1
                .FaceID = myIdMax
                .TooltipText = myIdMax
            End With
        Next myCount
        MyCB.Visible = True
    End If
    
''FaceID一覧番号表示          2003/12/20
    KFaceID10 myIdMin
    
    Set MyCBCtrl = Nothing
    Set MyCB = Nothing
    myIdMin = 1
End Sub
Sub KFaceIDBack()

    Dim MyCB As CommandBar
    
    On Error Resume Next
    Set MyCB = Application.CommandBars(myBarname)
    myIdMin = Val(MyCB.Controls(2).Caption)     '[〜]の前のみ
    Set MyCB = Nothing
    
    If (myIdMin > 1) Then
        myIdMin = myIdMin - myIdPageMax
        KFaceID01
    End If
End Sub
Sub KFaceIDNext()
    
    Dim MyCB As CommandBar
    
    On Error Resume Next
    Set MyCB = Application.CommandBars(myBarname)
    
    myIdMin = Val(MyCB.Controls(2).Caption)     '[〜]の前のみ
    Set MyCB = Nothing
    
    If (myIdMin < 4001) Then
        myIdMin = myIdMin + myIdPageMax
        KFaceID01
    End If
End Sub
Sub KFaceIDDel()
    On Error Resume Next
    myIdMin = 1
    Application.CommandBars(myBarname).Delete
    ''枠線表示する
    ActiveWindow.DisplayGridlines = True
End Sub
Sub KFaceID10(myStartid As Integer)

''FaceID一覧番号表示          2003/12/20

    Dim myAction As String
    Dim myCol01 As Integer, myCol02 As Integer
    Dim myRow01 As Integer, myRow02 As Integer
    Dim myColWa As Integer, myColWb As Integer
    Dim myColWc As Integer, myColWd As Integer
    Dim myColWe As Integer, myColWm As Integer
    Dim myZAdr1 As String, myZAdr2 As String
    Dim myZRow1 As Integer, myZRow2 As Integer, myZRowh As Integer
    Dim myZCol1 As Integer
    
    myAction = "番号計算"
    Range("A1").Select

''変数値取得  戻り値:変数値                   2002/5/18
    myAction = "【 " & myAction & " 】"
    myZRow1 = KGetValue("", myAction, 1)
    myZRow2 = KGetValue("", myAction, 2)
    myZRowh = KGetValue("", myAction, 3)
    myCol01 = KGetValue("", myAction, 4)
    myCol02 = KGetValue("", myAction, 5)
    myRow01 = KGetValue("", myAction, 6)
    myRow02 = KGetValue("", myAction, 7)
    myColWa = KGetValue("", myAction, 8)
    myColWb = KGetValue("", myAction, 9)
    myColWc = KGetValue("", myAction, 10)
    myColWd = KGetValue("", myAction, 11)
    myColWe = KGetValue("", myAction, 12)
    myColWm = KGetValue("", myAction, 13)

''行高
    myZAdr1 = Range(Cells(myZRow1, 1), Cells(myZRow2, 1)).Address
    Range(myZAdr1).RowHeight = myZRowh

''ID番号計算
    Cells(myRow01, myCol01).Value = myStartid
    
    ''左側
    Cells(myRow01 + 1, myCol01).FormulaR1C1 = "=R[-1]C+" & myIdColCount
    myZAdr1 = Range(Cells(myRow01 + 1, myCol01), Cells(myRow02, myCol01)).Address
    Cells(myRow01 + 1, myCol01).Select
    Selection.AutoFill Destination:=Range(myZAdr1), Type:=xlFillDefault
    
    ''右側
    myZCol1 = myCol01 - myCol02
    myZAdr2 = Cells(myRow01, myCol02).Address
    Range(myZAdr2).FormulaR1C1 = "=RC[" & myZCol1 & "]+" & myIdColCount & "-1"
    Cells(myRow01 + 1, myCol02).FormulaR1C1 = "=R[-1]C+" & myIdColCount
    myZAdr2 = Range(Cells(myRow01 + 1, myCol02), Cells(myRow02, myCol02)).Address
    Cells(myRow01 + 1, myCol02).Select
    Selection.AutoFill Destination:=Range(myZAdr2), Type:=xlFillDefault

    ''列幅調整
    myZAdr1 = Cells(1, 1).Address
    Range(myZAdr1).ColumnWidth = myColWa
    myZAdr1 = Cells(1, 2).Address
    Range(myZAdr1).ColumnWidth = myColWb
    myZAdr1 = Cells(1, 3).Address
    Range(myZAdr1).ColumnWidth = myColWc
    myZAdr1 = Cells(1, myCol01).Address
    Range(myZAdr1).ColumnWidth = myColWd
    myZAdr1 = Range(Cells(1, myCol01 + 1), Cells(1, myCol02 - 1)).Address
    Range(myZAdr1).ColumnWidth = myColWe
    myZAdr1 = Cells(1, myCol02).Address
    Range(myZAdr1).ColumnWidth = myColWm

''枠線表示しない
    ActiveWindow.DisplayGridlines = False

    Cells(myRow01, myCol01 - 1).Select

End Sub
Function KGetValue(mypZSht As String, mypAction As String, mypVno As Integer)

''値取得       戻り値:値                 2002/9/13
'    myaa = KGetValue( mypZSht,Action,Vno)

    Dim mypZAction As String               '実行処理名
    Dim mypActionRow As Integer            'アクション名行
    Dim mypZC As Integer                   '変数値取得列
    Dim mypValue As Variant
    
    If mypZSht = "" Then
        mypZSht = ActiveWorkbook.ActiveSheet.Name
    End If
    
    mypZC = 2                              'B列
    mypZAction = mypAction

    mypActionRow = KFindStr(1, 1, mypZSht, mypZAction)      'fJ 1:行方向  fR 1:行番号
    mypValue = Sheets(mypZSht).Cells(mypActionRow + mypVno, mypZC).Value

    KGetValue = mypValue

End Function
Function KFindStr(mypJSearch As Integer, mypRC As Integer, mypZSht As String, _
                                                mypText As Variant)
    
''文字列を検索(方向指定)して、行・列番号を返す         2002/5/19
'    myaa=KFindStr (fJ ,fR,ZSht,"Code")   'fJ 1:行方向 2:列方向  fR 1:行番号  2:列番号
    ''mypJ 1:行方向(列基準) 2:列方向(行基準)  mypR 1:行番号  2:列番号

'    myaa=KFindStr (1 ,1,ZSht,"Code")   'fJ 1:行方向  fR 1:行番号
'    myab=KFindStr (2 ,2,ZSht,"Code")   'fJ 2:列方向  fR 2:列番号

    Dim mypFindJ As String                '検索方向
    Dim mypTitle As String
    Dim mypMsg1 As String
    Dim mypMsg2 As String
    
    mypTitle = "文字列検索"
    mypMsg1 = "文字列 [ "
    mypMsg2 = " ] が見つかりません。?"
    
    If mypZSht = "" Then
        mypZSht = ActiveSheet.Name
    End If
        
    If mypJSearch = 1 Then                '行方向(列基準)
        mypFindJ = xlByColumns
    ElseIf mypJSearch = 2 Then            '列方向(行基準)
        mypFindJ = xlByRows
    Else
        MsgBox "パラメータが違います。 1 or 2", vbCritical, mypTitle
        End
    End If
    
    On Error GoTo FindErr
    If mypRC = 1 Then
        KFindStr = Sheets(mypZSht).Cells.Find(What:=mypText, After:=Range("A1"), _
                        LookIn:=xlValues, LookAt:=xlWhole, _
                        SearchOrder:=mypFindJ, SearchDirection:=xlNext, _
                        MatchCase:=False).Row
    ElseIf mypRC = 2 Then
        KFindStr = Sheets(mypZSht).Cells.Find(What:=mypText, After:=Range("A1"), _
                        LookIn:=xlValues, LookAt:=xlWhole, _
                        SearchOrder:=mypFindJ, SearchDirection:=xlNext, _
                        MatchCase:=False).Column
    End If
    
    Exit Function
    
FindErr:
    mypMsg1 = mypMsg1 & mypText & mypMsg2
    MsgBox mypMsg1, vbCritical, mypTitle
    End

End Function

top