- ベストアンサー
《エクセル2000VBA》「コメント」を抽出することはできますか
こんにちは、VBAを勉強中の者です。 任意のシート(20000行×30列くらいでデータが入っています)に入力されているコメントのみを別シートに抽出し、一列に一覧表示させたいです。 自分でも調べてみて、とりあえずコメントは操作可能ということはわかったのですが、 ・任意のシートの中身を行と列の二次元に検索していく方法(特定の行のみ検索するコードはあちこちで見受けられるのですが) ・拾ったコメントの内容を別シートに書き込むのを「高速で」行う方法(その都度書き込んでアクティブセルを移動させる…というのならわかるのですが、データの量が膨大なので、これだと途方もない時間がかかってしまいそうです) 以上の方法がわからないでいます。 また、抽出したコメントは、配列関数を使えば処理が早いのでしょうか。 となると、書き込む件数が何件発生するかわからない場合はどうするのだろうか、と行き詰まっています。 (さらに贅沢を言いますと、コメントが入っていたセル番号が隣の列に入っているといいな、という希望もありますが、これはあくまで第二希望です) VBA勉強中ですので、パーフェクトに動くコードでなくても構いません。断片的なヒントでも大歓迎です。 VBAに詳しい方、ご教示頂けますでしょうか。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは。KenKen_SP です。 Comments コレクション内を For Each で、ループ処理します。 配列は使うまでもないと思います。 Sub Sample() Dim C As Comment Dim Cmt As Comments Dim R As Long Set Cmt = ActiveSheet.Comments Application.ScreenUpdating = False With Worksheets.Add .Cells(1, 1).Value = "ADDRESS" .Cells(1, 2).Value = "TEXT" R = 2 For Each C In Cmt 'コメントの場所 strAddress = C.Parent.Address 'コメントの内容 strText = C.Text '書き込み .Cells(R, 1) = strAddress .Cells(R, 2) = strText R = R + 1 Next C End With Set Cmt = Nothing End Sub
その他の回答 (1)
- ctrlzr
- ベストアンサー率29% (18/62)
以下のコードで、コメントが別シートに張り付くと思います。(未確認) ------------------------------ Dim cms As Comments Dim cm As Comment Dim rg as Range dim v as variant set cms = worksheets("任意のシート名").Comments v = worksheets("任意のシート名").Range("A1:AF20000).value 'データが入っている範囲 for each cm in cms v(cm.Parent.Row, cm.Parent.Column) = cm.Text ' cm.Parent.Address に$A$1とか入ってます。 next worksheets("貼り付けたいシート名").Range("A1:AF20000).value = v
お礼
こんにちは、動作確認させていただきました。 これは、貼り付け先のシートの、コメントが入っている位置のセルそのものに、コメントが入る仕様ですね。 今回一列に並べたかったので、No.2さんのものを採用させて頂きますが、こちらも応用がききそうです。 どうもありがとうございました。 ※なお、実行時に("A1:AF20000) の部分を("A1:AF20000")と修正いたしました。 些細なことですが、今後この回答を参考にされる方の為に、補足させて頂きます。
お礼
いつもお世話になっております。 コードもパーフェクトです!いつもながら素晴らしい! 想像していたよりもずっとシンプルなコードで、驚いています。 あとで勉強のため、解読させていただきますね。 まずはとりあえず、お礼まで。