日本語入力ソフトとVBAの覚え書き

・各種日本語入力ソフトの辞書解説 ・ちょっと楽になるWord/Excel VBA集 ・ボーダーブレイク用語辞書

セルのコメントを編集する(1) InputBox関数編-1


f:id:dz_dzone:20170814233145j:plain

個人的に仕事で大量のコメントを追加しては日々編集しているんですが、こう大量にあるとエクセル標準のコメント編集機能ではちょっとまどろっこしいところがあります。何か入力ダイアログみたいなもので編集できると便利だなと思ったので今回はこれをやってみたいと思います。

入力ダイアログにInputBox関数を使う

まず最初に考えたのは文字列を入力できるInputBox関数です。まずは簡単にコードを組んでみます。

Sub KomeHen0()
  Dim StrHen As String
  
  ' ** 文字列を入力 **
  StrHen = InputBox(Prompt:="文字を入力", Title:="コメント編集")
  
  ' ** コメント内容を変更する処理 **
  With ActiveCell
    With .Comment
      .Shape.Select True
      .Text Text:=StrHen
    End With
    .Activate
  End With
End Sub

f:id:dz_dzone:20171024093109j:plain
f:id:dz_dzone:20171024093120j:plain
f:id:dz_dzone:20171024093127j:plain

コードの説明

With~End Withをネスト(入れ子構造)してますが、内容は簡単です。
ActiveCellに対し「.Comment.Shape.Select True」は、セルのコメントを選択状態にします。その上で「.Comment.Text Text:=StrHen」でコメントのテキストをStrHenにする」を実行します。最後に「ActiveCell.Activate」で選択状態をコメントからセルに戻します。

基本のコードが出来ました。

エラー処理を追加

現状のコードですと、コメントが設定されていないセルで実行するとエラーになりますので、エラー処理を加えます。

  If TypeName(ActiveCell.Comment) = "Comment" Then
    ' ** セルにコメントがあれば処理する **
  Else
    ' ** セルにコメントがなかったら終了する **
    MsgBox "コメントがありません。", vbOKOnly + vbExclamation
    Exit Sub
  End If

コメントの有無で処理を変えます。

キャンセル処理

現状のコードでキャンセルを押すとエラーが発生します。

f:id:dz_dzone:20171024095523j:plain

InputBox関数のキャンセル処理は定型的な書き方があります。私はこちらを参考にしました。

www.relief.jp

これを踏まえて

    ' ** キャンセル処理
    If StrPtr(StrHen) = 0 Then
      Exit Sub
    End If

既に入力されているコメントをInputBoxに代入する

コメントをまるっきり書き換える場合は今のままで良いのですが、既に入力されているコメントを編集する場合、また同じような文字列を入力するのは面倒です。そこで既に入力されているコメントをInputBoxに代入しておきます。

  StrHen = InputBox(Prompt:="文字を入力", _
                    Title:="コメント編集", _
                    Default:=ActiveCell.Comment.Text)

f:id:dz_dzone:20171024100609j:plain

次回:複数行に対応させる

今回のコードですと一行のコメントにしか対応していません。次回は複数行に対応させてみようと思います。

今回の完成コード

Sub KomeHen()
  If TypeName(ActiveCell.Comment) = "Comment" Then
  
    ' ** セルにコメントがあれば処理する **
    Dim StrHen As String
    StrHen = InputBox(Prompt:="※改行は出来ません。", _
                      Title:="コメント編集(一行版)", _
                      Default:=ActiveCell.Comment.Text)
        
    ' ** キャンセル処理
    If StrPtr(StrHen) = 0 Then
      Exit Sub
    End If
    
    ' ** コメント内容を変更する処理 **
    With ActiveCell
      With .Comment
        .Shape.Select True
        .Text Text:=StrHen
      End With
      .Activate
    End With
  Else
    ' ** セルにコメントがなかったら終了する **
    MsgBox "コメントがありません。", vbOKOnly + vbExclamation
    Exit Sub
  End If
End Sub

以上。

にほんブログ村 IT技術ブログ VBAへ←記事を気に入って頂けたらポチッとしてもらえると励みになります。