web-dev-qa-db-ja.com

Excel VBAを使用して、列に数式を入力します(別の列の最後に入力されたセル)

だから私はExcelシートを持っています、列Aはデータでいっぱいです(範囲は毎回異なります)
空の列Hに数式を入力したい(H2から列Aの最後に入力されたセルまで)

これは私が複数のサイトから参照したコードです。
しかし、H1とH2のみを埋めました。この場合、H2:H6が必要です。
xlUpを使用した現在の出力。
colC、D、E、Fは、現時点では無視できるものです。

This is the current output using xlUp

XlUpをxlDownに変更しようとしました。
動作しましたが、colAのデータの一部がrow60で停止すると、H2からH(無限大)までのすべてのセルがいっぱいになりました。

Sub Try()

Dim lRow As Long
lRow = Range("A" & Rows.Count).End(xlUp).Row

Sheets("Sheet4").Select
Range("H2:H" & lRow).Select
Worksheets("Sheet4").Range("H2").FormulaR1C1 = "=(RC[-6])/(RC[-1])"

Range("H2").AutoFill Destination:=Range("H2:H" & lRow)

End Sub

誰かが私の間違いを指摘できますか?

アクティブセルを使用する方法のいくつかは知っていますが、アクティブセルがどこにあるのかわからないことがあるので、使用したくありません。現在どのセルが選択されているかわからないように。 (アクティブセルについて間違った考えを持った場合はお知らせください)

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

1
ExcelNovice

これはあなたのために働くはずです。列Aのデータ範囲を選択し、それを列Hにオフセットします。この範囲は自動入力に与えられます。

Option Explicit

Dim rng As Range
Dim wsh As Worksheet

Sub Second_Try()

  Set wsh = Worksheets("Sheet4")
  wsh.Activate

  wsh.Cells(1, "H") = "ans."

  Set rng = Range(wsh.Cells(2, 1), wsh.Cells(2, 1).End(xlDown))

  Set rng = rng.Offset(0, 7)

  wsh.Range("H2").FormulaR1C1 = "=(RC[-6])/(RC[-1])"
  Range("H2").AutoFill Destination:=rng

  'instead of these last two rows you can simply use this:
  'rng.FormularR1C1 = "=(RC[-6])/(RC[-1])"

End Sub

私は個人的にこのソリューションを好みます。範囲を選択せず​​、空のセルができるまでセルを処理するだけだからです。

Option Explicit

Dim i As Integer
Dim wsh As Worksheet

Sub Third_Try()

 Set wsh = Worksheets("Sheet4")

 i = 2
 While wsh.Cells(i, 1) <> ""

  wsh.Cells(i, 8).FormulaR1C1 = "=(RC[-6])/(RC[-1])"

  i = i + 1
 Wend

End Sub
2
M--