web-dev-qa-db-ja.com

Excel 2013:数式を1つのセルから次のセルにコピーするVBA

マクロの下で実行するボタンを使用して、ExcelのセルA3からB3に数式をコピーする必要があります。

Sub Copy()
    Range("A3").Select
    ActiveCell.Offset(0, 1).Formula = ActiveCell.Formula
End Sub

その後、ボタンをクリックするたびに、範囲全体が入力されるまで、数式を範囲(B3:J3)の次のセルにコピーする必要があります。ボタンを1回クリックするだけで範囲を一度に埋めるのではなく、クリックごとに1つのセルを入力するだけです。これは数週間にわたって行われるため、毎週1つのセルにデータが入力されます。

1
Coenie

あなたの問題は、あなたが持っているコードはセルA3でしか機能しないが、行3の最後の数式で機能させたいということです。

B3が空白の場合、コードは機能しますが、そうでない場合は、A3を再度コピーします。

B3が空白でない場合は、行3の最後のセルをその右側のセルにコピーする必要があります。

    Sub CopyToRight()
Dim WB As Workbook
Dim WS As Worksheet

    Set WB = ThisWorkbook
    Set WS = Sheets("Sheet1")
    With WS
        If IsEmpty(.Range("A3").Offset(0, 1)) Then
            .Range("A3").Copy .Range("A3").Offset(0, 1)
        Else
            .Range("A3").End(xlToRight).Copy .Range("A3").End(xlToRight).Offset(0, 1)
        End If
    End With
End Sub
1
Mark Fitzgerald

変更する必要があるのは、次のいずれかです。

  1. 「A3」は次の反復で「B3」になる必要がありますまたは
  2. .Offset(0,1)は、次の空のセルに到達するために展開する必要があります。

どちらの方法でもコーディングできます。1の場合はA3'CopyCell 'という名前を付け、コピーした後、' CopyCell 'という名前をB3に変更します。 2の場合、Offset(0,1)を(0、cols)に変更する必要があります。ここでcols =現在のcols + 1

Sub Button_Click()
'
' Button_Click Macro
'

    Range("CopyMe").Select
    ActiveCell.Offset(0, 1).Formula = ActiveCell.Formula
    Range(ActiveCell.Offset(0, 1), ActiveCell.Offset(0, 1)).Select
    With ActiveWorkbook.Names("CopyMe")
        .Name = "CopyMe"
        .RefersTo = ActiveCell
        .Comment = ""
    End With
'

End Sub

堅牢性の観点からは、現在コピーするセルの名前が「CopyMe」であると想定しているため、あまり良くありません。そうでない場合は機能しません。

したがって、誰かがマクロを実行してから列を削除して再度実行しようとすると、機能しません。

1
kztd