二つのワークシートの特定のセル範囲の値を乗じた結果を、別のシートの指定箇所に値表示させたいと考えております。
●WS1
|A|B|C|D|E|
|:--|:--:|--:|
||4/1|4/2|4/3|4/4|
|201801|100|200|300|
|201802||100|200|250|
|201805|100|150|175|200
●WS2
|A|B|C|D|E
|:--|:--:|--:|
||4/1|4/2|4/3|4/4|
|201801|0.1|0.15|0.02|
|201802|0.1|0.15|0.2|0.3|
|201805|0.05|0.075|0.015|0.2
●WS3(結果)
|A|B|C|D|E
|:--|:--:|--:|
||4/1|4/2|4/3|4/4|
|201801|10|30|6|
|201802||15|40|75|
|201805|5|11.25|2.625|40|
上記の用にWS1とWS2には既に値が入っております。WS3のA列に値が入って入れば、A列と1行目の値が合致するWS3の該当個所にWS1*WS2を代入したいと思います。
初めFor eachをそれぞれのシートのセル向けに入れ子にして使おうかと思ったのですが、当然ながらWS1,WS2,WS3を同時に動かさなくてはならないためうまくいきませんでした。VBAを使わなければ、IF($A2="","",VLOOKUP($A2,WS1!$B$2:$ZZ$5000,B$1,FALSE)*VLOOKUP($A2,WS2!$B$2:$ZZ$5000,B$1,FALSE))
をWS3のB2からコピペすればできるのですが、再計算に時間がかかるので値だけ貼り付けたいと思っております。
なにか良い方法はありますでしょうか。
p.s.うまくいかなかったコードを追記いたします。これだとc2にws2のセル範囲の内容を確認するのが先にきてしまうので、ダメなのは分かっているのですが・・・・
Sub calc() Dim c,c1,c2,ws,ws1,ws2 Set ws = Thisworkbook.Worksheets("WS") Set ws1 = Thisworkbook.Worksheets("WS1") Set ws2 = Thisworkbook.Worksheets("WS2") For Each c In ws.Range("B2:ZZ5000") For Each c1 In ws1.Range("B2:ZZ5000") For Each c2 In ws2.Range("B2:ZZ5000") c.Value=c1.Value*c2.Value Next Next Next End Sub
あと下記も試したのですが、当然ダメでした。
'定義は同じ ws.Range("B2:ZZ5000").value=ws1.Range("B2:ZZ5000").value*ws2.Range("B2:ZZ5000").value
回答1件
あなたの回答
tips
プレビュー