下記、VBAソースの一部ですが、やりたい処理は、
本体のマクロブックのSheet1のA2セルにフォルダのパスが、
C2、D2セルにセル位置が記載されています。
そのフォルダ内のすべてのエクセルを順番に開いて指定シートの指定範囲をコピーしたいのです。
各ブックのシート名は異なるのですが、VBAエディタから見たシートの番号はすべて同じなので、シート番号から特定して処理しようと考えました。
開いたブックのSheetIDが28のシートに対して、LeftUp(左上)から右下(RightDown)の範囲をコピーしたいのですが、
「インデックスが有効範囲にありません。」というエラーでストップしてしまいます。
LeftUp = Cells(2, 3).Value ' C2
RightDown = Cells(2, 4).Value ' D2
buf = Dir(Sheets("Sheet1").Range("A2").Value & "*.xlsm")
Workbooks.Open Worksheets("Sheet1").Range("A2").Value & "\" & buf, UpdateLinks:=0
Worksheets(28).Range(LeftUp & ":" & RightDown).Copy
原因を教えて頂けると助かります。
A 回答 (3件)
- 最新から表示
- 回答順に表示
No.3
- 回答日時:
既に解決されていると思いますが
VBAのオブジェクトの扱いには癖があるのかも知れません
下記はブックオブジェクト名、ブック名 シートオブジェクト名、シート名をA,B,C列に書き出す 処理コードです
新規シート(A:C列に書き込みをしてよいシート)を表示して試してください
Sub test()
Dim VBcomp As Object
Dim i As Integer
For Each VBcomp In ThisWorkbook.VBProject.VBcomponents
If VBcomp.Type = 100 Then
i = i + 1
Cells(i, 1).Value = VBcomp.Name
If VBcomp.Name = "ThisWorkbook" Then
Cells(i, 2).Value = "←Workbook_Object:ブック名→"
Else
Cells(i, 2).Value = "←Worksheet_Object:シート名→"
End If
Cells(i, 3).Value = VBcomp.Properties("name")
End If
Next
End Sub
ThisWorkbook.VBProject.VBcomponentsの中から
VBcomponentを抜き出し.Nameでオブジェクト名を取得しています
また、所謂 ブック名、シート名はオブジェクトのプロパティから取得しています
VBcomp.Properties("name")
シートを扱う際にWorksheets ("シート名")とかSheets ("シート名")とすると思いますが オブジェクト(名)をそのまま使用する事も出来ます
シートオブジェクト名が Sheet1 の場合
Sheet1.Range("A1").Activate
この場合 Sheet1のProperties("name")は不問です
ブックで考えると馴染みがあるかも知れません
myBookPath = ThisWorkbook.Path
ここで使われている ThisWorkbook がブックのオブジェクト名になります
ブック名はThisWorkbook.Properties("name")で取得されるxxx.xlsmです
(マクロ有効ブックで保存済みの場合)
つまり書き方として
myBookPath = Workbooks("xxx.xlsm").Path
myBookPath = ThisWorkbook.Path
は同じパスが返ります
シートオブジェクト名も変更が可能ですのでVBEが誰でも開ける環境では
別の方法でシートを特定する必要があるかも知れません
No.2
- 回答日時:
No1です。
>左側にシート名が縦に並んで表示されますよね。
多分、エディター画面の「プロジェクト エクスプローラー」と言われるもののことだと想像します。
https://learn.microsoft.com/ja-jp/office/vba/lan …
エディター画面のレイアウトは自由に変更できますし、各ペインも別ウィンドウとして表示(/非表示)することも可能なので、固定ではありませんから・・
仮に、プロジェクト エクスプローラーで、
Sheet9(hoge)
のように表示されている場合、()内の「hoge」がシートのタブに表示されるシート名です。
これに対して「Sheet9」の部分が、No1に挙げたオブジェクト名(=コードネーム)にあたります。
シート名を用いてシートを指定する場合は、
Worksheets("hoge")
のように指定しますが、コードネームで指定する場合は、直接に、
Sheet9
のようにして指定することが可能です。
例えば、
MsgBox Sheet9.Range("A1")
とすれば、コードネームSheet9のシートのA1セルの値が表示されます。
(Sheet9というコードネームのシートが存在しなければエラーになります)
とは言え、このコードネームも変更が可能です。
リボンの開発のプロパティから、シートのプロパティの「オブジェクト名」を変更すれば、コードネームを変更できます。
ですので、コードネームを利用する場合であっても、安全を期すのなら、ブック内に当該シートが存在することを確認する処理を入れておくのが確実でしょう。
(シートのコードネームは、No1に挙げた方法で取得できます。)
また、固定のシートとして利用するのなら、デフォルトで設定される「Sheet〇〇」のようなコードネームではなく、特別な名称に設定しておく方が、いろいろな操作によって紛れてしまう可能性を防止できると考えられます。
(例えば、シートをコピーして前のシートを削除したりした場合)
ありがとうございます。
まだ解決できてません。
「プロジェクト エクスプローラー」に、
Sheet28(鈴木次郎)となっている時、
Sheets(”鈴木次郎”).Range(LeftUp & ":" & RightDown).Copy
と同じ動きを、コードネームで指定する場合はどう記述すれば良いでしょう?
本来、当該シートの存在チェックとか必要なのは理解していますが、
このブックに関しては、数人で使用するもので、シートの複製をしないという前提になっている運用になっているのでチェック不要です。
ブックをもらった人はSheet28のシート名を自分の名前に書き換えるだけです。
ここでは、フォルダ内のブックのSheet28の(LeftUp & ":" & RightDown)範囲を、マクロ実行しているブックの「出力」シートの上から順に書き出していきたいのです。
No.1
- 回答日時:
こんばんは
どこでエラーが出ているのか記載がありませんけれど、勝手な想像で
>Worksheets(28).Range(LeftUp & ":" & RightDown).Copy
ではないかと仮定しました。
違う場合は、以下はお門違いですのでスルーしてください。
想像するところ、原因は以下の2点のどちらかではないでしょうか?
>SheetIDが28のシートに対して~
SheetIDなるものは存在しないと思いますが、何を意図しているのでしょうか?
シート固有の名称としてはオブジェクト名:Worksheet.CodeName は存在しますけれど・・
ご提示の
>Worksheets(28)
は、ブックのシートタブの左から順に28番目のシートを意味します。
(順序を入れ替えても28番目のシートなので、固定のシートを意味しません)
開いたブックに、シートが28シート以上存在すればエラーにはなりませんけれど、28番目のシートが存在しなければここでエラーになります。
>Range(LeftUp & ":" & RightDown)
引数が有効なセル範囲を指定する文字列になっていなければエラーになります。
MsgBox LeftUp & ":" & RightDown
などとして、指定範囲がどうなっているのかを確認してみてください。
エラー箇所は仰る通りの箇所です。
VBAのコードを書く画面では、左側にシート名が縦に並んで表示されますよね。
sheet1、sheet2、、、と作成した順に番号が振られてます。
何度もシートを作り直した経緯があるので28が振られてます。
この番号で指定する方法はないんでしたっけ?
左からの順番指定では都合が悪いです。
シートを移動させてしまう人がいるかも知れないのでどこに居ようと特定したい。しかしシート名に使用者の氏名を入れるのでシート名では特定できないのです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
好きな人を振り向かせるためにしたこと
大好きな人と会話のきっかけを少しでも作りたい、意識してもらいたい…! 振り向かせるためにどんなことをしたことがありますか?
-
おすすめの美術館・博物館、教えてください!
美術館・博物館が大好きです。みなさんのおすすめをぜひお聞きしたいです。
-
あなたの「プチ贅沢」はなんですか?
お仕事や勉強などを頑張った自分へのご褒美としてやっている「プチ贅沢」があったら教えてください。
-
洋服何着持ってますか?
洋服を減らそうと思っているのですが、何着くらいが相場なのかわかりません。
-
「これいらなくない?」という慣習、教えてください
現代になって省略されてきたとはいえ、必要性のない慣習や風習、ありませんか?
-
VBAでcsvファイルもシートもあるのに「インデックスが有効範囲にありません」と表示される2
Visual Basic(VBA)
-
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
-
エクセル:マクロ「Application.CutCopyMode = False」って?
Excel(エクセル)
-
-
4
EXCEL VBAで全選択範囲の解除
Excel(エクセル)
-
5
エクセルエラー13型が一致しませんの直し方教えて下さい。
その他(Microsoft Office)
-
6
エクセルのエラーメッセージ「400」って?
Visual Basic(VBA)
-
7
Application.ScreenUpdating = Falseが効きません
Visual Basic(VBA)
-
8
実行時エラー 438になった時の対処法を教えて下さい。
Visual Basic(VBA)
-
9
VBAでfunctionを利用しようとしたときに「引数は省略できません」というエラーが出ます
Visual Basic(VBA)
-
10
エクセルのラベルの値(文字列)を垂直方向で中央揃えにするには?
Excel(エクセル)
-
11
ExcelVBAを使って、値がある場合は作業を繰り返し実行するプログラムを作成したい。
Visual Basic(VBA)
-
12
【Excel VBA】ブックを複数開いている際、任意のブックをアクティブにしたい
Excel(エクセル)
-
13
UserForm1.Showでエラーになります。
工学
-
14
エクセルVBAでセルに入力したパスでブックを開く
Excel(エクセル)
-
15
worksheetFunctionクラスのVlookupプロパティを取得できません エラーへの対応
Visual Basic(VBA)
-
16
エクセルVBAで、条件に一致するセルへ移動
Excel(エクセル)
-
17
配列でデータが入っている要素を求める方法
Visual Basic(VBA)
-
18
split関数で区切り文字がない場合
Visual Basic(VBA)
-
19
vba 「インデックス有効範囲ではありません。」のメッセージの対処方法を教えてください。
Visual Basic(VBA)
-
20
【VBA】PDF出力に任意のファイル名前を付ける方法
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・集中するためにやっていること
- ・テレビやラジオに出たことがある人、いますか?
- ・【お題】斜め上を行くスキー場にありがちなこと
- ・人生でいちばんスベッた瞬間
- ・コーピングについて教えてください
- ・あなたの「プチ贅沢」はなんですか?
- ・コンビニでおにぎりを買うときのスタメンはどの具?
- ・おすすめの美術館・博物館、教えてください!
- ・ことしの初夢、何だった?
- ・【お題】大変な警告
- ・【大喜利】【投稿~1/20】 追い込まれた犯人が咄嗟に言った一言とは?
- ・洋服何着持ってますか?
- ・みんなの【マイ・ベスト積読2024】を教えてください。
- ・「これいらなくない?」という慣習、教えてください
- ・今から楽しみな予定はありますか?
- ・AIツールの活用方法を教えて
- ・【お題】逆襲の桃太郎
- ・自分独自の健康法はある?
- ・最強の防寒、あったか術を教えてください!
- ・【大喜利】【投稿~1/9】 忍者がやってるYouTubeが炎上してしまった理由
- ・歳とったな〜〜と思ったことは?
- ・モテ期を経験した方いらっしゃいますか?
- ・好きな人を振り向かせるためにしたこと
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・これまでで一番「情けなかったとき」はいつですか?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
別ブックをダイアログボックス...
-
VBA シートをコピーする際に Co...
-
VBAで別ブックのシートを指定し...
-
エクセルVBAが途中で止まります
-
VBA 別ブックからコピペしたい...
-
VBA コードを実行すると画面が...
-
VBAで別のブックにシートをコピ...
-
【VBA】全シートの計算式を全て...
-
ワイルドカード「*」を使うとう...
-
ユーザーフォームの切り替えに...
-
vbaでvbaProjectのパスワード解...
-
Excelマクロ 該当する値の行番...
-
Excelファイルを開くとき、読み...
-
【ExcelVBA】インデックスが有...
-
【ExcelVBA】zip圧縮されたCSV...
-
Access開いているブックのセル...
-
VBA アプリケーション定義また...
-
【Excel VBA】書き込み先ブック...
-
Excelブックがアクティブになっ...
-
ADOで複数のBookから抽出
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBA シートをコピーする際に Co...
-
別ブックをダイアログボックス...
-
VBA 別ブックからコピペしたい...
-
エクセルVBAが途中で止まります
-
ワイルドカード「*」を使うとう...
-
Excelマクロ 該当する値の行番...
-
【Excel VBA】書き込み先ブック...
-
VBA コードを実行すると画面が...
-
【ExcelVBA】インデックスが有...
-
VBAで別ブックのシートを指定し...
-
【ExcelVBA】zip圧縮されたCSV...
-
VBAで別のブックにシートをコピ...
-
VBAで複数のブックを開かずに処...
-
VBA 実行時エラー 2147024893
-
[Excel]ADODBでNull変換されて...
-
VBS Bookを閉じるコード
-
VBA シート名が一致した場合の...
-
フォルダ内の全てのファイルに...
-
vbaでvbaProjectのパスワード解...
-
Excel2007VBAファイルの表示に...
おすすめ情報