teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

3

再々修正。要件が頭に入っていなかったorz すみません

2021/06/29 16:58

投稿

neonemo
neonemo

スコア191

answer CHANGED
@@ -11,7 +11,7 @@
11
11
  [Sheets オブジェクト (Excel)](https://docs.microsoft.com/ja-jp/office/vba/api/excel.sheets)
12
12
  https://docs.microsoft.com/ja-jp/office/vba/api/excel.sheets
13
13
 
14
- ## 追記分
14
+ ## 追記分1
15
15
  コード付きで回答来ちゃったので出しちゃいますが
16
16
  book1、book2がどちらも開いている状態ならこれでOKです。
17
17
 
@@ -24,4 +24,56 @@
24
24
  Workbooks.Open("book2のファイル名").Worksheets("book2のシート名").Activate
25
25
  ```
26
26
 
27
- ![イメージ説明](19d1516361bd3e9f8047554ae37d8941.gif)
27
+ ![イメージ説明](19d1516361bd3e9f8047554ae37d8941.gif)
28
+
29
+ ## 追記分2
30
+ ※コメントやり取りの整合性を保つため、以前の記載は残しておきます。
31
+
32
+ 失礼しました。要件が頭に入っていませんでした。
33
+ その要件ですと、基本的に jinojiさんのやり方に収束していくと思います。
34
+ 私の回答によりかえって混乱させてしまい申し訳ありませんでした。
35
+
36
+ ウォッチ式でオブジェクトを確認してみましたが、`CodeName`以外に使えそうなプロパティは見つかりませんでした。
37
+
38
+ ### Workbooks配下
39
+ ![イメージ説明](7281c21b82e7d243def606718b45b545.png)
40
+ ![イメージ説明](236d652cf00857cb07c93aadb8cd8e56.png)
41
+ ![イメージ説明](c7e02b4d40b85bd866bd94be0c2e64b6.png)
42
+
43
+ ### WorkSheets配下
44
+ ![イメージ説明](6f9ccf3137db639be118e9b776667049.png)
45
+
46
+ ### おまけ: あらかじめシートオブジェクトを確保して、使う時に簡単に呼び出せるようにした場合
47
+ 予めDictionaryを使って、**Key=CodeName、Value=WorkSheetオブジェクト**を格納しています。
48
+ 自分で書いておきながら関数を書くコストがより高くなってしまう上に
49
+ シート名が変わった時はマクロのブックを開きなおす必要があったりとかなり微妙orz
50
+
51
+ ![イメージ説明](3c939e8585597f51fa03260ed55c6aa5.gif)
52
+
53
+ 標準モジュールのコード
54
+ ```vba
55
+ Attribute VB_Name = "Module1"
56
+ Dim dic As Object
57
+
58
+ Sub Auto_Open()
59
+ Set dic = CreateObject("Scripting.Dictionary")
60
+ For Each ws In Workbooks("book2.xlsx").Worksheets
61
+ dic.Add ws.CodeName, ws
62
+ Next
63
+ End Sub
64
+
65
+ Sub SheetObjectActivate()
66
+ dic("Sheet1").Activate
67
+ End Sub
68
+ ```
69
+
70
+ Sheet1のコード
71
+ ```vba
72
+ ' ボタンのクリックイベントハンドラ
73
+ Private Sub CommandButton1_Click()
74
+ Call SheetObjectActivate
75
+ End Sub
76
+ ```
77
+
78
+
79
+ 長文失礼しました。

2

ループは要らないのでその旨修正

2021/06/29 16:58

投稿

neonemo
neonemo

スコア191

answer CHANGED
@@ -9,4 +9,19 @@
9
9
 
10
10
  質問に対しては↑だけで解決します。↓こっちはおまけ。使いこなしたい場合に見ると良いかと。
11
11
  [Sheets オブジェクト (Excel)](https://docs.microsoft.com/ja-jp/office/vba/api/excel.sheets)
12
- https://docs.microsoft.com/ja-jp/office/vba/api/excel.sheets
12
+ https://docs.microsoft.com/ja-jp/office/vba/api/excel.sheets
13
+
14
+ ## 追記分
15
+ コード付きで回答来ちゃったので出しちゃいますが
16
+ book1、book2がどちらも開いている状態ならこれでOKです。
17
+
18
+ ```vba
19
+ Workbooks("book2のファイル名").Worksheets("book2のシート名").Activate
20
+ ```
21
+
22
+ しかし、もしbook2が開いていない状態ならこうなります。
23
+ ```vba
24
+ Workbooks.Open("book2のファイル名").Worksheets("book2のシート名").Activate
25
+ ```
26
+
27
+ ![イメージ説明](19d1516361bd3e9f8047554ae37d8941.gif)

1

参考URL追加

2021/06/28 13:32

投稿

neonemo
neonemo

スコア191

answer CHANGED
@@ -5,4 +5,8 @@
5
5
  それを踏まえて公式リファレンスを見ると、どのサンプルが使えるのかが見えてくると思います。
6
6
 
7
7
  [Workbook オブジェクト (Excel)](https://docs.microsoft.com/ja-jp/office/vba/api/excel.workbook)
8
- https://docs.microsoft.com/ja-jp/office/vba/api/excel.workbook
8
+ https://docs.microsoft.com/ja-jp/office/vba/api/excel.workbook
9
+
10
+ 質問に対しては↑だけで解決します。↓こっちはおまけ。使いこなしたい場合に見ると良いかと。
11
+ [Sheets オブジェクト (Excel)](https://docs.microsoft.com/ja-jp/office/vba/api/excel.sheets)
12
+ https://docs.microsoft.com/ja-jp/office/vba/api/excel.sheets