[[20150304134250]] 『数式下フィルマクロで質問です』(kou) ページの最後に飛ぶ

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

 

『数式下フィルマクロで質問です』(kou)

以下の通り数式を下にフィルしていますが、途中不規則に複数箇所「=SUM(H150:H210)」小計値があります。
ココを飛ばして以下数式をフィルすることは可能でしょうか
よろしくお願いします。
Sub test()

  Range("G5:G3100").FormulaR1C1 = "=IF(RC[6]="""","""",IF(RC[-1]=1,"""",IFERROR(ROUNDDOWN(RC[4],ROUNDUP(LOG10(RC[4]),0)*-1+4),"""")))"
  Range("H5:H3100").FormulaR1C1 = "=IF(RC[-2]=1,RC[3],IF(ISTEXT(RC[5]),RC[5],IF(RC[-1]="""","""",ROUND(RC[-2]*RC[-1],0))))"
  Range("K5:K3100").FormulaR1C1 = "=IF(RC[2]="""","""",IF(RC[4]="""",RC[2],ROUNDDOWN(RC[4],ROUNDUP(LOG10(RC[4]),0)*-1+4)))"
  Range("O5:O3100").FormulaR1C1 = "=IF(RC[-1]="""","""",ROUND(RC[-2]*RC[-1],-3))"
End Sub

< 使用 Excel:Excel2010、使用 OS:Windows7 >


説明が変でしたので
補足説明いたしますがSUM(xx:xx)は
行は、不規則です=SUM(H150:H210)だけでは
ありません。
よろしくお願いします。
(kou) 2015/03/04(水) 13:59

何故か回答付きませんが、こんな感じで出来ると思います。

 >=SUM(H150:H210)

 は、どの列にあるのか不明なので、H列にあるという前提です。

 Sub test()
    Dim dic As Object
    Dim c As Range
    Dim k

    Set dic = CreateObject("Scripting.dictionary")

    Range("G5:G3100").FormulaR1C1 = "=IF(RC[6]="""","""",IF(RC[-1]=1,"""",IFERROR(ROUNDDOWN(RC[4],ROUNDUP(LOG10(RC[4]),0)*-1+4),"""")))"
    Range("K5:K3100").FormulaR1C1 = "=IF(RC[2]="""","""",IF(RC[4]="""",RC[2],ROUNDDOWN(RC[4],ROUNDUP(LOG10(RC[4]),0)*-1+4)))"
    Range("O5:O3100").FormulaR1C1 = "=IF(RC[-1]="""","""",ROUND(RC[-2]*RC[-1],-3))"

    With Range("H5:H3100")
        For Each c In .Cells
            If c.Formula Like "=SUM(*" Then
                dic(c.Address) = c.Formula
            End If
        Next
        .FormulaR1C1 = "=IF(RC[-2]=1,RC[3],IF(ISTEXT(RC[5]),RC[5],IF(RC[-1]="""","""",ROUND(RC[-2]*RC[-1],0))))"
    End With

    For Each k In dic.keys
        With Range(k)
            .Formula = dic(k)
            .Offset(, -1).Value = ""
            .Offset(, 3).Value = ""
            .Offset(, 7).Value = ""
        End With
    Next

 End Sub

(マナ) 2015/03/04(水) 22:18


 どんくさいけど、こんな処理も。
 個人的に R1C1形式が好きじゃないのでA1形式で。

Sub test2()

    SetFormula Range("G5:G3100"), "=IF(M5="""","""",IF(F5=1,"""",IFERROR(ROUNDDOWN(K5,ROUNDUP(LOG10(K5),0)*-1+4),"""")))"
    SetFormula Range("H5:H3100"), "=IF(F5=1,K5,IF(ISTEXT(M5),M5,IF(G5="""","""",ROUND(F5*G5,0))))"
    SetFormula Range("K5:K3100"), "=IF(M5="""","""",IF(O5="""",M5,ROUNDDOWN(O5,ROUNDUP(LOG10(O5),0)*-1+4)))"
    SetFormula Range("O5:O3100"), "=IF(N5="""""","",ROUND(M5*N5,-3))"

End Sub

Private Sub SetFormula(r As Range, fm As String)

    Dim v As Variant
    Dim w As Variant
    Dim i As Long

    v = r.Formula
    r.Formula = fm
    w = r.Formula

    For i = 1 To UBound(v, 1)
        If Left(v(i, 1), 5) = "=SUM(" Then w(i, 1) = v(i, 1)
    Next

    r.Formula = w

End Sub

(β) 2015/03/05(木) 08:47


昨日コメントがなかなか付かなかったので諦めていましたが
本日確認してうれしくなりました。
マナさん βさん
どちらもすごい
出来ました。
これで見積書修正が楽になりました。
ありがとうございました。
(kou) 2015/03/05(木) 10:24

コメント返信:

[ 一覧(最新更新順) ]


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