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

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

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

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

マクロ

定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。

Q&A

解決済

1回答

6381閲覧

EXCEL VBA「エラー番号:1004 コピー領域と貼り付けの領域のサイズが違うため・・」となぜエラーになるのか教えてほしい

kotatsu2

総合スコア16

VBA

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

マクロ

定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。

0グッド

0クリップ

投稿2021/05/23 15:34

いつも助けていただいてありがとうございます。
「抽出」シートのデータを[予定表]シートに値のみコピーするコードをここで教えてもらいながら書いたのですが、同じように記載しているはずなのに、15:00でフィルターするところだけフィルターを書けているところだけ「1004 コピー領域と貼り付けの領域のサイズが違うため・・」と143行目でエラーがでてしまいます。

何度見直しても、どうしてエラーになるのか解決できません。
どこが原因でエラーになるのかわかりません。
どのように記載すれば解決できるのか教えていただけませんか。

ファイルの環境

シート3つ:[予定表][データ一覧][抽出]

仕様

予定表に1日目(L2)、2日目(M2)の日付をセットする。
セットされたデータで1日目と2日目を判断する。
セットされた日付と時間でソートする。
抽出シートに抽出されたデータを予定表に値のみ張り付ける

データ

1件以上のデータでエラーになります。
イメージ説明

エラー詳細

全く同じデータで1日目のデータ列(J)ではエラーにならず、2日目のデータ列(N)でエラーになる。
イメージ説明

Option Explicit Sub Schedule22() '予約表の予約2回目にセットされている日付でフィルターをかけ、予約時間とIDでソートする。 On Error GoTo Catch Dim i, coun As Integer, str As String, day1, bookday As Date Application.ScreenUpdating = False '画面の表示を止める 'データ一覧を表示する Sheets("データ一覧").Activate '2日目の予約日を取得する bookday = Sheets("予定表").Range("M2").Value '予約データを各開始時刻でフィルターし、予約表に張り付ける Call Yoyaku155(bookday) 'フィルタを再度設定しておく With Sheets("データ一覧") .AutoFilterMode = False '念のためフィルタを解除して再設定 If Not .AutoFilterMode Then .Range("A1:W1").AutoFilter End If End With '予定表を再表示する Sheets("予定表").Select Application.ScreenUpdating = True '画面を再表示する MsgBox "処理が終了しました" Exit Sub Catch: Call LogErrorMessage("Schedule2") End Sub Sub Yoyaku155(ByVal bookday As Date) '15時開始の予約 Dim i As Integer, str As String, day1, day2 As Date '抽出シートをクリアする Sheets("抽出").Cells.clear day1 = Sheets("予定表").Range("L2").Value day2 = Sheets("予定表").Range("M2").Value With Sheets("データ一覧") '一旦フィルタを解除 .AutoFilterMode = False 'セットされた日付と患者番号でオートフィルをかける(〇月〇日) If bookday = day1 Then .Range("A1").AutoFilter field:=9, field:=1, Criteria1:=Format(day1, "m月d日") '15時開始を絞り込む .Range("A1").AutoFilter field:=10, field:=1, Criteria1:="15:00" ElseIf bookday = day2 Then .Range("A1").AutoFilter field:=13, field:=1, Criteria1:=Format(day2, "m月d日") '15時開始を絞り込む .Range("A1").AutoFilter field:=14, field:=1, Criteria1:="15:00" End If '抽出シートに貼り付け Sheets("データ一覧").Activate 'アクティブシートのデータの数をカウントする i = ActiveSheet.AutoFilter.Range.Columns(1).SpecialCells(xlCellTypeVisible).Count - 1 'ここで件数を数えて、件数が0件ならCounterFilterで処理を抜ける If i = 0 Then '11時台の予約が0件の場合、シートのクリアだけ Sheets("予定表").Range("C184:J213").ClearContents '15時開始のシートをクリアする Else '上記以外の場合、オートフィルの結果を抽出シートにコピーする .Range("W1", .Range("A1").End(xlDown)).SpecialCells(xlCellTypeVisible).Copy Sheets("抽出").Range("A1") 'ここから予定表にデータを張り付ける準備 5/21 Sheets("予定表").Range("C184:J213").ClearContents '15時開始のシートをクリアする '抽出からデータを予定表に張り付ける(Data1Copy15へ)15時開始 Call Data1Copy15 End If End With End Sub Sub Data1Copy155() '開始時間15時の予約を張り付ける On Error GoTo Catch Dim i As Integer Dim ws1 As Worksheet Dim ws2 As Worksheet Set ws1 = Worksheets("抽出") Set ws2 = Worksheets("予定表") '抽出シートをアクティブにする Sheets("抽出").Activate '抽出シートのデータの数をカウントする With Sheets("抽出") i = .Range(Range("A1"), Cells(Rows.Count, 1).End(xlUp)).SpecialCells(xlCellTypeVisible).Count End With 'ここに1件のデータ場合は、rowでコピーする。それ以外は下の処理 'ここで件数を数えて、件数が0件ならCounterFilterで処理を抜ける '30件以上の予約は予約表に転記できないため、ここで抜ける If i > 31 Then '件数が30件以上の場合はメッセージのみ表示 MsgBox "15時の予約が30件以上あります。予定表に表示できません。" 'ここで抜ける Exit Sub ElseIf i = 2 Then Sheets("予定表").Range("C184").Value = Sheets("抽出").Range("B2").Value '名前を張り付ける Sheets("予定表").Range("D184").Value = Sheets("抽出").Range("L2").Value '名前を張り付ける Sheets("予定表").Range("J184").Value = Sheets("抽出").Range("M2").Value '名前を張り付ける Sheets("予定表").Range("F184").Value = Sheets("抽出").Range("F2").Value '名前を張り付ける Sheets("予定表").Range("G184").Value = Sheets("抽出").Range("G2").Value '名前を張り付ける Else myCopyPaste ws1.Range("B2"), ws2.Range("C184") '名前を張り付ける myCopyPaste ws1.Range("L2"), ws2.Range("D184") '1回目の実施日を張り付ける myCopyPaste ws1.Range("M2"), ws2.Range("J184") '2回目の予定日を張り付ける myCopyPaste ws1.Range("F2"), ws2.Range("F184") '電話番号①を張り付ける myCopyPaste ws1.Range("G2"), ws2.Range("G184") '電話番号②を張り付ける 'Range(Cells(1,7),Cells(i,7)) 'myCopyPaste ws1.Range("G2", Cells(i, "G")), ws2.Range("G64") '電話番号②を張り付ける 'myCopyPaste ws1.Range("K2"), ws2.Range("H64") '問診表①を張り付ける 'myCopyPaste ws1.Range("O2"), ws2.Range("I64") '問診表②を張り付ける End If '選択範囲を解除する Sheets("予定表").Select ws2.Range("C4").Select Exit Sub Catch: Call LogErrorMessage("Data1Copy155") End Sub

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

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

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

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

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

guest

回答1

0

自己解決

すみません。
さっき何度やってもエラーになっていたのですが、なぜか正常に動きだしました。
ありがとうございました。

投稿2021/05/23 15:39

kotatsu2

総合スコア16

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問