Excel (VBA)

Excel VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(指定なし : 指定なし)
計算について
投稿日時: 23/09/09 17:11:04
投稿者: yama1006
メールを送信

初歩的な質問で恐縮です。
 
worksheetfunctionで複数のシートにまたがる数値を集計して、値を入れたいのですが、
for eachを使ってシートの数だけ値を計算します。
 
for each ws in worksheets
 
c = WorksheetFunction.VLookup(rng, ws.Range("b:g"), 3, 0) * -1
                     
ws2.Cells(s, 4) = WorksheetFunction.VLookup(rng, ws1.Range("b:y"), 18, 0) + c
 
next
 
これだと、wsの最後のシートだけ参照して合計値が計算されません。
 WorksheetFunction.VLookup(rng, ws1.Range("b:y"), 18, 0) こちらの数値の計算は一度だけでよいです。
 
説明が拙くて申し訳ありません。
つまり
各シートの合計値(c)+WorksheetFunction.VLookup(rng, ws1.Range("b:y"), 18, 0)をws2.Cells(s, 4)に返したいです。
 
何卒よろしくお願いいたします。

回答
投稿日時: 23/09/10 11:09:46
投稿者: simple

ws2.Cells(s, 4)のセルに加算していくなら、
ws2.Cells(s, 4) = ws2.Cells(s, 4) + 加算したい値
のように書きます。
これが基本です。

回答
投稿日時: 23/09/10 22:30:20
投稿者: WinArrow

累計処理の話だから
simpleさんの回答で解決すると思います。
 
ところで
>ws2.Cells(s, 4) = WorksheetFunction.VLookup(rng, ws1.Range("b:y"), 18, 0) + c
このコードの参照範囲のシートが「ws1」・・・・これ間違っていませんか?
コードを手入力していませんか?

回答
投稿日時: 23/09/10 22:48:14
投稿者: WinArrow

⇞のようなコードにすると分かりやすくなりませんか?
 

For Each Ws In Worksheets
    With WorksheetFunction
        c = .VLookup(Rng, Ws.Range("B:G"), 3, False) * -1 + _
            .VLookup(Rng, Ws.Range("B:Y"), 18, False)
    End With
    ws2.Cells(s, 4).Value = ws2.Cells(s, 4).Value + c
Next

投稿日時: 23/09/11 16:25:04
投稿者: yama1006
メールを送信

勉強になります。そうやって書くのが基本なのですね。
ありがとうございます。

投稿日時: 23/09/11 16:34:06
投稿者: yama1006
メールを送信

ご教示ありがとうございます。
 
with はworksheetfunctionも省略できるのですね。。。。始めて知りました。
 
ws1は別のシートを参照しておりますので間違ってはおりません。分かりにくくて申し訳ないです。ファイルのリンクを張るのが禁止なため、拙い説明になります。
 
計算して検証してみます。

回答
投稿日時: 23/09/11 17:02:28
投稿者: WinArrow

ws1の件
了解しました。
 
関係するコードは、掲示した方が誤解されないかも?
 
>ファイルのリンクを張るのが
 
ファイルのリンクを貼る必要はありません。
コードペインをコピペすればよいのです。

投稿日時: 23/09/13 07:24:19
投稿者: yama1006
メールを送信

WinArrow さんの引用:
ws1の件
了解しました。
 
関係するコードは、掲示した方が誤解されないかも?
 
>ファイルのリンクを張るのが
 
ファイルのリンクを貼る必要はありません。
コードペインをコピペすればよいのです。

 
承知しました。今後そのようにいたします。
足し算も正確に記載できました。withに関しては今後記載するときに省略いたします。
今後ともよろしくお願いいたします。