
下記、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で質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) Excelのマクロ ブック間である範囲をコピー Workbooks(“a.xlsx“).Sheets 3 2022/05/12 17:02
- Visual Basic(VBA) 特定の文字を含むシートだけマクロ処理をしたい 1 2023/05/22 01:43
- Visual Basic(VBA) Excelのマクロコードについて教えてください。 1 2022/03/27 13:25
- Visual Basic(VBA) コードを直していただきたいです。 以下のコードはネットで拾ったものをほんの少しいじった物なのですが、 7 2024/01/10 22:50
- Visual Basic(VBA) 他のシートからコピーする下記マクロで貼付け位置をWorksheets(1).Range("A3")の 8 2023/01/30 18:48
- Visual Basic(VBA) 【困っています2】VBA 追加処理の記述を教えてください。 2 2022/08/26 11:42
- Visual Basic(VBA) フォルダの場所を可変にしたいです(マクロ) 4 2023/05/11 10:00
- Visual Basic(VBA) 複数csvを横に追加していくマクロについて 2 2023/04/25 09:19
- Visual Basic(VBA) 【前回の続き続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/24 20:49
- Visual Basic(VBA) 【ご教示ください】VBAの記述方法がわかりません。 2 2022/08/12 21:28
このQ&Aを見た人はこんなQ&Aも見ています
-
VBAでcsvファイルもシートもあるのに「インデックスが有効範囲にありません」と表示される2
Visual Basic(VBA)
-
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
-
VBAでfunctionを利用しようとしたときに「引数は省略できません」というエラーが出ます
Visual Basic(VBA)
-
-
4
VBA 別ブックからコピペしたいのですが、軽くしたいです
Visual Basic(VBA)
-
5
UserForm1.Showでエラーになります。
工学
-
6
実行時エラー 438になった時の対処法を教えて下さい。
Visual Basic(VBA)
-
7
エクセルエラー13型が一致しませんの直し方教えて下さい。
その他(Microsoft Office)
-
8
VBAで文字を反映させると255文字の制限になってしまいます。
Visual Basic(VBA)
-
9
エクセル:マクロ「Application.CutCopyMode = False」って?
Excel(エクセル)
-
10
EXCEL VBAで全選択範囲の解除
Excel(エクセル)
-
11
エクセルのラベルの値(文字列)を垂直方向で中央揃えにするには?
Excel(エクセル)
-
12
VBAで文字列を数値に変換したい
Excel(エクセル)
-
13
メッセージボックスを前面に表示させるには?
Visual Basic(VBA)
-
14
特定のPCだけ動作しないVBAマクロがあります。その理由は?
Visual Basic(VBA)
-
15
vba 2つの条件が一致したらコピーして別シートに値のみ貼り付け
Visual Basic(VBA)
-
16
VBAでファイルを開くときにファイル名でワイルドカードを使用したいです
その他(プログラミング・Web制作)
-
17
別ブックをダイアログボックスで指定してそこにあるシートをコピーしたい
Excel(エクセル)
-
18
エクセルのエラーメッセージ「400」って?
Visual Basic(VBA)
-
19
EXCELで特定のセルに表示された項目をヘッダーやフッターに出力するには
Excel(エクセル)
-
20
ExcelVBAを使って、値がある場合は作業を繰り返し実行するプログラムを作成したい。
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBA シートをコピーする際に Co...
-
VBA 別ブックからコピペしたい...
-
別ブックをダイアログボックス...
-
ワイルドカード「*」を使うとう...
-
エクセルVBAが途中で止まります
-
【前回の続きです、ご教示くだ...
-
VBAで別ブックのシートを指定し...
-
VBAで別のブックにシートをコピ...
-
VBA 実行時エラー 2147024893
-
Excel にて、 リストボックスの...
-
【マクロ】アクティブセルにブ...
-
[Excel]ADODBでNull変換されて...
-
マクロVBA別Excelブックにデー...
-
エクセルのマクロについて教え...
-
【ExcelVBA】zip圧縮されたCSV...
-
【Excel VBA】書き込み先ブック...
-
フォルダ内の全てのファイルに...
-
ACCESSVBA からExcelの他ブック...
-
Excelブックがアクティブになっ...
-
エクセルVBAでテキストボックス...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBA シートをコピーする際に Co...
-
別ブックをダイアログボックス...
-
VBA 別ブックからコピペしたい...
-
エクセルVBAが途中で止まります
-
ワイルドカード「*」を使うとう...
-
VBA コードを実行すると画面が...
-
VBAで別のブックにシートをコピ...
-
VBAで別ブックのシートを指定し...
-
【Excel VBA】書き込み先ブック...
-
Excelマクロ 該当する値の行番...
-
【ExcelVBA】zip圧縮されたCSV...
-
[Excel]ADODBでNull変換されて...
-
【ExcelVBA】インデックスが有...
-
Excel2007VBAファイルの表示に...
-
VBAで複数のブックを開かずに処...
-
vbaで他のブックに転記したい。...
-
エクセルマクロで、他ブックか...
-
vbaでvbaProjectのパスワード解...
-
VBA 実行時エラー 2147024893
-
【マクロ】違うフォルダにある...
おすすめ情報