Board logo

標題: [發問] 請問不連續的儲存格做公式填滿的動作,代碼能簡化嗎 [打印本頁]

作者: freeffly    時間: 2013-6-19 15:49     標題: 請問不連續的儲存格做公式填滿的動作,代碼能簡化嗎

本帖最後由 freeffly 於 2013-6-19 15:51 編輯

1.公式不同如下如果填滿動作一樣有辦法簡化嗎
2.公式相同不連續填滿的動作一樣能簡化嗎(v7 v14 v16 v18 公式相同)
曾經天真的想用union+array的方式處理
發現不行,不知道有沒有人有好方法簡略下面的代碼
  1. Sub 銷貨公式()
  2.     Application.ScreenUpdating = False
  3.     nC = Sheets("銷貨").Range("A4").End(xlToRight).Offset(, 1).Column
  4.     nR = Sheets("銷貨").Range("A65536").End(xlUp).Row
  5.     nC1 = Sheets("銷貨").Range("A4").End(xlToRight).Offset(, 1).Column - 2
  6.     x = [iv1].End(xlToLeft).Column - 21
  7.    

  8.    
  9.     With Sheets("全部")
  10.         With .Range("V2")
  11.         .FormulaR1C1 = _
  12.         "=GETPIVOTDATA(""本幣銷貨金額"",銷貨!R3C1,""月份"",R1C)"
  13.         .AutoFill .Resize(1, x)
  14.         End With
  15.         With .Range("V9")
  16.         .FormulaR1C1 = _
  17.         "=SUMPRODUCT((銷貨!R5C" & nC & ":R" & nR & "C" & nC & "=""營業課"")*(銷貨!R4C3:R4C" & nC1 & "=R1C),銷貨!R5C3:R" & nR & "C" & nC1 & ")"
  18.         .AutoFill .Resize(1, x)
  19.         End With
  20.         
  21.         With .Range("V4")
  22.         .FormulaR1C1 = "=GETPIVOTDATA(""合計未收帳款"",帳齡!R1C1,""月份"",R1C)"
  23.         .AutoFill .Resize(1, x)
  24.         End With
  25.         With .Range("V7")
  26.         .FormulaR1C1 = "=VLOOKUP(R1C20,單頭資料!C1:C45,45,0)"
  27.         .AutoFill .Resize(1, x)
  28.         End With
  29.         
  30.         With .Range("V14")
  31.             .FormulaR1C1 = "=VLOOKUP(R1C20,單頭資料!C1:C45,45,0)"
  32.             .AutoFill .Resize(1, x)
  33.         End With
  34.         
  35.         With .Range("V16")
  36.             .FormulaR1C1 = "=R[-14]C-R[-7]C"
  37.             .AutoFill .Resize(1, x)
  38.         End With
  39.         With .Range("V18")
  40.             .FormulaR1C1 = "=R[-14]C-R[-7]C"
  41.             .AutoFill .Resize(1, x)
  42.         End With
  43.         With .Range("V21")
  44.             .FormulaR1C1 = "=VLOOKUP(R1C20,單頭資料!C1:C45,45,0)"
  45.             .AutoFill .Resize(1, x)
  46.         End With
  47. end with
  48. End Sub
複製代碼

作者: stillfish00    時間: 2013-6-19 17:05

2.公式相同不連續填滿的動作一樣能簡化嗎(v7 v14 v16 v18 公式相同) ...
freeffly 發表於 2013-6-19 15:49


v7 v14 v16 v18 公式不同阿?
你的代碼跑完結果是正確的嗎?
作者: stillfish00    時間: 2013-6-19 17:23

回復 1# freeffly
  1. Sub 銷貨公式()
  2.     Application.ScreenUpdating = False
  3.     nC = Sheets("銷貨").Range("A4").End(xlToRight).Offset(, 1).Column
  4.     nR = Sheets("銷貨").Range("A65536").End(xlUp).Row
  5.     nC1 = Sheets("銷貨").Range("A4").End(xlToRight).Offset(, 1).Column - 2
  6.     x = [iv1].End(xlToLeft).Column - 21
  7.    
  8.     With Sheets("全部")
  9.         .Range("V2").Resize(1, x).FormulaR1C1 = "=GETPIVOTDATA(""本幣銷貨金額"",銷貨!R3C1,""月份"",R1C)"
  10.         .Range("V9").Resize(1, x).FormulaR1C1 = "=SUMPRODUCT((銷貨!R5C" & nC & ":R" & nR & "C" & nC & "=""營業課"")*(銷貨!R4C3:R4C" & nC1 & "=R1C),銷貨!R5C3:R" & nR & "C" & nC1 & ")"
  11.         .Range("V4").Resize(1, x).FormulaR1C1 = "=GETPIVOTDATA(""合計未收帳款"",帳齡!R1C1,""月份"",R1C)"
  12.         
  13.         For Each area In .Range("V7,V14,V21").Areas
  14.             area.Resize(, x).FormulaR1C1 = "=VLOOKUP(R1C20,單頭資料!C1:C45,45,0)"
  15.         Next
  16.         For Each area In .Range("V16,V18").Areas
  17.             area.Resize(, x).FormulaR1C1 = "=R[-14]C-R[-7]C"
  18.         Next
  19.     End With
  20. End Sub
複製代碼

作者: freeffly    時間: 2013-6-19 17:40

回復 3# stillfish00


    先收下看看,謝謝了
   明天測試完再回覆結果
   不過用for each好像很慢
   因為我剛剛有用for each 及 for next的方式去跑別的比較起來
   for each好像曼暸些
作者: freeffly    時間: 2013-6-19 17:46

回復 3# stillfish00


    剛仔細看一下
   應該不會花很久時間
   測試結果可以
   這種解決方式不錯
   學到一種
   相當感謝




歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)