4

私はいくつかの医師の名前とその住所が記載されたExcel2010シートに取り組んでいますが、多くの場合、同一であるが住所が異なる2つの名前があります。この場合、住所情報を名と同じ行にコピーしたいのですが、4列のオフセットがあります。これが私が思いついたコードです

Sub OraganizadorEndereços()

    ActiveCell.Select
    If ActiveCell.Value = ActiveCell.Offset(1, 0).Value _
    Then ActiveCell.Offset(1, 0).Activate: _
    Range(ActiveCell.Offset(0, 1), ActiveCell.Offset(0, 4)).Copy: _
    ActiveCell.Offset(-1, 0).Select: _
    ActiveCell.Offset(0, 5).Paste _
    Else ActiveCell.Offset(1, 0).Select

End Sub

しかし、私はエラーが発生します

ActiveCell.Offset(0, 5).Paste _
Else ActiveCell.Offset(1, 0).Select

コードの一部で、オブジェクトがこのプロパティ/メソッドを受け入れないことを示しています

また、今日からVBAでプログラミングを始めたので、説明をいただければ幸いです。

4

2 に答える 2

6

セルのアクティブ化と選択にあまり依存しないようにしてください。セルを範囲変数に割り当てて、作業をはるかに簡単にすることができます。また、セルをコピーする必要はありません(色などの書式もコピーする場合を除きます)。代わりに、セルの.Valueを使用してください。

Sub OraganizadorEndereços()

Dim rngTest as Range 'Define rngTest variable as Range
Set rngTest = Activecell 'Set rngTest to be the ActiveCell
If rngTest.Value = rngTest.Offset(1, 0).Value Then 
    'Replace the .Value of the columns to right with the .Value of the row below
    Range(rngTest.Offset(0,5), rngTest.Offset(0,8).value = Range(rngTest.Offset(1, 1), rngTest.Offset(1, 4)).Value
Else 
    Set rngTest = rngTest.Offset(1,0) 'Set rngTest to be the next line down
End If

End Sub
于 2013-03-22T15:29:32.300 に答える
2

以下のコードを試してください:

Sub OraganizadorEndereços()

    Dim rng As Range
    Dim offsetRng As Range

    Set rng = ActiveCell
    rng.Select

    Set offsetRng = rng.Offset(1, 0)

    If rng = offsetRng Then
        offsetRng.Offset(0, 1).Resize(, 4).Copy offsetRng.Offset(0, 5)
        rng.Offset(1, 0).Activate
    Else
        rng.Offset(1, 0).Select
    End If

End Sub
于 2013-03-22T15:34:02.653 に答える