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

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

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

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

Q&A

解決済

1回答

751閲覧

Excel VBA 複数のブックからデータ(複数セルの合計、各セルの数値)を取得する

nbotnk

総合スコア9

VBA

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

0グッド

0クリップ

投稿2021/10/06 06:17

編集2021/10/06 06:25

お世話になります。
今、複数の解析ログファイルが入ったフォルダを選択すると、その中にある各ファイルの
所定のデータを取得するコードを作っています。

コードは次のような感じです。

Option

1 2Function xls_read() 3 4'---------------------- 5Dim log_r As Long, log_r1 As Long, temp As Long, temp1 As Long, fst_dstCol As Long 6'---------------------- 7 8fst_dstCol = dstCol 9 10file = Dir(FLD & "\" & "*.xlsx") 11Do While file <> "" 12 13 Cells(dstRow, dstCol) = Left(file, Len(file) - 5) 14 15 dstCol = dstCol + 1 16 temp = 0 17 18 For log_r = 24 To 25 19 temp = temp + ExecuteExcel4Macro _ 20 ("'" & FLD & "[" & file & "]シート名'!R" & log_r & "C4") 21 Next log_r 22 23 Cells(dstRow, dstCol) = temp 24 dstCol = dstCol + 1 25 26 'Repetitions x2 27 For log_r1 = 26 To 27 28 temp1 = temp1 + ExecuteExcel4Macro _ 29 ("'" & FLD & "[" & file & "]シート名'!R" & log_r1 & "C4") 30 Next log_r1 31 32 Cells(dstRow, dstCol) = temp1 33 dstCol = dstCol + 1 34 35 For log_r = 28 To 33 36 Cells(dstRow, dstCol) = ExecuteExcel4Macro _ 37 ("'" & FLD & "[" & file & "]シート名'!R" & log_r & "C4") 38 39 dstCol = dstCol + 1 40 41 Next log_r 42 43 file = Dir 44 dstRow = dstRow + 1 45 dstCol = fst_dstCol 46Loop 47 48End Function 49コード 50``` 51 5224~25行目と26~27行目はそれぞれの合計を取得し、28~33行目は、各セルの数値を取得します。 53上記のコードでは、1ファイル目は期待通りの結果が得られるのですが、2ファイル目から 5426~27行目の合計の数値を取得すべきところに、前のファイルの26~27行目の合計の数値が 55加算されてしまいます。以降のファイルも、それ以前に読取った全ファイルの同じ箇所の数値が 56加算されてしまい、どのように修正すべきか分からず困っています。 57どうぞよろしくお願いいたします。

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

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

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

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

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

y_waiwai

2021/10/06 06:19

このままではコードが読みづらいので、質問を編集し、<code>ボタンを押し、出てくる’’’の枠の中にコードを貼り付けてください
nbotnk

2021/10/06 06:26

更新しました。これで大丈夫でしょうか?
y_waiwai

2021/10/06 06:27

ありがとうございます。 助かります
guest

回答1

0

ベストアンサー

上記のコードでは、1ファイル目は期待通りの結果が得られるのですが、2ファイル目から

26~27行目の合計の数値を取得すべきところに、前のファイルの26~27行目の合計の数値が
加算されてしまいます。

加算用の変数 temp1 が初期化されていないからでは。

vba

1 temp1 = 0 '初期化 2 For log_r1 = 26 To 27 3 temp1 = temp1 + ExecuteExcel4Macro _ 4 ("'" & FLD & "[" & file & "]シート名'!R" & log_r1 & "C4") 5 Next log_r1 6 7 Cells(dstRow, dstCol) = temp1

投稿2021/10/06 06:39

hatena19

総合スコア33795

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

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

nbotnk

2021/10/06 06:56

問題解決しました。ただ、ご教示いただいた箇所だと、なぜかデータが全く取得されなかったので、 dstCol = dstCol + 1 の後にtemp1 = 0を入れると、完全に期待通りに動作しました。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問