0

現在、コードは次のようになっています。

Sub PriceChange()
Dim ws As Worksheet
Dim i As Long

For Each ws In ThisWorkbook.Worksheets

  If Not ws.Name = "Cover" Then
  i = Range("G" & Rows.Count).End(xlUp).Row


ws.Range("K13").Formula = "=IF(AND(J13<>0,J14<>0),IFERROR(J14/LOOKUP(2,1/(J$13:J13<>0),J$13:J13)-1,""Bad""),""Bad"")"
'Set sourceRange = ws.Range("K13")
Range("K14").Select
Range("K14").Copy
    Selection.AutoFill Destination:=Range("K14:K" & Range("G65536").End(xlUp).Row)
'Set fillRange = ws.Range("K14:K" & i)
'sourceRange.AutoFill Destination:=fillRange
ws.Range("H13").Formula = "=IF(AND(G13<>0,G14<>0),IFERROR(G14/LOOKUP(2,1/(G$13:G13<>0),G$13:G13)-1,""Bad""),""Bad"")"
'    Set sourceRange = ws.Range("H13")
    Range("H14").Select
    Selection.AutoFill Destination:=Range("H14:H" & Range("G65536").End(xlUp).Row)

'Set fillRange = ws.Range("H14:H" & i)
'sourceRange.AutoFill Destination:=fillRange
    End If
    Next ws

End Sub

コメントアウトされたセクションは、それらを使用して作業するために使用されたため、残しておきました。いくつかの数式を変更する必要がありましたが、フィルダウンは一番上の行にのみ入力されます(つまり、機能しません)。全範囲(ダイナミック)を埋めてほしい。私がやったのに最も近いのは上の2行でしたが、円を描いて回り始めています。

私がどこで間違っているのかについてのアイデアはありますか?

4

1 に答える 1

0

selectパフォーマンスのために列を作成しないでください... を参照して作業を行うことができますrange object

次のことを試してください。

'--change the sheet accordingly

Sheets1(1).Range("K15").Formula = Sheets(1).Range("K14").Formula
Sheets(1).Range("K15").AutoFill Destination:=Sheets(1).Range("K15:K" & i)

以下を追加Sub routineして、シートをテストできます。おそらくあなたのに問題がありますloopOffsetResizeコードを改善するためのより良いヒントです。あなたも使用しない場合がありますWith..

Sub fillFormulasDown()
Dim wkSheet As Worksheet
Dim lRow As Long

    Application.ScreenUpdating = False
    '--if you have a password use this line
    Set wkSheet = Sheets(1)
    'wkSheet.Unprotect Password:="urpassword"
    '--otherwise use this line
    wkSheet.Unprotect

    lRow = wkSheet.Range("G" & wkSheet.Rows.Count).End(xlUp).Row
    '--test with a small formula
    wkSheet.Range("K13").Formula = "=IF(J13<>0,1,0)"

      With wkSheet.Range("K14")
        .Formula = Range("K13").Formula
        .AutoFill Destination:=.Offset(0, 0).Resize(lRow)
      End With

    wkSheet.Unprotect
    Application.ScreenUpdating = True
End Sub
于 2013-01-04T12:04:05.333 に答える