[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『マクロ 最終行を取得した割り算と掛け算について』(初心者)
マクロの初心者です。下記についてご確認頂きたいです。
A列の最終行数に応じて、E列へ売上金額が出力できるようにしたいです。
A列:商品コード B列:受注金額 C列:総数量 D列:個別数量 E列:売上金額
と各項目があり、下記の式で算出するようにしてます。
この式のマクロを宜しくお願いします。
E列.売上金額=B列.受注金額 ÷ C列.総数量 × D列.個別数量
< 使用 Excel:Excel2016、使用 OS:Windows10 >
マクロ 最終行 取得 で過去ログ検索してみましたか? (MK) 2022/09/30(金) 16:41
見よう見まねで似たようなものを下記でやってみたのですが、
エラーとなってしまいました。
ご確認宜しくお願いします。
Dim LastRow As Long
Dim n As Long LastRow = Cells(Rows.Count, "A").End(xlUp).Row Worksheets(1).Select For n = 2 To LastRow Range("E" & n).Formula = "="B & n & "/C" & n*D" & n Next n (初心者) 2022/09/30(金) 16:53
>A列の最終行数に応じて
A列の最終行の行番号を数式に組み込むのかと 思ったら違うみたいですね。
変数で取得した行番号をA1形式の数式に組み込む場合は
"A" & myrow ="=A" & myrow
のようにします。
(MK) 2022/09/30(金) 17:20
sub 計算
with worksheet(1) dim n as long,B列 as long,C列 as long,D列 as long,E列 as long for n = 2 to .cells(.rows.count,1).end(xlup).row B列 = .cells(r,2).value C列 = .cells(r,3).value D列 = .cells(r,4).value E列 = B列 / C列 * D列 .cells(r,5).value = E列 next n end with
end sub
(ngk) 2022/09/30(金) 17:32
Range("E" & n).Value = "=B" & n & "/C" & n & "*D" & n
こんな風にしてみたり
Sub Sample() Range("E2").Value = "=B2/C2*D2" Range("E2", Cells(Rows.Count, "A").End(xlUp).Offset(, 4)).FillDown End Sub
こんな風にしてみたり。
(下手の横好き) 2022/09/30(金) 17:34
Dim lstrw As Long lstrw = Cells(Rows.Count, "A").End(xlUp).Row Range("E1:E" & lstrw).FormulaR1C1 = "=RC[-3]/RC[-2]*RC[-1]" (MK) 2022/09/30(金) 18:09
>Range("E1:E" & lstrw).FormulaR1C1 = "=RC[-3]/RC[-2]*RC[-1]"
2行目からでした。
Range("E2:E" & lstrw).FormulaR1C1 = "=RC[-3]/RC[-2]*RC[-1]"
(MK) 2022/09/30(金) 18:10
2022/09/30(金) 18:09のコメントの冒頭に↓を入れるのを忘れてました。
R1C1形式の数式を使った方法です。 (MK) 2022/09/30(金) 18:13
ご返答頂き誠にありがとうございます。
どのコードも思い通りに展開致しました。
感謝申し上げます。
本当にありがとうございました。
ngk様
ご返信ありがとうございます。
下記1行目のWorksheet箇所が青くなり、コンパイルエラーが表示され「SubまたはFunctionが定義されていません」となりました。
sub 計算
with worksheet(1) dim n as long,B列 as long,C列 as long,D列 as long,E列 as long for n = 2 to .cells(.rows.count,1).end(xlup).row B列 = .cells(r,2).value C列 = .cells(r,3).value D列 = .cells(r,4).value E列 = B列 / C列 * D列 .cells(r,5).value = E列 next n end with end sub
(初心者) 2022/09/30(金) 19:23
誤 with worksheet(1) 正 with worksheets(1)
とりあえず↑ですかね。
なお、所々小文字になっているので、手打ちしていると思いますが、極力エディタから、そのまま貼り付けできませんか?
実際にミスしているのか、投稿時のタイプミスなのか区別しにくいです。
(もこな2) 2022/09/30(金) 19:50
また、整理すると↓のようになるわけですが
Sub 計算_整理() Dim n As Long With Worksheets(1) For n = 2 To .Cells(.Rows.Count, "A").End(xlUp).Row .Cells(n, "E").Value = .Cells(n, "B").Value / .Cells(n, "C").Value * D列.Cells(n, "D").Value Next n End With End Sub
データ数にもよりますが、1セルずつ処理するよりは、数式で一気に計算した方が速度的に有利だとおもいます。
(数式が残るのがいやなら一工夫するだけで済みます。)
Sub さんぷる() Dim 最終行 As Long
With Worksheets(1) 最終行 = .Cells(.Rows.Count, "A").End(xlUp).Row If 最終行 >= 2 Then With .Range("E2:E" & 最終行) .Formula = "=B2/C2*D2" .Value = .Value End With End If End With End Sub
(もこな2) 2022/09/30(金) 20:23
仰る通りにsを付けr→nへ変更すると展開しました!
また新たにご提示頂きましたコードも全て思い通りでした。
色々なやり方があるんですね。本当に凄いです。
ありがとうございました。
(初心者) 2022/09/30(金) 20:31
※ステップ実行という言葉を聞いたことが無ければ↓を読んでみてください。
【ステップ実行】 https://www.239-programing.com/excel-vba/basic/basic023.html http://plus1excel.web.fc2.com/learning/l301/t405.html
【ブレークポイント】 https://www.239-programing.com/excel-vba/basic/basic022.html https://www.tipsfound.com/vba/01010
また↓も覚えておいて損はないでしょう。
【イミディエイトウィンドウ】 https://www.239-programing.com/excel-vba/basic/basic024.html https://excel-ubara.com/excelvba1/EXCELVBA486.html
【ローカルウィンドウ】 https://excel-ubara.com/excelvba4/EXCEL266.html http://excelvba.pc-users.net/fol8/8_2.html
また、お勧めするわけではありませんが、最終行が必ず2行目以降になることが担保されているなら↓のようにしてもよいとおもいます。
Sub さんぷる2() With Worksheets(1).Range("E2:E" & Worksheets(1).Cells(Rows.Count, "A").End(xlUp).Row) .Formula = "=B2/C2*D2" .Value = .Value End With End Sub
(もこな2) 2022/10/01(土) 09:37
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.