2017-06-22 12 views
2

私は、非常に大きなエクセルファイルを持ち、さまざまなセルに数百のノートがあります。私は各行のノートの内容を抽出して、それをそれぞれの列に入れたいと思います。たとえば、1行目に3つの音符がある場合、それらのコメントのテキストはU1となります。 4つのコメントが2行目にあった場合、それらの4つのコメントはU2にもあります。私は今までこれを行うためにVBAを使用していますが、行ごとに分けることに問題があります。Excelで行ごとにメモを転送する

Sub CopyCommentsToCol() 
Dim i As Integer 
i = 2 
Dim Rng As Range 
Dim cell As Range 
Dim row As Range 
Dim commrange As Range 
Dim curwks As Worksheet 

Set Rng = Range("A2:A5") 'Test Range for now 
Set curwks = ActiveSheet 

On Error Resume Next 
    Set commrange = curwks.Cells _ 
     .SpecialCells(xlCellTypeComments) 
On Error GoTo 0 


On Error Resume Next 
If Err.Number <> 0 Then 
    Err.Clear 
End If 

For Each row In Rng.Rows 
    For Each cell In commrange 'Application.ActiveCell.Comment 
     If cell.Comment <> Empty Then 
      Range("$U$" & i) = Range("$U$" & i).Text & cell.Comment.Text 
     End If 

    Next cell 
    i = i + 1 
Next row 
End Sub 

このvbaコードは現在、指定されたテスト範囲にすべてのノートを置きます。自分の行のメモだけではありません。私はここで私のエラーを理解し、インナーループはシート全体を通過しています。私はちょうどこの問題を解決する方法を知らない。

EDIT

For Each row In Rng.Rows 
    Set commrange = row.SpecialCells(xlCellTypeComments) 
    For Each cell In commrange 
     If cell.Comment <> Empty Then 
      Range("$U$" & i) = Range("$U$" & i).Text & cell.Comment.Text 
     End If 
    Next cell 
    i = i + 1 
Next row 
+0

トランスポーズをコピーして貼り付けますか? – mjsqu

+0

どうやってコメントを1つの行にコピーするのですか? – McD

+0

すごく遅いです。あなたがこれまで試みてきたVBAを投稿したなら、多分それは助けになるかもしれません。コメントと対話するときにマクロを記録し、生成されたコードを確認してください。 – mjsqu

答えて

2

あなたはRowsコレクションを使用することができます。

For Each row In yourRange.Rows 
    'collect comments 
Next row 

ような何かUPDATE:最初のアイデアとして

あなたがcell.Rowをチェックして、セル内のテキストを追加するときにそれを使用することができ、動作しませんでした。

Sub CopyCommentsToCol() 

Dim Rng As Range 
Dim cell As Range 
Dim row As Range 
Dim commrange As Range 
Dim curwks As Worksheet 

Set Rng = Range("A2:A5") 'Test Range for now 
Set curwks = ActiveSheet 

On Error Resume Next 
    Set commrange = curwks.Cells _ 
     .SpecialCells(xlCellTypeComments) 
On Error GoTo 0 


On Error Resume Next 
If Err.Number <> 0 Then 
    Err.Clear 
End If 

For Each cell In commrange 'Application.ActiveCell.Comment 
    If cell.Comment <> Empty Then 
     Range("$U$" & cell.Row) = Range("$U$" & cell.Row).Text & cell.Comment.Text 
    End If 

Next cell 

End Sub 
+0

で投稿を更新しました。問題は、行によって収集されたコメントを分離することです。更新された投稿からわかるように、 – McD

+1

このループには、特に 'Set commrange = row.SpecialCells(xlCellTypeComments)'という部分全体を置くべきです。私はExcel ATMにアクセスできないので、残念ながらそれをテストすることはできません。 –

+0

もっと詳しく説明できますか? commrangeを row.Cells.SpecialCells(xlCellTypeComments)に設定すると、何も変更されず、ループ内でcommergeを設定しても問題は解決しません。 – McD

関連する問題