ある特定の列3000行まで、自動でセルに式を入力したい。
【Aシート】
3 [論理棚卸] [実棚卸数] [棚卸差異] [単価] [消費額]
4 15 15 =IF(A4="","",B4-A4) 50 =IF(B4="","",C4*D4)
5 80 40 =IF(A5="","",B5-A5) 30 =IF(B5="","",C5*D5)
6 25 24 =IF(A6="","",B6-A6) 20 =IF(B6="","",C6*D6)
式を自動で入力したいのは、[棚卸差異]列と[消費額]列になります。
どうか宜しくお願いします。
ものすごくアナログちっくなやり方ですが。
Option Explicit Sub test() Dim L As Long For L = 4 To 3000 Range("C" & L).Formula = "=IF(A" & L & "="""","""",B" & L & "-A" & L & ")" Range("E" & L).Formula = "=IF(B" & L & "="""","""",C" & L & "*D" & L & ")" Next End Sub
実棚卸数の列と棚卸差異の列をオートフィルで3000行までドラッグするのが簡単です。
一応マクロでやるとすると、それぞれC列とE列として、4行目の数式を書いて
Sub Macro() Range("C4").AutoFill Destination:=Range("C4:C3000"), Type:=xlFillDefault Range("E4").AutoFill Destination:=Range("E4:E3000"), Type:=xlFillDefault End Sub
が3000行までオートフィルするマクロとなります。
回答ありがとうございました。
ものすごくアナログちっくなやり方ですが。
Option Explicit Sub test() Dim L As Long For L = 4 To 3000 Range("C" & L).Formula = "=IF(A" & L & "="""","""",B" & L & "-A" & L & ")" Range("E" & L).Formula = "=IF(B" & L & "="""","""",C" & L & "*D" & L & ")" Next End Sub
回答ありがとうございました。
どんぴしゃでした。
棚卸の原価計算の簡略化をしたいとお見受けします。
もし、実棚・単価が入っているようでしたら
棚卸差異と消費額の式を最初の1つ(4行目)のみ入力し
http://pc.nikkeibp.co.jp/article/technique/20100805/1026770/
この技を使うことで全自動で入力されます。
このサイトの説明では「列全体」となっていますが
実際は隣のセルに数字の入っている行まで適応されます。
またEXCEL2010の例になっていますが、2003以降であればどれでも同じく使えます。
また、右クリックをしながらドラッグをすることで、
「書式のみコピー」や「連続した数字の入力」など、小技がいろいろ使えますので
一度お試しください。
何らかの事情でマクロにこだわっておられる場合は申し訳ありません。
回答ありがとうございました。
マクロでのやりかたもいろいろありますが例をいくつか作ってみましたので見比べてみてください
(1)少しだけ応用の利く方法
"が4つ並んでいるのは記入ミスではありません
"を文字列として扱わせるためには""と2つ続けて書く必要があるため、"を二つ続けたい場合には""と""で""""と4つ連なることになるのです
Sub Macro1() Dim r As Long r = 3000: '最終行を指定する With Range("C4") .Formula = "=IF(A4="""","""",B4-A4)" .AutoFill Destination:=Range("C4:C" & r), Type:=xlFillDefault End With With Range("E4") .Formula = "=IF(B4="""","""",C4*D4)" .AutoFill Destination:=Range("E4:E" & r), Type:=xlFillDefault End With End Sub
(2)ちょっと手抜きな方法
後でメンテナンスが面倒になるかもしれませんが今回限りならこれでも十分
Sub Macro2() With Range("C4") .Formula = "=IF(A4="""","""",B4-A4)" .AutoFill Destination:=Range("C4:C3000"), Type:=xlFillDefault End With With Range("E4") .Formula = "=IF(B4="""","""",C4*D4)" .AutoFill Destination:=Range("E4:E3000"), Type:=xlFillDefault End With End Sub
(3)もっと手抜きな方法
コピーではなく直接的に式を書き込んでしまう方法
Sub Macro3() Range("C4:C3000").Formula = "=IF(A4="""","""",B4-A4)" Range("E4:E3000").Formula = "=IF(B4="""","""",C4*D4)" End Sub
これが正解でしょう。
Sub 数式入力() With Worksheets("Aシート") .Range("C4:C3000").FormulaR1C1 = "=IF(RC[-2]="""","""",RC[-1]-RC[-2])" .Range("E4:E3000").FormulaR1C1 = "=IF(RC[-3]="""","""",RC[-2]*RC[-1])" End With End Sub
シート名は適宜変更してください。
回答ありがとうございました。
どんぴしゃでした。