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

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

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

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

Q&A

解決済

1回答

2220閲覧

実行時エラー13のなおしかた

退会済みユーザー

退会済みユーザー

総合スコア0

VBA

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

0グッド

0クリップ

投稿2017/12/13 05:55

###前提・実現したいこと
Excel2016で、
複数ある見積書のエクセルデータを、ひとつのシートに転記してデータベースを作るマクロを作っています。
マクロを実行すると以下のエラーメッセージが発生しました。

###発生している問題・エラーメッセージ

実行時エラー’13’: 型が一致しません。

表示されたデバッグボタンをおすと、
下記のソースコード全体の中のうち、次の箇所が黄色くハイライトされています。

Set pasteCell = pasteWs.Cells(pasteWs.Rows.Count, "RC[1]").End(xlUp).Offset(1)

###ソースコード全体

Option Explicit Sub 見積書DB化2() '前提条件 '- 転記元のシートを前面に表示していること '- 転記先のシートがこのマクロが書かれいるブックであること '転記元のシートを取得 'Excelで今アクティブなシート(Excel.ActiveWorkbookは省略可) Dim copyWs As Excel.Worksheet Set copyWs = Excel.ActiveWorkbook.ActiveSheet '転記先のシートを取得 'マクロが書かれているブックの、アクティブなシート Dim pasteWs As Excel.Worksheet Set pasteWs = Excel.ThisWorkbook.ActiveSheet '入力する空白セルの指定 Dim pasteCell As Excel.Range Set pasteCell = pasteWs.Cells(pasteWs.Rows.Count, "RC[1]").End(xlUp).Offset(1) '見積日を開いている転記元からコピーして転記先にペースト Dim mitumoridayCell As Excel.Range Set mitumoridayCell = copyWs.Range("R1C1") pasteCell.Value() = mitumoridayCell.Value() '品名'を開いている転記元からコピーして転記先にペースト Set pasteCell = pasteWs.Cells(pasteWs.Rows.Count, "RC[2]").End(xlUp).Offset(1) Dim hinmeiCell As Excel.Range Set hinmeiCell = copyWs.Range("R12C2") pasteCell.Value() = hinmeiCell.Value() '見積金額'を開いている転記元からコピーして転記先にペースト Set pasteCell = pasteWs.Cells(pasteWs.Rows.Count, "RC[3]").End(xlUp).Offset(1) Dim kingakuCell As Excel.Range Set kingakuCell = copyWs.Range("R12C5") pasteCell.Value() = kingakuCell.Value() '項目~金額'を開いている転記元からコピーして転記先にペースト Set pasteCell = pasteWs.Cells(pasteWs.Rows.Count, "RC[4]").End(xlUp).Offset(1) Dim koumoku_kingakuCell As Excel.Range With copyWs Set koumoku_kingakuCell = _ .Range( _ .Range("R15C1:R15C5"), _ .Range("R15C1:R15C5").End(xlToRight).End(xlDown) _ ) End With 'copyWs With koumoku_Cell 'pasteCell.Resize(.Rows.Count, .Columns.Count).Value() = .Value() 'End With 'koumoku_kingakuCell End Sub

###試したこと
ネットで調べて、RC[1] といった書き方でなく、 C といったセル番地の記載に変更してみましたが、
うまく改善できませんでした。

どうぞアドバイスいただければ幸いです。
よろしくお願いいたします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

RC[1] → 1 です。

投稿2017/12/13 06:01

ExcelVBAer

総合スコア1175

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

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

退会済みユーザー

退会済みユーザー

2017/12/13 06:04

早速ありがとうございます!直りました!!
ExcelVBAer

2017/12/13 06:12 編集

ちなみに、他の箇所もR1C1表記ではなく、 行番号、列番号にした方が良いかと。 Range("R12C2") → Cells(12,2) .Range(.Range("R15C1:R15C5"), .Range("R15C1:R15C5") →.Range(.Cells(15,1), .Cells(15,5)) また、Enum で、行番号、列番号を定義しておくと、 行・列の追加・削除に対応しやすくなります。 Public Enum E_Row Header = 14 Data_Start End Enum Public Enum E_Col Data_Start = 1 End Enum と定義すれば、 .Cells(E_Row.Data_Start, E_Col.Data_Start) 等と書くことができます。 行・列が変わった時も、Enumの定義を変えるだけで良くなり、 メンテナンス性があがります。 また、意味の分かりやすい変数名をつけておくことで、 コードの可読性があがります。
退会済みユーザー

退会済みユーザー

2017/12/13 06:16

補足アドバイスありがとうございます! 度々恐縮です、 直ったとおもったのですが異なるエラーがでてしまいました。 実行時エラー71004': アプリケーション定義またはオブジェクト定義のエラーです。 同じ箇所がまた、黄色くハイライトされておりまして、 次のように全体のソースコードを直してみました。 Option Explicit Sub 見積書DB化2() '前提条件 '- 転記元のシートを前面に表示していること '- 転記先のシートがこのマクロが書かれいるブックであること '転記元のシートを取得 'Excelで今アクティブなシート(Excel.ActiveWorkbookは省略可) Dim copyWs As Excel.Worksheet Set copyWs = Excel.ActiveWorkbook.ActiveSheet '転記先のシートを取得 'マクロが書かれているブックの、アクティブなシート Dim pasteWs As Excel.Worksheet Set pasteWs = Excel.ThisWorkbook.ActiveSheet '入力する空白セルの指定 Dim pasteCell As Excel.Range Set pasteCell = pasteWs.Cells(pasteWs.Rows.Count, "1").End(xlUp).Offset(1) '見積日を開いている転記元からコピーして転記先にペースト Dim mitumoridayCell As Excel.Range Set mitumoridayCell = copyWs.Range("1,1") pasteCell.Value() = mitumoridayCell.Value() '品名'を開いている転記元からコピーして転記先にペースト Set pasteCell = pasteWs.Cells(pasteWs.Rows.Count, "2").End(xlUp).Offset(1) Dim hinmeiCell As Excel.Range Set hinmeiCell = copyWs.Range("12,2") pasteCell.Value() = hinmeiCell.Value() '見積金額'を開いている転記元からコピーして転記先にペースト Set pasteCell = pasteWs.Cells(pasteWs.Rows.Count, "3").End(xlUp).Offset(1) Dim kingakuCell As Excel.Range Set kingakuCell = copyWs.Range("12,5") pasteCell.Value() = kingakuCell.Value() '項目~金額'を開いている転記元からコピーして転記先にペースト Set pasteCell = pasteWs.Cells(pasteWs.Rows.Count, "4").End(xlUp).Offset(1) Dim koumoku_kingakuCell As Excel.Range With copyWs Set koumoku_kingakuCell = _ .Range( _ .Range("15,1:15,5"), _ .Range("15,1:15,5").End(xlToRight).End(xlDown) _ ) End With 'copyWs koumoku_kingakuCell.Copy pasteCell.PasteSpecial Paste:=xlPasteValues, _ Operation:=xlNone, _ SkipBlanks:=False, _ Transpose:=False End Sub
退会済みユーザー

退会済みユーザー

2017/12/13 06:22

失礼しました、下記のコードに直してみたのですが、 「 Set pasteCell = pasteWs.Cells(pasteWs.Rows.Count, 1).End(xlUp).Offset(1)」のハイライトが消えません。 Option Explicit Sub 見積書DB化2() '前提条件 '- 転記元のシートを前面に表示していること '- 転記先のシートがこのマクロが書かれいるブックであること '転記元のシートを取得 'Excelで今アクティブなシート(Excel.ActiveWorkbookは省略可) Dim copyWs As Excel.Worksheet Set copyWs = Excel.ActiveWorkbook.ActiveSheet '転記先のシートを取得 'マクロが書かれているブックの、アクティブなシート Dim pasteWs As Excel.Worksheet Set pasteWs = Excel.ThisWorkbook.ActiveSheet '入力する空白セルの指定 Dim pasteCell As Excel.Range Set pasteCell = pasteWs.Cells(pasteWs.Rows.Count, 1).End(xlUp).Offset(1) '見積日を開いている転記元からコピーして転記先にペースト Dim mitumoridayCell As Excel.Range Set mitumoridayCell = copyWs.Cells(1, 1) pasteCell.Value() = mitumoridayCell.Value() '品名'を開いている転記元からコピーして転記先にペースト Set pasteCell = pasteWs.Cells(pasteWs.Rows.Count, "2").End(xlUp).Offset(1) Dim hinmeiCell As Excel.Range Set hinmeiCell = copyWs.Cells(12, 2) pasteCell.Value() = hinmeiCell.Value() '見積金額'を開いている転記元からコピーして転記先にペースト Set pasteCell = pasteWs.Cells(pasteWs.Rows.Count, "3").End(xlUp).Offset(1) Dim kingakuCell As Excel.Range Set kingakuCell = copyWs.Cells(12, 5) pasteCell.Value() = kingakuCell.Value() '項目~金額'を開いている転記元からコピーして転記先にペースト Set pasteCell = pasteWs.Cells(pasteWs.Rows.Count, "4").End(xlUp).Offset(1) Dim koumoku_kingakuCell As Excel.Range With copyWs Set koumoku_kingakuCell = _ .Range( _ .Range(.Cells(15, 1), .Cells(15, 5)), _ .Range(.Cells(15, 1), .Cells(15, 5)).End(xlToRight).End(xlDown) _ ) End With 'copyWs koumoku_kingakuCell.Copy pasteCell.PasteSpecial Paste:=xlPasteValues, _ Operation:=xlNone, _ SkipBlanks:=False, _ Transpose:=False End Sub
ExcelVBAer

2017/12/13 06:22

Cells(行番号,列番号) です。 番号は数値です。 ”1” は、文字としての「1」として扱われます。 Cells(1,2) の様に、数値としてセットしてください。 Rangeは、Cellsとは異なります。 使用方法は2パターン ①Range("アドレス") → 例:Range("A1") ②Range(Cells(), Cells()) → 例 Range(Cells(1,2), Cells(2,3))
ExcelVBAer

2017/12/13 06:28

動くはずですが、黄色ハイライトで「F8」を押しても、 同じエラーが出ますか? もし同じエラーが出る場合は、以下のようにして どこで止まるか検証してください。 Set pasteCell = pasteWs.Cells(pasteWs.Rows.Count, 1) Set pasteCell = pasteCell.End(xlUp) Set pasteCell = pasteCell.Offset(1) F8、F5、イミディエイトウィンドウ、ローカルウィンドウ、 ブレークポイント、を調べて勉強してください。
退会済みユーザー

退会済みユーザー

2017/12/13 07:21

かみくだいてわかりやすくさらなるご解説くださり、ありがとうございます! 自分で何を理解すべきかわかっていなかったので、調べるべきこともピンポイントで教えていただき、大変助かります。 引き続き調べてみます!ありがとうございます!
ExcelVBAer

2017/12/13 07:42 編集

回し者ではないですが、書籍であれば「ExcelVBAを実務で使い倒す技術」がオススメです(^^) 頑張ってください~
退会済みユーザー

退会済みユーザー

2017/12/13 07:46

参考書籍のご紹介まで、本当にありがとうございます!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問