• ベストアンサー

vbaでセルとセルの積を求める方法

添付ファイルにある様なI列:原価xJ列:販売数量の積をK列:原価計表示させる場合ですが K列に関数(ixJ)を入れれば求められるのはわかりますが、行数がどんどん増えて行く為、K列に関数を入れておくと重くなるので出来ればvbaでいっきにI列とJ列の積をK列に出力したいのですがvbaでのワークシート関数の書き方がよくわからず困っております。 どなたか御教授願います。  ちなみに原価列、販売数量列の列数は毎日増え続けていきます。(同じペースで)

質問者が選んだベストアンサー

  • ベストアンサー
  • bin-chan
  • ベストアンサー率33% (1403/4213)
回答No.2

「マクロの記録」を使って以下の繰作をコード化して下さい。 1)列Iの値全部をコピーする。(セルi2を選びctrl+Shift+↓キー押して、ctrl+Cキー押下) 2)列Kにペーストする。(セルk2を選び、ctrl+Vキー押下) 3)列Jの値全部をコピーする。(セルj2を選びctrl+Shift+↓キー押 4)列Kに、「形式を選択して貼り付け」する。(セルk2を選び、ctrl+Alt+Vキー押下) 5)値、演算(乗算)選んでOKクリック。 式を設定してもたいしたことは無いと思いますけどね。

gxtsf295
質問者

お礼

貼り付けの際の演算とはこんな便利な機能だったのですね。恥ずかしながら知りませんでした。 この方法であれば面倒な記述はいらず便利ですね。 どうもありがとうございました。

その他の回答 (3)

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.4

No.3です。 >コピペの場合、何かいい方法がありますでしょうか? とありましたので・・・ 今回もVBAになってしまいますが、 前回同様 画面左下の操作したいSheet見出し上で右クリック → コードの表示 → VBE画面 → 前回のコードがすでに記載されていると思いますので、 そのコードの下に↓のコードをコピー&ペーストしマクロを実行してみてください。 (Alt+F8キー → マクロ → マクロ実行です) Sub 計算() 'この行から Dim endRow As Long endRow = Cells(Rows.Count, "I").End(xlUp).Row With Range(Cells(2, "K"), Cells(endRow, "K")) .Formula = "=I2*J2" .Value = .Value End With End Sub 'この行まで ※ 数式そのものはエラー処理していませんので、セル内に文字列・空白セル等があれば エラーになったり、「0」が表示されたりします。 ※ 関数でないのでコピー&ペーストした後にご自身でマクロを実行する必要があります。m(_ _)m

gxtsf295
質問者

お礼

トライしてみます。 どうもありがとうございました。!

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.3

こんばんは! I・J列はそれぞれ手入力するとしての一例です。 画面左下の操作したいSheet見出し上で右クリック → コードの表示 → VBE画面に ↓のコードをコピー&ペーストしてI・J列にデータを入力してみてください。 Private Sub Worksheet_Change(ByVal Target As Range) 'この行から Dim k As Long If Intersect(Target, Range("I:J")) Is Nothing Or Target.Count <> 1 Then Exit Sub k = Target.Row If WorksheetFunction.Count(Range(Cells(k, "I"), Cells(k, "J"))) = 2 Then Cells(k, "K") = Cells(k, "I") * Cells(k, "J") End If End Sub 'この行まで ※ 上記コードは1セルずつ入力する!という前提ですので、 I・J列データをどこからかまとめてコピー&ペーストする場合は全く反応しません。m(_ _)m

gxtsf295
質問者

お礼

お礼が遅くなりまして申し訳ございません。 御教授ありがとうございます。 今回の場合、手入力の部分とコピペの部分がありまして、手入力の部分は上記でうまく良くと思いますが、コピペの場合、何かいい方法がありますでしょうか? 何か良い案がありましたら御教授よろしくお願いします。

  • tamiemon96
  • ベストアンサー率49% (658/1341)
回答No.1

「マクロの記録」 で対応できそうですね。 【手順】 (1) ステータスバーの設定で「マクロの記録」を有効にします。   http://www4.synapse.ne.jp/yone/excel2010/excel2010_macro_kiroku.html (2) 表の右欄外に、 =i * j の式を入力する    1欄だけ式を入力し、列全体にコピーすれば全行にコピーできますね (3) 数式が入った列を、K列に値のみコピーする。 (4) 余計な式を入れた列を削除する (5) マクロの記録を閉じる (6) ボタンを配置し、ボタンにマクロを登録しておく 要は、一度別の列で計算して、答えだけ張り付けるということです。 いかがしょうか。

gxtsf295
質問者

お礼

なるほど他の場所に式を入れて消すという手もいいですね。 早速試してみます。 ご回答ありがとうございました。

関連するQ&A

専門家に質問してみよう