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

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

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

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

Q&A

解決済

2回答

3657閲覧

急ぎです、助けてください...エクセルVBA 数十個のブックのセルの値を抽出、別ブックに値を参照

alice

総合スコア34

VBA

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

0グッド

0クリップ

投稿2017/02/02 04:27

編集2017/02/02 04:50

以下のコードをたたいたのですがあまりうまくいきません....
ひとつのフォルダ配下に、エクセルファイル50個があり、それらの特定の場所にあるセルを別のブックに値を入れたく思っています。
以下のコードをコピペしつつ書いたのですが、うまくいかず....(エラーは出ないのですが何も変化が起こらない)
ご教示お願いいたします...

言葉が足らず、すみません。

iiiフォルダ配下にあるエクセルファイル”xlsx”が50個あり、それらには3シート、B9:F11の範囲でそれぞれ必要な値が書き込まれています。(全て同じフォーマット)

その値を取得し、いま開いているワークブックのsheet1にそれら150個あるデータ範囲を参照したく思っています

※すみません、myDirの変数は無意味なコードでした...

Option Explicit
Sub try_1()
Const path = "C:\Users\PC\Desktop\iii"
Const sheet1 = "Page 1"
Const Sheet2 = "Page 2"
Const sheet3 = "Page 3"
Dim fname As String
Dim ws As Worksheet
Dim i As Long

'画面更新停止。開くところを見せない。 Application.ScreenUpdating = False Set ws = ThisWorkbook.Worksheets("Sheet1") i = 1 'Dir関数を使って該当フォルダをLoop fname = Dir(path & "*.xlsx") Do Until Len(fname) = 0 If fname <> ThisWorkbook.Name Then With Workbooks.Open(Filename:=path & fname, _ UpdateLinks:=0, _ ReadOnly:=True) With .Sheets(sheet1) ws.Cells(2, i + 1).Value = .Range("B9:F11").Value End With With .Sheets(Sheet2) ws.Cells(8, i + 1).Value = .Range("B9:F11").Value End With With .Sheets(sheet3) ws.Cells(14, i + 1).Value = .Range("B9:F11").Value End With .Close savechanges:=False End With '次の書き出し位置 i = i + 2 End If fname = Dir() Loop Set ws = Nothing Application.ScreenUpdating = True

End Sub

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

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

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

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

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

Y.H.

2017/02/02 04:32 編集

「うまくいかず」とはどういう動作を想定して実際どういう結果になりそう程度どう異なったのかを質問に記載ください。でないと何が問題なのかがわかりません。
guest

回答2

0

ベストアンサー

・Const path = "C:Users\PC\Desktop\iii"
一番後ろに\が必要。

・With .Sheets(sheet1) ⇒ With .Sheets("sheet1")
With .Sheets(sheet2) ⇒ With .Sheets("sheet2")
With .Sheets(sheet3) ⇒ With .Sheets("sheet3")
括弧内のSheet○○のところは、""で括らないと、変数として認識されてしまいます。

・ws.Cells(2, i + 1).Value = .Range("B9:F11").Value
左辺は1つのセル、右辺は一つのセルのため、
思った値がセットされないのではないのでしょうか。
(この場合、「ws.Cells(2, i + 1).Value = .Range("B9").Value」と同義になると思います)

投稿2017/02/02 04:54

ABCDEEFG

総合スコア20

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

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

Y.H.

2017/02/02 04:57

「括弧内のSheet○○のところは」 Const定義されていますよ。
ABCDEEFG

2017/02/02 06:10

大変失礼しました。仰るとおりでした。 あと、「右辺は一つのセルのため、 ・・・」 ⇒「右辺は複数のセルのため、・・・」の間違いでした。すみません。
alice

2017/02/03 14:14

返事が遅くなり、すみません。 迅速に回答下さり有難うございました。 あの後、コードを修正したのですが、エラーはなくともファイルがファイルに全く変化が怒らない状態が続き、最終的に手作業でやりました....精進します...
guest

0

Const path = "C:\Users\PC\Desktop\iii"

pathに\が足らないと思います

投稿2017/02/02 04:33

date

総合スコア1820

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

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

alice

2017/02/03 14:14

迅速に対応くださり、ありがとうございました。 今回は手作業でやりました、勉強して精進したいと思います...。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問