セルのコメントを編集する(1) InputBox関数編-1
個人的に仕事で大量のコメントを追加しては日々編集しているんですが、こう大量にあるとエクセル標準のコメント編集機能ではちょっとまどろっこしいところがあります。何か入力ダイアログみたいなもので編集できると便利だなと思ったので今回はこれをやってみたいと思います。
入力ダイアログに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
コードの説明
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
コメントの有無で処理を変えます。
キャンセル処理
現状のコードでキャンセルを押すとエラーが発生します。
InputBox関数のキャンセル処理は定型的な書き方があります。私はこちらを参考にしました。
これを踏まえて
' ** キャンセル処理 If StrPtr(StrHen) = 0 Then Exit Sub End If
既に入力されているコメントをInputBoxに代入する
コメントをまるっきり書き換える場合は今のままで良いのですが、既に入力されているコメントを編集する場合、また同じような文字列を入力するのは面倒です。そこで既に入力されているコメントをInputBoxに代入しておきます。
StrHen = InputBox(Prompt:="文字を入力", _ Title:="コメント編集", _ Default:=ActiveCell.Comment.Text)
次回:複数行に対応させる
今回のコードですと一行のコメントにしか対応していません。次回は複数行に対応させてみようと思います。
今回の完成コード
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
以上。