アプリ版:「スタンプのみでお礼する」機能のリリースについて

こんにちは、VBAを勉強中の者です。

任意のシート(20000行×30列くらいでデータが入っています)に入力されているコメントのみを別シートに抽出し、一列に一覧表示させたいです。

自分でも調べてみて、とりあえずコメントは操作可能ということはわかったのですが、

・任意のシートの中身を行と列の二次元に検索していく方法(特定の行のみ検索するコードはあちこちで見受けられるのですが)

・拾ったコメントの内容を別シートに書き込むのを「高速で」行う方法(その都度書き込んでアクティブセルを移動させる…というのならわかるのですが、データの量が膨大なので、これだと途方もない時間がかかってしまいそうです)

以上の方法がわからないでいます。

また、抽出したコメントは、配列関数を使えば処理が早いのでしょうか。
となると、書き込む件数が何件発生するかわからない場合はどうするのだろうか、と行き詰まっています。

(さらに贅沢を言いますと、コメントが入っていたセル番号が隣の列に入っているといいな、という希望もありますが、これはあくまで第二希望です)

VBA勉強中ですので、パーフェクトに動くコードでなくても構いません。断片的なヒントでも大歓迎です。
VBAに詳しい方、ご教示頂けますでしょうか。

A 回答 (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
    • good
    • 1
この回答へのお礼

いつもお世話になっております。
コードもパーフェクトです!いつもながら素晴らしい!

想像していたよりもずっとシンプルなコードで、驚いています。
あとで勉強のため、解読させていただきますね。

まずはとりあえず、お礼まで。

お礼日時:2005/06/28 13:57

以下のコードで、コメントが別シートに張り付くと思います。

(未確認)
------------------------------
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
    • good
    • 0
この回答へのお礼

こんにちは、動作確認させていただきました。

これは、貼り付け先のシートの、コメントが入っている位置のセルそのものに、コメントが入る仕様ですね。
今回一列に並べたかったので、No.2さんのものを採用させて頂きますが、こちらも応用がききそうです。

どうもありがとうございました。

※なお、実行時に("A1:AF20000) の部分を("A1:AF20000")と修正いたしました。
 些細なことですが、今後この回答を参考にされる方の為に、補足させて頂きます。

お礼日時:2005/06/28 13:54

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!