質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.44%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Visual Basic 6.0

Microsoft Visual Basic 6.0(VB6)とはCOMプログラミングのためにMicrosoftが提供したプログラミング言語とintegrated develpment enviornment(IDE)のことです。

Q&A

解決済

2回答

986閲覧

VBAで指定範囲セルの乗算

Kinsho

総合スコア18

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Visual Basic 6.0

Microsoft Visual Basic 6.0(VB6)とはCOMプログラミングのためにMicrosoftが提供したプログラミング言語とintegrated develpment enviornment(IDE)のことです。

0グッド

0クリップ

投稿2023/05/01 08:43

実現したいこと

VBAで指定範囲セルの乗算

前提

excelのVBAでforループの中で7行目以降のJG列からJI列の値を「P列からR列の値にJ列の値を掛けた値」になるようにしたいです。
最初に作ったののは下のコード①なのですが、これでは動かず、②にしても動かず、そのままコピーするだけの③なら動きました。
また、似たような質問のhttps://teratail.com/questions/114350 を参考にしてevaluateを使ってみましたが結局実装できませんでした。

他の言語ならchatGPT等に聞けば何とかなったりするのですが、VBAに関しては軒並み的外れな答えしか返ってこなくて困っているので、原因と正しい書き方についてご回答宜しくお願い致します。

発生している問題・エラーメッセージ

実行時エラー13 型が一致しません

該当のソースコード

VBA

1①Worksheets("MP").Range("JG7:JI7").Offset(i, 0).Value = Worksheets("MP").Cells(7 + i, 9) * Worksheets("MP").Range("P7:R7").Offset(i, 0).Value 2②Worksheets("MP").Range("JG7:JI7").Offset(i, 0).Value = 2 * Worksheets("MP").Range("P7:R7").Offset(i, 0).Value 3③Worksheets("MP").Range("JG7:JI7").Offset(i, 0).Value = Worksheets("MP").Range("P7:R7").Offset(i, 0).Value

補足情報(FW/ツールのバージョンなど)

office16, office365

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

Evaluateを使うなら下記になりますね。

vba

1With Worksheets("MP") 2 .Range("JG7:JI7").Offset(i, 0).Value =.Evaluate(.Cells(7 + i, 9).Address & "*" & .("P7:R7").Offset(i, 0).Address) 3End With

さらにいえば、Evaluateは矩形範囲の乗算もできますので、Forループする必要もないですね。

例えば10行分の範囲で乗算したいなら、

vba

1With Worksheets("MP") 2 .Range("JG7:JI7").Resize(10).Value =.Evaluate(.Cells(7, 9).Resize(10).Address & "*" & .("P7:R7").Resize(10).Address) 3End With

投稿2023/05/01 10:13

編集2023/05/01 10:56
hatena19

総合スコア33856

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Kinsho

2023/05/01 10:43

ありがとうございます。 こちらの方がシンプルですね。 ご回答いただく前に他の投稿をベストアンサーにしてしまいましたが、こちらの方が想定していたものに近いですし、見やすくて好きです。
guest

0

ベストアンサー

以下のようにしてください。
iのループの上限は便宜上10にしています。あなたが適切に変えてください。

VBA

1Public Sub 掛け算MP() 2 Dim i As Long 3 Dim j As Long 4 For i = 0 To 10 5 For j = 0 To 2 6 Worksheets("MP").Range("JG7").Offset(i, j).Value = Worksheets("MP").Range("P7").Offset(i, j).Value * Worksheets("MP").Range("J7").Offset(i, 0).Value 7 Next 8 Next 9End Sub 10

投稿2023/05/01 09:06

tatsu99

総合スコア5487

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Kinsho

2023/05/01 09:53

やはり行列と定数の掛け算で方が合わない以上分解してforループで書くしかなさそうですね。 ご回答ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.44%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問