下記、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も見ています
-
新NISA制度は今までと何が変わる?非課税枠の拡大や投資対象の変更などを解説!
少額から投資を行う人のための非課税制度であるNISAが、2024年に改正される。おすすめの銘柄や投資額の目安について教えてもらった。
-
以下のコードを実行しても、オブジェクト変数または、withブロック変数が設定されていませんとエラーが
Visual Basic(VBA)
-
Excelで「Ctrl+c」、「Ctrl+v」等をまとめた物
Visual Basic(VBA)
-
VB.netのADOってなんですか?
Visual Basic(VBA)
-
-
4
excelのVBAについて、以下のコードに追加をお願いいたします。
Visual Basic(VBA)
-
5
VBAの質問です、複数のテキストボックスに同じコメントを
Visual Basic(VBA)
-
6
VBA ファイル名取得
Visual Basic(VBA)
-
7
VBAのコードを教えてください
Visual Basic(VBA)
-
8
VBA UserFormからの転記で
Visual Basic(VBA)
-
9
エクセルVBAの配列について
Visual Basic(VBA)
-
10
VBのWPFとはなんでしょうか?
Visual Basic(VBA)
-
11
VBA listBoxについて
Visual Basic(VBA)
-
12
エクセルVBAにて =A1=B1とすれば A1とB1のセル内容が一緒だった場合 TRUE 違っていれ
Visual Basic(VBA)
-
13
Excel VBA 定義されたプロージャ名、関数名の取得
Visual Basic(VBA)
-
14
VBA 複数条件の分岐処理の上手な方法
Visual Basic(VBA)
-
15
VBAに関して
Visual Basic(VBA)
-
16
ExcelのVBAのことで質問です。 以下のコードを入れ、ボタンを押せば作動させると写真のように画面
Visual Basic(VBA)
-
17
コードを直していただきたいです。 以下のコードはネットで拾ったものをほんの少しいじった物なのですが、
Visual Basic(VBA)
-
18
ExcelVBAのFindFirstエラーについて
Visual Basic(VBA)
-
19
マクロのエラー
Visual Basic(VBA)
-
20
郵便番号検索APIにてget ElementByTagNameでうまくを取得できない
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excel VBA別ブックのシートをコ...
-
エクセルのマクロについて教え...
-
転記先VBA 一致しているセルが...
-
ExcelのVBAです。フォルダ内の...
-
【ExcelVBA】インデックスが有...
-
ワイルドカード「*」を使うとう...
-
エクセル vba ある検索値を別ブ...
-
VBA シートをコピーする際に Co...
-
VBAで別ブックのシートを指定し...
-
複数のエクセルファイルとシー...
-
VBS Bookを閉じるコード
-
vbaでvbaProjectのパスワード解...
-
VBAで複数のブックを開かずに処...
-
現在開いているbook全てを対象...
-
日付ごとの集計マクロ
-
エクセルVBAで読み取りパスワー...
-
エクセルのマクロについて教え...
-
コードを直していただきたいで...
-
エクセルマクロで任意のファイ...
-
クリップボードに貼付している...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBA シートをコピーする際に Co...
-
エクセルVBAが途中で止まります
-
別ブックをダイアログボックス...
-
【ExcelVBA】インデックスが有...
-
ワイルドカード「*」を使うとう...
-
【ExcelVBA】VBA実行でダイアロ...
-
ExcelのVBAです。フォルダ内の...
-
フォルダ内の全てのファイルに...
-
VBA コードを実行すると画面が...
-
VBA 別ブックからコピペしたい...
-
VBAで別ブックのシートを指定し...
-
VBS Bookを閉じるコード
-
vbaでvbaProjectのパスワード解...
-
【VBA】全シートの計算式を全て...
-
VBA シート名が一致した場合の...
-
【ExcelVBA】zip圧縮されたCSV...
-
複数のエクセルブックをひとつ...
-
VBSでExcelのオープン確認
-
VBAで別のブックにシートをコピ...
-
【Excel VBA】書き込み先ブック...
おすすめ情報