こんにちは
「たった一秒で仕事が片づくエクセル自動化の教科書6章」p219で
全社員の勤怠表の残業時間を「残業時間管理一覧表」に転記するというものですが、
ある方法ではworkbooksOPEN時、社員の勤務表を開き「残業時間管理一覧表」に転記することができませんでした。
tanakakintai.xlsを開き、D1の内容を「残業時間管理一覧」シートCells(6, 1)にコピーする。
①Workbooks.Open ("tanakakintai.xls")
Worksheets("残業時間管理一覧").Cells(6, 1) = Range("D1")
「インデックスが有効ではありません」とエラーとなる。
開いたファイルtanakakintai.xlsがアクティブとなりそのブックには残業時間一覧シートがない為にエラーとなるため?
同様にwith end(with)を使うとエラーにならずうまく転記することができます。
②With worksheets("残業時間管理一覧")
.Cells(6 1) = Range("D1")
end with
②では、エラーにならずに転記することができるのでしょうか?
これもWorksheets("残業時間管理一覧").Cells(6, 1) = Range("D1")と同じ意味になる
ようにおもえるのですが・・
②ではうまく転記(コピー)することができるのでしょうか?
宜しくお願いいたします。
補足
①がうまくいかなかったので、
Workbooks.Open ("tanakakintai.xls")
Workbooks("勤怠管理表集約ファイル.xls").Worksheets("残業時間管理一覧").Cells(6, 1) = Range("D1") 勤怠管理表集約ファイル.xlsをつけたらうまくいきました。
No.2ベストアンサー
- 回答日時:
No.1です。
> 1)あくまでもWITH構文において内部的につくとういうことでしょうか?
そうです。このあたりはVBAの入門書や入門サイトのWith構文の説明をご覧ください。
> 2)workbooks("勤怠管理表集約ファイル.xls").Worksheets("残業時間管理一覧")が内部的に保持されて、
> Wth構文内の.Cellsなどドットで始まるものに暗黙的に付加されるようになります
> ということをデバック?などで確認する方法はございますでしょうか?
> または、参考となるところがあればおしえてくださいませ。
②の例でいうと以下で確認できます。
With workbooks("勤怠管理表集約ファイル.xls").worksheets("残業時間管理一覧")
MsgBox .Name ' シート名の表示
MsgBox .Parent.Name ' シートが所属しているブック名の表示
end with
ありがとうござました。
ご連絡遅れてもうしわけございませでした。
教えていただいた通り、MSGBOXをつかってやってみます。
いろいろとありがとうございました。
No.1
- 回答日時:
複数のブックやシート上のセルを扱う場合注意すべき点は、操作対象のセルが、どのブックの、どのシート上にあるセルか意識して指定しなければいけないということです。
指定がない場合は現在アクティブなブックやシートが指定されたことになります。②の例でWorkbooks.Open ("tanakakintai.xls")はWith構文の中にある前提で回答させていただきます。
①が上手くいかなかった理由は書かれているとおりですね
> 開いたファイルtanakakintai.xlsがアクティブとなり
> そのブックには残業時間一覧シートがない為にエラーとなるため?
②の場合
With worksheets("残業時間管理一覧")
Workbooks.Open ("tanakakintai.xls")
.Cells(6 1) = Range("D1")
end with
一行目で現在アクティブな
Workbooks("勤怠管理表集約ファイル.xls").Worksheets("残業時間管理一覧")
が内部的に保持されて、Wth構文内の.Cellsなどドットで始まるものに暗黙的に付加されるようになります
さらに、二行目のWorkbooks.Openでtanakakintai.xlsがアクティブになります。
これにより
.Cells(6 1)は、Workbooks("勤怠管理表集約ファイル.xls").Worksheets("残業時間管理一覧")上のセル
Range("D1")は、tanakakintai.xls上のセル
が指定されたことになって、上手く転記されることになります。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
- Visual Basic(VBA) VBAの参照先のファイル名をセルに書いて代入したい 2 2022/04/04 13:42
- Visual Basic(VBA) エクセルのマクロを使ってメールを送る方法について教えてください 2 2022/03/29 01:36
- Visual Basic(VBA) 【前回の続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/16 16:44
- Visual Basic(VBA) vbaのエラー対応(実行時エラー7:メモリが不足しています) 4 2023/04/24 00:20
- Visual Basic(VBA) 【前回の続き続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/24 20:49
- Visual Basic(VBA) 【ご教示ください】VBAの記述方法がわかりません。 2 2022/08/12 21:28
- Visual Basic(VBA) ExcelからAccessのテーブルに書き込む時に時間がかかる 1 2022/10/14 20:38
- Excel(エクセル) Excel VBAどこが間違ってますか? 4 2023/07/17 10:04
- Visual Basic(VBA) VBA Userformで一部別シートに転記がしたいのですが 2 2023/05/24 13:08
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBA シートをコピーする際に Co...
-
エクセルVBAが途中で止まります
-
【ExcelVBA】zip圧縮されたCSV...
-
VBSでExcelのオープン確認
-
【VBA】全シートの計算式を全て...
-
別ブックをダイアログボックス...
-
vbaでvbaProjectのパスワード解...
-
VBA 実行時エラー 2147024893
-
別ブックの列同士の値が一致し...
-
VBS Bookを閉じるコード
-
拡張メタファイルにて貼り付け
-
【Excel VBA】書き込み先ブック...
-
VBAで別のブックにシートをコピ...
-
ワイルドカード「*」を使うとう...
-
EXCEL VBA 単語置き換え につい...
-
エクセルのマクロについて教え...
-
エクセルのマクロについて教え...
-
【ExcelVBA】インデックスが有...
-
VBAで別ブックのシートを指定し...
-
Excelブックがアクティブになっ...
マンスリーランキングこのカテゴリの人気マンスリー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】書き込み先ブック...
おすすめ情報
siffon9様
草々のご回答ありがとうございます。
ご指摘いただいたとおり、「②の例でWorkbooks.Open ("tanakakintai.xls")はWith構文の中にある前提で回答させていただきます。」でした。 ありがとうございます。
ご質問についてご回答ありがとうございます。
1)あくまでもWITH構文において内部的につくとういうことでしょうか?
2)workbooks("勤怠管理表集約ファイル.xls").Worksheets("残業時間管理一覧")が内部的に保持されて、Wth構文内の.Cellsなどドットで始まるものに暗黙的に付加されるようになります
ということをデバック?などで確認する方法はございますでしょうか?または、参考となるところがあればおしえてくださいませ。 よろしくお願いいたします。
siffon9様
with構文ではオブジェクトに格納されるみたいなことかかれておりましたので
そこに格納され、WITH構文のなかではオブジェクトとして扱うためファイル名が補完されるのでしょうか? (よくわかりませんが・・) いま、オブジェクトの中をみたらPATHとファイル名が記載
されていたのでそれを参照しているのかなぁーと。そう思いたいです。 ???