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

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

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

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

Q&A

解決済

2回答

558閲覧

VBA エラーをスキップしたい

mi07

総合スコア20

VBA

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

0グッド

0クリップ

投稿2019/08/15 03:49

編集2019/08/15 04:09

VBA

1Public Sub 入荷帳簿へ転記() 2'入荷入力シートJ列の値と同じ値のシート名のA列最終行に入荷入力シートのB:DとG:Hの値代入 3 4 Dim copyRow As Long 'コピー元の行番号 5 Dim copySheet As Worksheet 'コピー元のシート 6 Dim pasteRange As Range '転記先のRangeオブジェクト 7 Dim pasteSheet As Worksheet '転記先のシート 8 9 Set copySheet = Sheets("入荷入力") 10 11 For copyRow = 2 To 7 12 If IsError(copySheet.Cells(copyRow, "J").Value) = False Then 'エラーのセルはスキップする 13 Set pasteSheet = Sheets(copySheet.Cells(copyRow, "J").Value) 14 Set pasteRange = pasteSheet.Cells(Rows.Count, "A").End(xlUp).Offset(1) 15 pasteRange.Resize(, 3).Value = copySheet.Range(copySheet.Cells(copyRow, 2), copySheet.Cells(copyRow, 4)).Value 16 pasteRange.Resize(, 2).Offset(, 5).Value = copySheet.Range(copySheet.Cells(copyRow, 7), copySheet.Cells(copyRow, 8)).Value 17 End If 18 Next 19 20End Sub 21

エラーをスキップしたつもりなんですが、

Set pasteSheet = Sheets(copySheet.Cells(copyRow, "J").Value) の部分で

J列には、数式がはいっており、
値がある場合は、問題ありませんが、今回、5行目の数式の値がエラーとなり0という表記の場合、copyrow=5でエラーが起きてしまいます。
エラーのスキップ方法に問題があるのでしょうか?
直し方がわからず困っております。。。

申し訳ありませんが、知恵をお貸しいただきたく投稿させていただきます。
情報の過不足が有りましたら補足いたしますので、コメントいただければ幸いです。

よろしくお願いいたします。

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

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

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

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

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

meg_

2019/08/15 04:13

セルの数式が何か教えてください。
mi07

2019/08/15 05:21

=A5です。 =IF(A5=””、””、A5)も試してみましたが駄目でした…
meg_

2019/08/15 05:40

セルのエラー値とは「#DIV/0!(0で除算)」などです。それ以外は「False」になるかと。
mi07

2019/08/15 06:14

なるほど、エラーが出るような数式にすれば、このまま使えるということですね。ちょっと考えてみます!ありがとうございます!
guest

回答2

0

ベストアンサー

動作確認してみましたが、エラーは出なくなりましたが、そのあとの値の代入が全くできなくなってしまいました。

すみません、こちらで、動作確認する環境にないのですが、
copySheet.Cells(copyRow, "J").Value
の内容は、シート名が入るのでしょうか。(Sheet1,Sheet2等)

イメージ説明

もし
=A5です。
=IF(A5=””、””、A5)も試してみましたが駄目でした…
から、想像して、
下記のいずれかなら
①エラー
②空白
③正しいシート名
①と②のケースを除外すれば、良いかと
If IsNumeric(val) = True And val > 0 Then の行を
If IsError(val) = False And val <> "" Then
に変更してみてください。

投稿2019/08/15 06:29

tatsu99

総合スコア5438

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

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

mi07

2019/08/15 06:41

言葉足らずな説明に、想像していただきありがとうございます! おそらく想像していただいた通りでエラーと空白を除外するという形式にすればよかったということですね。 IsNumericは知らなかったので、こちらも勉強になりました! ありがとうございました!
guest

0

とりあえず、修正してみました。(こちらで動作確認まではしていません)
copySheet.Cells(copyRow, "J").Valueの値数値でかつ0より大きければ、処理を行うように
しました。(値が1.67等の場合も実行されますので、整数か否かのチェックまではしていません)

あと、動作の内容には影響しませんので、修正していませんが
copySheet.Cells(copyRow, "J").Value の内容はvalに格納されるので、
val=copySheet.Cells(copyRow, "J").Value より後の行では
copySheet.Cells(copyRow, "J").Valueの代わりにvalと記述したほうが簡単です。

例:
Set pasteSheet = Sheets(copySheet.Cells(copyRow, "J").Value) ではなく
Set pasteSheet = Sheets(val) のほうが簡単です。

vba

1Public Sub 入荷帳簿へ転記() 2'入荷入力シートJ列の値と同じ値のシート名のA列最終行に入荷入力シートのB:DとG:Hの値代入 3 4 Dim copyRow As Long 'コピー元の行番号 5 Dim copySheet As Worksheet 'コピー元のシート 6 Dim pasteRange As Range '転記先のRangeオブジェクト 7 Dim pasteSheet As Worksheet '転記先のシート 8 Dim val As Variant '追加 9 Set copySheet = Sheets("入荷入力") 10 11 For copyRow = 2 To 7 12 val = copySheet.Cells(copyRow, "J").Value '追加 13 If IsNumeric(val) = True And val > 0 Then '変更 14 Set pasteSheet = Sheets(copySheet.Cells(copyRow, "J").Value) 15 Set pasteRange = pasteSheet.Cells(Rows.Count, "A").End(xlUp).Offset(1) 16 pasteRange.Resize(, 3).Value = copySheet.Range(copySheet.Cells(copyRow, 2), copySheet.Cells(copyRow, 4)).Value 17 pasteRange.Resize(, 2).Offset(, 5).Value = copySheet.Range(copySheet.Cells(copyRow, 7), copySheet.Cells(copyRow, 8)).Value 18 End If 19 Next 20 21End Sub 22

投稿2019/08/15 05:21

tatsu99

総合スコア5438

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

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

mi07

2019/08/15 06:05

ありがとうございます。 なるほど、そうですよね、硬い考えしてしまっていました。。。valの使い方勉強になります。 動作確認してみましたが、エラーは出なくなりましたが、そのあとの値の代入が全くできなくなってしまいました。 今から確認してみますが、もし、気が付くことあれば教えていただけると幸いですm(__)m
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問