hiko-blog

VBA業務改善

MENU

Excelコメント類のメンテ

Sub ResetComments()
    Dim cmt As Comment
    
    'すべてのコメントをループして削除する
    For Each cmt In ActiveSheet.Comments
        cmt.Delete
    Next cmt
End Sub

 

'//---------------------------------------------------------------
'エクセルの行と列を入れ変えたシートを作る(行列入れ替え)
'---------------------------------------------------------------//
Sub 行と列を入れ変えたシートを作る()
    ActiveSheet.UsedRange.Copy
    Worksheets.Add
    ActiveSheet.Range("A1").PasteSpecial Transpose:=True
End Sub
'//---------------------------------------------------------------
'エクセルのコメントサイズ自動調整
'---------------------------------------------------------------//
Sub コメントサイズ自動調整()
    Dim bCommentVisible As Boolean
    Dim cmt As Comment
    Dim rng As Range
    
    With Application   ' 画面チラチラ防止
            .ScreenUpdating = False
            .DisplayAlerts = False
            .Calculation = xlCalculationManual
    End With
    
    bCommentVisible = Not bCommentVisible
        For Each cmt In ActiveSheet.Comments
            cmt.Shape.TextFrame.AutoSize = True
            'cmt.Shape.TextFrame.Characters.Font.Size = 11
            
            Set rng = cmt.Parent    ' 該当Cells
                With cmt.Shape  ' コメント位置の調整
                    .Left = rng.MergeArea.Left + rng.MergeArea.Width + 10
                    .Top = rng.Top - 10
                End With
            
            cmt.Visible = bCommentVisible
        Next
    
     With Application   ' 画面チラチラ解除
            .Calculation = xlCalculationAutomatic
            .DisplayAlerts = True
            .ScreenUpdating = True
      End With
      
End Sub
'//---------------------------------------------------------------
'アクティブシートのコメント一覧を作成する
'---------------------------------------------------------------//
Sub コメント一覧()
    Dim sh As Worksheet
    Dim i As Integer
    Dim c
   
    Set sh = ActiveSheet
    i = 0
   
    Sheets.Add.Name = "コメント一覧-" & sh.Name
    Cells(1, 1) = "コメント一覧-" & sh.Name
    Cells(4, 2) = "行"
    Cells(4, 3) = "列"
    Cells(4, 4) = "作成者"
    Cells(4, 5) = "コメント内容"
   
    For Each c In sh.Comments
        Cells(i + 5, 2) = c.Parent.row
        Cells(i + 5, 3) = c.Parent.Column
        Cells(i + 5, 4) = c.Author
        Cells(i + 5, 5) = c.Text
        i = i + 1
    Next c
   
    Cells.EntireColumn.AutoFit
    Cells.EntireRow.AutoFit

End Sub
'//---------------------------------------------------------------
'コメントメンテ
'アクティブシートのコメント一覧を使用して
'コメントを再設定
'実行前にコメント一覧のシートを表示させておく
'---------------------------------------------------------------//
Sub コメントメンテ()
Dim findPatern
 findPatern = "コメント一覧*"
    ' コメントメンテする対象コメント一覧*が設定されていない
    If Not ActiveWorkbook.ActiveSheet.Cells(1, 1).Value Like findPatern Then
        MsgBox "コメント一覧を作成してからコメントメンテ作業してください"
        Exit Sub
    End If
    
    Dim sh As Worksheet
    Dim sh_name As String
    Dim i As Integer
   
    sh_name = Mid(Cells(1, 1), InStr(Cells(1, 1), "-") + 1, Len(Cells(1, 1)))
    Set sh = Sheets(sh_name)
   
    For i = 5 To Cells(4, 2).End(xlDown).row
        sh.Cells(Cells(i, 2), Cells(i, 3)).ClearComments
        With sh.Cells(Cells(i, 2), Cells(i, 3)).AddComment
            .Visible = False
            .Text Text:="作成者: " & CStr(Cells(i, 4)) & vbNewLine & CStr(Cells(i, 5))
            '.Text Text:=CStr(Cells(i, 5))
        End With
    Next i
    Call コメントサイズ自動調整
End Sub
'//---------------------------------------------------------------
'コメントの表示/非表示の切り替える
'---------------------------------------------------------------//
Sub コメントの表示非表示切替()
    '①コメントとコメントマークを表示
    Application.DisplayCommentIndicator = xlCommentAndIndicator
   
    '②コメントマークのみ表示
    Application.DisplayCommentIndicator = xlCommentIndicatorOnly

    '③コメントとコメントマークを表示しない
    Application.DisplayCommentIndicator = xlNoIndicator
   
End Sub