🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
VBA

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

Q&A

解決済

2回答

1165閲覧

VBA 転記について 実行時エラー1004

zaki061

総合スコア2

VBA

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

0グッド

0クリップ

投稿2021/02/25 11:07

VBA初心者です。
自動で転記するプログラムを書いていますが、下記の★部分で掲題のエラーが出てしまいます。
過去の質問や、他サイトで解決策を探しましたが解消できませんでした。
エラーの解消方法 ご教授ください。

Sub 転記と印刷()

Dim endrow As Long Dim scend As String Dim ws1 As Worksheet Dim ws2 As Worksheet Set ws1 = Worksheets(1) Set ws2 = Worksheets(2) Application.ScreenUpdating = False

<一部省略>

Dim rvfs As Byte Dim rvsc As Byte Dim rvth As Byte Dim rvft As Byte Dim rvfv As Byte Dim rvsx As Byte rvfs = ws2.Cells(Rows.Count, 22).End(xlUp).Row rvsc = ws2.Cells(Rows.Count, 22).End(xlUp).Row - 1 rvth = ws2.Cells(Rows.Count, 22).End(xlUp).Row - 2 rvft = ws2.Cells(Rows.Count, 22).End(xlUp).Row - 3 rvfv = ws2.Cells(Rows.Count, 22).End(xlUp).Row - 4 rvsx = ws2.Cells(Rows.Count, 22).End(xlUp).Row - 5 ws2.Range("B1:R1").Value = ws2.Range(Cells(rvfs, 22), Cells(rvfs, 38)).Value ★ If ws2.Cells(rvsc, 22).Value <> "" Then ws2.Range("B2:R2").Value = ws2.Range(Cells(rvsc, 22), Cells(rvsc, 38)).Value ★ End If If ws2.Cells(rvth, 22).Value <> "" Then ws2.Range("B3:R3").Value = ws2.Range(Cells(rvth, 22), Cells(rvth, 38)).Value ★ End If If ws2.Cells(rvft, 22).Value <> "" Then ws2.Range("B4:R4").Value = ws2.Range(Cells(rvft, 22), Cells(rvft, 38)).Value ★ End If If ws2.Cells(rvfv, 22).Value <> "" Then ws2.Range("B5:R5").Value = ws2.Range(Cells(rvfv, 22), Cells(rvfv, 38)).Value ★ End If If ws2.Cells(rvsx, 22).Value <> "" Then ws2.Range("B6:R6").Value = ws2.Range(Cells(rvsx, 22), Cells(rvsx, 38)).Value ★ End If 'ws2.PrintOut 'ActiveWorkbook.Save Application.ScreenUpdating = True

sheet1にこのプログラムを書いています。
よろしくおねがいします。

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

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

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

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

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

guest

回答2

0

ベストアンサー

ws2.Range("B1:R1").Value = Range(Cells(rvfs, 22), Cells(rvfs, 38)).Value

でどうですか?

投稿2021/02/25 11:15

jinoji

総合スコア4592

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

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

zaki061

2021/02/25 11:26

回答ありがとうございます。 エラーは出ませんでしたが、range("B1:R1")の範囲に転記がされませんでした。 転記内容には数値も文字列もはいっています。それが原因でしょうか?
jinoji

2021/02/25 11:34

ws2.Range("B1:R1").Value = ws2.Cells(rvfs, 22).Resize(, 17).Value ではいかがでしょうか。
zaki061

2021/02/25 12:05

回答ありがとうございます。 エラー無く転記もできましたありがとうございます。 どういった原理でResizeを入れたのでしょうか? 同様のプログラムでrvsxまでやったのですが、rvsxのみ掲題のエラーが残ってしまいました。 rvfvとrvsxは今回のテスト環境下では、空白です。 何が考えられるでしょうか?
jinoji

2021/02/25 12:11

rvfsは5だと、rvsxは0になりませんか?
jinoji

2021/02/25 12:24

Cells(rvfs, 22) を、こちらはRangeオブジェクトとして指定しているつもりでも Excel側は Cells(rvfs, 22).Value と解釈してるのかな、と思います。 それで、たとえばRange("aaa","bbb") がエラーになるのと同様に、エラーが起きた、と。 試しに、 Dim c1 As Range, c2 As Range Set c1 = ws2.Cells(rvfs, 22) Set c2 = ws2.Cells(rvfs, 38) ws2.Range("B1:R1").Value = ws2.Range(c1, c2).Value としてみると、ちゃんと動きます。
zaki061

2021/02/25 13:42

回答ありがとうございます。 ご指摘のとおり、rvsxが0になっていたために生じたエラーでした。 修正したところすべてエラーなく動きました。 大変勉強になりましたありがとうございました。
guest

0

変数 rvfs が数値以外の場合、
通知であっても rvfs = 0 の場合、
実行時エラー1004となります。

投稿2021/02/25 11:17

TanakaHiroaki

総合スコア1063

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

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

zaki061

2021/02/25 11:25

回答ありがとうございます。 数値以外が入る場合は、変数のbyteをvariant等に変更すれば良いのでしょうか?
TanakaHiroaki

2021/02/25 11:29 編集

Cellsの引数に用いる場合、整数である必要があります。
zaki061

2021/02/25 11:37

回答ありがとうございます。勉強になります。 今回のケースは整数でテストをしています。rvfsは「5」となっています。
TanakaHiroaki

2021/02/25 11:42

それでは、整数型に変換したら期待通りにならないでしょうか。 ws2.Range("B1:R1").Value = ws2.Range(Cells(CInt(rvfs), 22), Cells(CInt(rvfs), 38)).Value
zaki061

2021/02/25 12:07

回答ありがとうございます。 やはり、エラーが残ってしまいました。
TanakaHiroaki

2021/02/25 12:32

ご報告ありがとうございます。 私ではお手上げですが、jinojiさんの 2021/02/25 21:24 コメントの意味を理解できると解決できそうですね。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問