![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?08b1c8b)
いつもお世話になっていますm(_ _)m
過去ログやVBAに関するサイトで調べたのですが
分らないので、教えて頂きたいです。
同じフォルダ内にある複数ブックの特定シートから
開かずに値を参照して、開いてるブックの「出力」という
シートに書き出しするプログラムを作成しています。
複数のブックにある特定シートは「見積」
と言う名前の物がありフォルダ内のブックの数は不特定です。
シートから参照する値はほぼ同じなのですが、
3つのフォーマット(取得する項目などが違う等)で値が
入力されているので条件分岐で処理を分ける必要があります。
別ブックを開かずに、ここまで複雑に参照する事は
可能なのでしょうか?自分なりに色々調べたのですが
FormulaR1C1で参照可能までは部分までは
調べたのですが、いざ組んでみるとエラーが出て
条件分岐にすら至らない状態です。
繰り返し処理で一つづつブックを開いて参照しながら
やるべきかと思い、Workbook Openで組んでみましたが
別のブック扱いなので、やはりエラーが出て悩んでます。
自分としては、どちらの処理でも構わないと思っています。
乱文で分りづらいかと思いますので、追ってソースなど
付け加えさせていただきたいと思います。
現文章で、なにか助言いただける方がいましたら
どうぞ宜しくお願いしますm(_ _)m
No.2ベストアンサー
- 回答日時:
例えば、同一フォルダ内にあるBook1、Book2、Book3のそれぞれSheet1のA1にある値を抜き出すとしたらこんな感じで出来ますが、、、
マクロを記述したブックを必ず上記ファイルと同じフォルダに保存してから実行します。
Sub Test()
For i = 1 To 3
Range("A" & i).Value = _
"='" & ThisWorkbook.Path & _
"\[Book" & i & ".xls]Sheet1'!A1"
Range("A" & i).Value = Range("A" & i).Value
Next i
End Sub
> やるべきかと思い、Workbook Openで組んでみましたが
> 別のブック扱いなので、やはりエラーが出て悩んでます。
> 自分としては、どちらの処理でも構わないと思っています。
Open 出来るなら、変数に代入して処理すれば良いのです。
Sub Test1()
Dim wb As Workbook
Set wb = Workbooks.Open(ThisWorkbook.Path & "\Book1.xls")
MsgBox wb.Name & "の最初のシートは" & vbCrLf & wb.Worksheets(1).Name
MsgBox wb.Name & "を閉じます", vbInformation
wb.Close
End Sub
この回答への補足
papayukaさん、説明不足な内容に
2つの方法を教えて頂きありがとうございます。
教えて頂いた方法は知らなかった訳ではないのですが
処理上の問題なのか、上手く動作してくれなかったのです。
まず以下のプログラムでユーザーフォームのリストボックスに
フォルダ内のプログラム実行ファイル以外を読み込ませています。
'***************[ 取込み ]***************
Private Sub GetSheetsButton_Click()
Dim exBookPath As String
Dim exlBook As String
Dim nCount As Integer
'■ 絶対パスの取得
exBookPath = ThisWorkbook.Path
'■ エクセルファイルのみをDir関数で取得
exlBook = Trim(Dir(exBookPath & "\" & "*.xls", 16))
If exlBook = "" Then
MsgBox "ファイルがありません!"
Exit Sub
End If
'■ リストの初期化
ChangeCsvForm.ExlFilesListBox.Clear
'■ 見積関連のエクセルブック取込み
nCount = 1
Do While exlBook <> ""
If Left(exlBook, 2) <> "出力" Then
ExlFilesListBox.AddItem exlBook
End If
exlBook = Dir
nCount = nCount + 1
Loop
End Sub
このリストカウントを元に、出力を行いたくプログラムを
以下で組みましたが上手くいきません。
根本的に何かを間違ってるとは思うのですが。。。。。
'***************[ 一括出力 ]***************
Private Sub DateOutputButton_Click()
Dim i As Integer
Dim ListTotal As Integer
Dim ChoiceBtn As String
Dim FileDate As String
Dim wb As Workbook
'■ 出力の有無を確認
ChoiceBtn = MsgBox("リスト内のファイルデータを出力します。宜しいですか?", vbYesNo)
If ChoiceBtn = 7 Then
Exit Sub
End If
ListTotal = ChangeCsvForm.ExlFilesListBox.ListCount
'■ リストにデータが無い場合の処理
If ListTotal = 0 Then
MsgBox ("リスト内にブックデータが存在しません!")
Exit Sub
End If
For i = 1 To ListTotal
i = i - 1
FileDate = ChangeCsvForm.ExlFilesListBox.List(i)
Set wb = Workbooks.Open(ThisWorkbook.Path & "\" & FileDate)
If Worksheets("見積").Range("A5") = "A" Then
Workbooks("出力").Sheets("出力用データ").Cells(i, 10).Value _
= Worksheets("見積").Range("B2").Value
ElseIf Worksheets("見積").Range("A5") = "B" Then
Workbooks("出力").Sheets("出力用データ").Cells(i, 10).Value _
= Worksheets("見積").Range("B3").Value
ElseIf Worksheets("見積").Range("A5") = "C" Then
Workbooks("出力").Sheets("出力用データ").Cells(i, 10).Value _
= Worksheets("見積").Range("B4").Value
End If
Next i
End Sub
説明用にブック・シート・セルの取得などは仮の物です。
また、テスト段階で更に複雑に処理する事になります。
このプログラムをステップで確認していくと
条件分岐の所で「インデックスが有効ではない」エラーが
発生します。とても初歩的な内容かもしれませんが。。。
このような感じで、先に進めずに困り果てている状態です。
自分なりに色々調べてみたりはしてるのですが
要求内容が複雑なので、助言頂ければ助かります。
宜しくお願いします。
No.4
- 回答日時:
#2です。
ここまで書けるなら、単なるポカでしょうか?
For i = 1 To ListTotal
i = i - 1
これだと i はどうなります?
For の変数をループの中で操作すると思わぬ落とし穴にハマります。
また、List の最初のIndexは 0 ですので ListCount値までループを繰り返す事は出来ません。
ListCountが 5 でも、List の Index は0~4です。
それに その後の IF文で Else が無い事を考えると i と Cells の変数を別け、最終行を常に見にいった方が確実に思えます。
For i = 0 To ListTotal - 1
' i = i - 1
j = Workbooks("出力.xls").Sheets("出力用データ"). _
Cells(65536, 10).End(xlUp).Offset(1, 0).Row
FileDate = ChangeCsvForm.ExlFilesListBox.List(i)
Set wb = Workbooks.Open(ThisWorkbook.Path & "\" & FileDate)
If Worksheets("見積").Range("A5") = "A" Then
Workbooks("出力.xls").Sheets("出力用データ").Cells(j, 10).Value _
= Worksheets("見積").Range("B2").Value
papayukaさん、度々の助言ありがとうございますm(_ _)m
おっしゃる通り、単なるポカみたいです(^^;
Listの最初が0なので、1 To ●● を極当たり前の
ように使っていて、リストの最初のファイル名を
取得してこないので、単純に-1でループ内に
入れてしまっていた事が、悩みの原因だったようで。。。
ご指摘ありがとうございました。
papayukaさんの参考ソースで変更したところ
上手く処理が出来るようになりましたm(_ _)m
また何かありましたら宜しくお願いします。
No.3
- 回答日時:
こんばんは。
For i = 1 To ListTotal
i = i - 1
この i=i-1 が原因です。
スタートで i = 0 になるので後のIF文
If Worksheets("見積").Range("A5") = "A" Then
Workbooks("出力").Sheets("出力用データ").Cells(i, 10).Value
の Cells(i,10) は Cells( 0, 10 ) となりエラー。
それよりも大問題があります。
i = i - 1 では永久ループになりませんか?
R = i - 1 とか別の変数で受けるべきだと思いますが。
以上です。
taocatさん、回答ありがとうございますm(_ _)m
よもや、ループカウンターに落とし穴があるとは
気づいてすらいませんでした。
まだまだ勉強不足ですね(^^;
また何かありましたら、宜しくお願いします。
No.1
- 回答日時:
開いては行けない理由とは何ですか?
開いて処理するならば、目的の処理が実現できている、と読めますが。
ScreenUpdating = False を設定すれば、画面上では
更新中画面が「見えなく」なりますのでお試しください。
終了時にはScreenUpdating = Trueを忘れずに。
この回答への補足
bin-chanさん、回答ありがとうございます。
>開いては行けない理由とは何ですか?
説明不足で申し訳ないです。
特に開いてはいけない理由はありません。
開いても開かなくてもエラーになるので
ご質問させていただきました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) マクロVBA 1シートをまとめる 閉じ方 初心者 SOS! 1 2022/06/17 14:54
- Excel(エクセル) 【困っています】VBA 追加処理の記述を教えてください。 1 2022/08/25 22:54
- Visual Basic(VBA) 別ブックの列同士の値が一致したときの処理 1 2022/09/03 08:27
- Visual Basic(VBA) 【前回の続き続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/24 20:49
- Excel(エクセル) VBAで同フォルダ内の別ブックを開かず参照して条件の一致する行の指定セルを抽出するには? 1 2022/07/21 19:29
- Visual Basic(VBA) EXCEL VBA 単語置き換え について質問です ブック名 ぶぶぶ シート名 ししし セル V3〜 3 2023/03/08 01:41
- Visual Basic(VBA) 【困っています2】VBA 追加処理の記述を教えてください。 2 2022/08/26 11:42
- Visual Basic(VBA) 特定の文字を含むシートだけマクロ処理をしたい 1 2023/05/22 01:43
- Excel(エクセル) 【マクロ】同じフォルダ内にある複数ブックから1つのブック内の1シートにデータを集めたい 6 2022/09/28 18:16
- Excel(エクセル) マクロVBA別Excelブックにデータ転記 2 2022/07/10 23:35
このQ&Aを見た人はこんなQ&Aも見ています
-
好きな人を振り向かせるためにしたこと
大好きな人と会話のきっかけを少しでも作りたい、意識してもらいたい…! 振り向かせるためにどんなことをしたことがありますか?
-
スマホに会話を聞かれているな!?と思ったことありますか?
スマートフォンで検索はしてないのに、友達と話していた製品の広告が直後に出てきたりすることってありませんか? こんな感じでスマホに会話を聞かれているかも!?と思ったエピソードってありますか?
-
あなたの「プチ贅沢」はなんですか?
お仕事や勉強などを頑張った自分へのご褒美としてやっている「プチ贅沢」があったら教えてください。
-
人生でいちばんスベッた瞬間
誰しも、笑いをとろうとして失敗した経験があると思います。
-
今から楽しみな予定はありますか?
いよいよ2025年が始まりました。皆さんには、今から楽しみにしている予定はありますか?
-
VBA EXCEL 開かずにデータ操作
その他(Microsoft Office)
-
WorkBooksをオープンさせずにシートにコピーしたい【EXCEL VBA】
Excel(エクセル)
-
VBA 別ブックからコピペしたいのですが、軽くしたいです
Visual Basic(VBA)
-
-
4
参照先のブックを開かずに内容をコピーしたい
Excel(エクセル)
-
5
保存ブックを開かずコピーペーストするマクロ作成について
Excel(エクセル)
-
6
VBAでブックを非表示で開いて処理して閉じる方法
Excel(エクセル)
-
7
ファイルを閉じたままの外部参照で最終行の行数取得
Visual Basic(VBA)
-
8
VBA 別ブックからの転記の高速化について VBA 別ブックからの転記の高速化についてご教授下さい。
Visual Basic(VBA)
-
9
別ファイルを開かず、INDIRECT関数を使用せずに、別ファイルのデータを求めたい
Excel(エクセル)
-
10
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
-
11
ブックを開かずに、フォルダ内にある複数ブックの、特定セルの値を抽出した
Excel(エクセル)
-
12
実行時エラー 438になった時の対処法を教えて下さい。
Visual Basic(VBA)
-
13
リストボックスの項目に、他のブックのセルの値を設定するには?
Access(アクセス)
-
14
Excelで質問です。ListBoxの項目を別bookから読込むには
その他(Microsoft Office)
-
15
ファイルを開かずにマクロを実行
Excel(エクセル)
-
16
Excel VBA別ブックのシートをコピーするには
Visual Basic(VBA)
-
17
数式による空白を無視して最終行を取得するマクロ
Excel(エクセル)
-
18
エクセルで空白セルを含む列の最終行の値を取得する式を教えてください
Excel(エクセル)
-
19
ユーザーフォームを表示中にシートの操作をさせるには
Excel(エクセル)
-
20
【VBAユーザーフォームで閉じるボタンを表示したくない】
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・一番好きなみそ汁の具材は?
- ・泣きながら食べたご飯の思い出
- ・「これはヤバかったな」という遅刻エピソード
- ・初めて自分の家と他人の家が違う、と意識した時
- ・いちばん失敗した人決定戦
- ・思い出すきっかけは 音楽?におい?景色?
- ・あなたなりのストレス発散方法を教えてください!
- ・もし10億円当たったら何に使いますか?
- ・何回やってもうまくいかないことは?
- ・今年はじめたいことは?
- ・あなたの人生で一番ピンチに陥った瞬間は?
- ・初めて見た映画を教えてください!
- ・今の日本に期待することはなんですか?
- ・集中するためにやっていること
- ・テレビやラジオに出たことがある人、いますか?
- ・【お題】斜め上を行くスキー場にありがちなこと
- ・人生でいちばんスベッた瞬間
- ・コーピングについて教えてください
- ・あなたの「プチ贅沢」はなんですか?
- ・コンビニでおにぎりを買うときのスタメンはどの具?
- ・おすすめの美術館・博物館、教えてください!
- ・【お題】大変な警告
- ・洋服何着持ってますか?
- ・みんなの【マイ・ベスト積読2024】を教えてください。
- ・「これいらなくない?」という慣習、教えてください
- ・今から楽しみな予定はありますか?
- ・AIツールの活用方法を教えて
- ・最強の防寒、あったか術を教えてください!
- ・歳とったな〜〜と思ったことは?
- ・モテ期を経験した方いらっしゃいますか?
- ・好きな人を振り向かせるためにしたこと
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・これまでで一番「情けなかったとき」はいつですか?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
EXCEL VBA シート貼り付け
-
エクセルVBAが途中で止まります
-
VBA シート名が一致した場合の...
-
別ブックをダイアログボックス...
-
Excel にて、 リストボックスの...
-
エクセルVBAでテキストボックス...
-
VBAで別のブックにシートをコピ...
-
EXCEL VBA 単語置き換え につい...
-
ワイルドカード「*」を使うとう...
-
VBA コードを実行すると画面が...
-
特定シートを別ブックで所定フ...
-
エクセルのマクロについて教え...
-
Excelマクロ 該当する値の行番...
-
VBA 別ブックからコピペしたい...
-
VBA 実行時エラー 2147024893
-
Excel マクロ ファイルと同じシ...
-
Excel2007VBAファイルの表示に...
-
エクセルマクロで任意のファイ...
-
VBの処理結果をEXCELシ...
-
マクロで最終行を取得したい
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
別ブックをダイアログボックス...
-
VBA シートをコピーする際に Co...
-
VBA 別ブックからコピペしたい...
-
エクセルVBAが途中で止まります
-
VBAで別ブックのシートを指定し...
-
ワイルドカード「*」を使うとう...
-
Excelマクロ 該当する値の行番...
-
VBAで別のブックにシートをコピ...
-
【Excel VBA】書き込み先ブック...
-
[Excel]ADODBでNull変換されて...
-
【ExcelVBA】zip圧縮されたCSV...
-
VBA コードを実行すると画面が...
-
【ExcelVBA】インデックスが有...
-
VBS Bookを閉じるコード
-
ユーザーフォームの切り替えに...
-
vbaでvbaProjectのパスワード解...
-
【VBA】全シートの計算式を全て...
-
Excel にて、 リストボックスの...
-
フォルダ内の全てのファイルに...
-
【マクロ】違うフォルダにある...
おすすめ情報