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

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

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

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

Q&A

解決済

2回答

2299閲覧

VBA  実行時エラー”9”の直し方

mi07

総合スコア20

VBA

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

0グッド

0クリップ

投稿2019/12/09 04:36

初心者なんですが、いろいろ教えてもらいながら、以下のコードまでたどり着きました。
処理自体はうまくいくのですが、エラーが出てしまいます。

実行時エラー9
インデックスが有効範囲にありません

というエラーが以下のコードの、

Set pasteSheet = Sheets(copySheet.Cells(copyRow, "I").Value)

部分で出てしまいます。

2-7行目も、I列も問題ないので、なぜエラーが発生するかわかりません。

教えていただけると幸いです。
よろしくお願いいたします。

VBA

1 Dim copyRow As Long 2 Dim copySheet As Worksheet 3 Dim pasteRange As Range 4 Dim pasteSheet As Worksheet 5 6 Set copySheet = Sheets("データ移行") 7 8 For copyRow = 2 To 7 '2行目から7行目を繰り返す 9 10 If IsError(copySheet.Cells(copyRow, "I").Value) = False Then 11 Set pasteSheet = Sheets(copySheet.Cells(copyRow, "I").Value) 12 Set pasteRange = pasteSheet.Cells(Rows.Count, "A").End(xlUp).Offset(1) 13 pasteRange.Resize(, 4).Value = copySheet.Range(copySheet.Cells(copyRow, 1), copySheet.Cells(copyRow, 4)).Value 14 pasteRange.Resize(, 1).Offset(, 5).Value = copySheet.Cells(copyRow, 6).Value 15 End If 16 Next

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

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

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

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

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

guest

回答2

0

おそらくIsErrorでは目的のチェックができていないのでしょう。
他の質問の回答にあるように空白が入っているようですが、IsErrorではOK判定となり処理されてしまっていると思います。
どういうチェックをしたいのかは仕様が書かれていないのでわかりませんが、空白か否かというチェックであるなら、次のような書き方で良いでしょう。

VBA

1If Trim(copySheet.Cells(copyRow, "I").Value) <> "" Then

.

投稿2019/12/09 05:22

編集2019/12/09 05:23
ttyp03

総合スコア16996

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

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

0

ベストアンサー

copyRow の値がいくつの時エラーになりますか?

そのときの copySheet.Cells(copyRow, "I").Value の値は何ですか?

投稿2019/12/09 04:54

iruyas

総合スコア1067

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

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

mi07

2019/12/09 05:08

copyrow=3のときにエラーになりますが、データ自体は1行しかありません。 なので、2 To 7のうち、 2行目データあり、3行目以降データなし(空白)です 空白の際にエラーになってしまっているということなのでしょうか。。。
iruyas

2019/12/09 06:04

>For copyRow = 2 To 7 '2行目から7行目を繰り返す ↓ For copyRow = 2 To copySheet.Cells(Rows.Count, "I").End(xlUp).Row
mi07

2019/12/09 06:33

なるほど、ありがとうございます。 なかなかこういう発想の転換ができなくて、助かります! 実行してみます、ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問