質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

解決済

2回答

3580閲覧

VBA ”インデックスが有効範囲にありません”をスキップしたい

unikani129

総合スコア3

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

0クリップ

投稿2021/09/04 06:31

## 数百枚あるシートの中から、複数のシートを新しいブックに移動させたいです。

その時に、”移動したいシートが移動元ブックにない場合は、スキップして次のシート移動に進む”
ということは可能でしょうか。

ネット検索に限界を感じましたのでこちらで質問をさせてください。

Sub シート移動() Call Sheets(Array("1", "2", "3", "4")).Move End Sub

たとえば上記のようなコードで、移動元に シート”3” がなかった場合は
エラー表示せずに シート”4” の移動に進む、というような。

初歩的な質問とは存じますが、お力添えくださいますようお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

こんな感じでどうでしょうか。

VBA

1Sub シート移動() 2 Dim ss As Sheets 3 Set ss = SheetsArray("1", "2", "3", "4") 4 If Not ss Is Nothing Then ss.Move 5End Sub 6 7Function SheetsArray(ParamArray sName()) As Sheets 8 Dim d1, d2, ws, s 9 Set d1 = CreateObject("Scripting.Dictionary") 10 Set d2 = CreateObject("Scripting.Dictionary") 11 For Each ws In ThisWorkbook.Sheets 12 d1.Add ws.Name, ws 13 Next 14 For Each s In sName 15 If d1.Exists(s) Then d2.Add s, s 16 Next 17 If d2.Count > 1 Then Set SheetsArray = Sheets(d2.Keys) 18End Function

投稿2021/09/04 10:11

jinoji

総合スコア4592

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

事前に対象のワークシートが存在するかチェックするしかないかと。
以下ご参考まで。

https://www.tipsfound.com/vba/10009

そして、存在するワークシート名を配列に入れて、Arrayの部分と置き換えればよろしいかと

投稿2021/09/04 07:10

hex309

総合スコア761

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ikapy

2021/09/04 08:59

自己責任で(そして質問者さんがVBAに詳しく)質問者さんが結果に対して全ての責任を負う覚悟があるなら、「On Error GoTo 0」という怖い文で対応する方法があります。けれども、hex309さんの方法がおすすめです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問