- ベストアンサー
エクセルのコメントの有無をVB上で取得する方法を教えてください。
エクセルのいくつかのセルにコメントがつけてあります。そのコメントをVB上からさわったり,コメントによって動きを変えたりしたいのですが,コメントのないセルでコメントを参照しようとするとエラーが出るようです。エクセルのコメントの有無をVB上で取得する方法はどういうのでしょうか,どなたか教えてください。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
VBって、VBAのことでいいのでしょう。 コメントが無いとき If Range("A1").NoteText = "" Then では、ダメでしようか?
その他の回答 (3)
- imogasi
- ベストアンサー率27% (4737/17069)
#2のものです。 #3でJa7awuさんの良い回答が出たので、それを使わせていただくと、#2はすっきりします。 Sub test03() Dim cl As Range n = 0 On Error GoTo trap 'エラー処理で、止まらないようにする。 For Each cl In Worksheets("sheet1").Range("a1:b10") If cl.NoteText <> "" Then MsgBox cl.Address MsgBox cl.Comment.Text n = n + 1 End If Next MsgBox "個数 " & n trap: End Sub cl.Comment.Textでコメント内容を見て処理を左右してください。
お礼
ありがとうございました。貴重な時間を取っていただき,申し訳ありません。 #3の手法がわかり,解決しました。 imogasiさんの#2の回答を試してみたのですが,コメントが二つあるときに,二つ目のコメントをつけようとして,実行時エラー1004になり動かなくなってしまいます。どうすればよいかわかりません。
- imogasi
- ベストアンサー率27% (4737/17069)
http://www.d4.dion.ne.jp/~sekiya_z/abl002/a231ae13.htmlを参考にしてやって見ました。あまり良いやり方と思いませんが、ご参考になれば。 HasCommentやIsCommentが使えればそちらを使ってください。 Sub test01() Dim cl As Range n = 0 On Error GoTo TRAP 'エラー処理で、止まらないようにする。 For Each cl In Worksheets("sheet1").Range("a1:b10") cl.AddComment 'コメントを追加する cl.ClearComments GoTo p1 TRAP: '既に有るときにも、エラーとしないため MsgBox cl.Address MsgBox cl.Comment.Text n = n + 1 p1: Next MsgBox "コメント設定個数" & n End Sub
エラーであればコメントが設定されていない。 エラーじゃなければコメントが設定されている。 という判断ができるのですからエラートラップを仕掛けて処理することもできますね。 それとは別に、こんな方法はどうでしょうか。 コメントが設定されていれば True を返す関数です。 Function IsComment(myRange As Range) As Boolean Dim myBuffer As Variant If TypeName(myRange) = "Range" Then Set myBuffer = myRange.Comment If TypeName(myBuffer) = "Comment" Then IsComment = True Else IsComment = False End If End If End Function Sub test() MsgBox IsComment(Cells(1, 1)) End Sub
お礼
ありがとうございました。私の情報源はヘルプファイルしかないので,今はやむを得ず For sj = 1 To ActiveSheet.Comments.Count If ActiveSheet.Comments(sj).Parent.Row = sarow Then …… のような形にしました。 TypeNameに "Comment" というのがあるのを全く知らなくてご迷惑をかけました。ご教示にありがとうございました。
お礼
ありがとうございました。 なんだこんなに簡単なことと,唖然としました。 If Cells(sj,sk ).Comment = "" Then とやるとエラーになり, If Cells(sj,sk ).NoteText = "" Then が,通るなんて! こんなプロパティはヘルプには全く書いてないし。 知らないってことはほんとに恐ろしいです。 ご迷惑をかけました。ほんとうに,ありがとうございました。