[[20190802153205]] 『上の値をコピー』(かつかつ) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『上の値をコピー』(かつかつ)

あまり詳しくないので
教えてください。
0.1以下だったら上の値をコピーするマクロを作りました。
今はD列だけですがB列H列J列など複数行で同じ作業をしたい。
どうして応用すればいいでしょうか?
処理に時間がかからないようにしたいです。

Sub Macro1()

 Dim i As Long
Application.ScreenUpdating = False

With ThisWorkbook.Sheets("Sheet1")

 For i = 2 To .Cells(.Rows.Count, "D").End(xlUp).Row
 If .Cells(i, "D") <= 0.1 Then
 .Cells(i, "D") = .Cells(i - 1, "D").Value
  End If
 Next i
 End With

< 使用 Excel:unknown、使用 OS:unknown >


任意の列を、For Eachと配列を使って、やってみてはどうですか。
処理時間は、データ量と人それぞれの感覚なので、どの程度で
かからないか分かりませんが、配列を使えば速くなると思います。
(tkit) 2019/08/02(金) 17:00

[[20190731144159]] 『0.1以下を0に』(初心者)
↑と同じ方だったりしませんか?

同じ方であれば、前回のトピックを読み直して、違う方であればリンク先を見ていただいてから読み進めたほうがわかりやすいかと思いますが、要は、
・条件に合致するか判定する必要がないセルまで処理対象にしないこと
・セルへの書き込みは極力回数を減らすこと
が時間短縮のポイントになろうかとおもいます。

この点で、前半部分については、先のリンク先が参考になると思われます。
(後半は、一気に処理する方法は思い浮かびませんでした)

    Sub サンプル弐_改()
        Dim tmp As Range, buf As Range, MyRNG As Range

        On Error Resume Next
        Set tmp = Range("A1,D1,G1,I1").EntireColumn.SpecialCells(xlCellTypeConstants, xlNumbers)
        On Error GoTo 0

        If tmp Is Nothing Then Exit Sub        

        '該当するセルを探すループ
        For Each buf In tmp
            If buf.Value <= 0.1 Then
                If MyRNG Is Nothing Then
                    Set MyRNG = tmp
                Else
                    Set MyRNG = Union(MyRNG, tmp)
                End If
            End If
        Next buf

        MyRNG.Offset(1).Value = MyRNG.Value

        '実際に値を書き込むループ
        If Not MyRNG Is Nothing Then
            For Each tmp In MyRNG
                tmp.Offset(1).Value = tmp.Value
            Next
        End If

    End Sub

(もこな2) 2019/08/02(金) 17:59


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.