Excelのマクロに関する質問です。良い回答は、300ポイント差し上げます。

ある特定の列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)

式を自動で入力したいのは、[棚卸差異]列と[消費額]列になります。
どうか宜しくお願いします。

回答の条件
  • 1人5回まで
  • 13歳以上
  • 登録:2011/01/11 12:50:15
  • 終了:2011/01/11 13:29:56

ベストアンサー

id:doxas No.2

doxas回答回数13ベストアンサー獲得回数42011/01/11 13:10:54

ポイント300pt

ものすごくアナログちっくなやり方ですが。

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
id:anim130M

回答ありがとうございました。

どんぴしゃでした。

2011/01/11 13:28:59

その他の回答(4件)

id:SALINGER No.1

SALINGER回答回数3454ベストアンサー獲得回数9692011/01/11 13:08:45

ポイント10pt

実棚卸数の列と棚卸差異の列をオートフィルで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行までオートフィルするマクロとなります。

id:anim130M

回答ありがとうございました。

2011/01/11 13:28:57
id:doxas No.2

doxas回答回数13ベストアンサー獲得回数42011/01/11 13:10:54ここでベストアンサー

ポイント300pt

ものすごくアナログちっくなやり方ですが。

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
id:anim130M

回答ありがとうございました。

どんぴしゃでした。

2011/01/11 13:28:59
id:DOK No.3

DOK回答回数360ベストアンサー獲得回数142011/01/11 13:11:31

ポイント10pt

棚卸の原価計算の簡略化をしたいとお見受けします。

もし、実棚・単価が入っているようでしたら

棚卸差異と消費額の式を最初の1つ(4行目)のみ入力し

http://pc.nikkeibp.co.jp/article/technique/20100805/1026770/

この技を使うことで全自動で入力されます。

このサイトの説明では「列全体」となっていますが

実際は隣のセルに数字の入っている行まで適応されます。

またEXCEL2010の例になっていますが、2003以降であればどれでも同じく使えます。

また、右クリックをしながらドラッグをすることで、

「書式のみコピー」や「連続した数字の入力」など、小技がいろいろ使えますので

一度お試しください。

何らかの事情でマクロにこだわっておられる場合は申し訳ありません。

id:anim130M

回答ありがとうございました。

2011/01/11 13:29:10
id:windofjuly No.4

うぃんど回答回数2625ベストアンサー獲得回数11492011/01/11 13:17:32

ポイント10pt

マクロでのやりかたもいろいろありますが例をいくつか作ってみましたので見比べてみてください

 

(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
id:ootatmt No.5

ootatmt回答回数1307ベストアンサー獲得回数652011/01/11 13:24:13

ポイント10pt

これが正解でしょう。

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

シート名は適宜変更してください。

  • id:airplant
    各行での計算を単純にコピーするので、Excelの簡単な操作で十分にできます。マクロにする必要性は薄いと思われます。
    行数やセルの場所が変わることを考えると、都度人手で行うのが返って便利と予想されます。


    1.4行目にそのまま数式を入れる。棚卸差異C4に「=IF(A4="","",B4-A4)」、消費額E4に「=IF(B4="","",C4*D4)」
    2.ウィンドウを分割し、下側ウィンドウのアクティブセルC3000へ移動(メニューの編集→ジャンプで簡単に移動できる)。A列に数字がある場合は、[Endキー][↓]でも一気に飛ばせられます。
    3.C4:C3000を選択し、Ctrl+Dを押せば、全部の行に式が入ります。同様にE4:E3000を選択し、Ctrl+Dを押せば全部の行に式が入ります。
  • id:windofjuly
    うぃんど 2011/01/11 13:38:49
    丁寧に書いてて出遅れた(爆)
    悔しいので自分でオープン
  • id:SALINGER
    質問と少し離れますが、誰も指摘しないので。
    この数式はちょっとおかしいように思います。
    A列とB列の空白を考慮している式なのに、A列が空白でB列が数値の時にエラーとなります。
    これを避け空白を使う場合は、消費額の数式(E4)を
    =IF(A4="","",IF(B4="","",C4*D4))
    にするか、
    =IF(OR(A4="",B4=""),"",C4*D4)
    にしないといけません。
  • id:zmhyzbiccx
    >丁寧に書いてて出遅れた(爆)
    >悔しいので自分でオープン
     
    コメント荒らしが現れた!!
  • id:ootatmt
    ベストアンサーの 2 は一番やってはいけない書き方だと思う。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません