いつも助けていただいてありがとうございます。
「抽出」シートのデータを[予定表]シートに値のみコピーするコードをここで教えてもらいながら書いたのですが、同じように記載しているはずなのに、15:00でフィルターするところだけフィルターを書けているところだけ「1004 コピー領域と貼り付けの領域のサイズが違うため・・」と143行目でエラーがでてしまいます。
何度見直しても、どうしてエラーになるのか解決できません。
どこが原因でエラーになるのかわかりません。
どのように記載すれば解決できるのか教えていただけませんか。
ファイルの環境
シート3つ:[予定表][データ一覧][抽出]
仕様
予定表に1日目(L2)、2日目(M2)の日付をセットする。
セットされたデータで1日目と2日目を判断する。
セットされた日付と時間でソートする。
抽出シートに抽出されたデータを予定表に値のみ張り付ける
データ
エラー詳細
全く同じデータで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
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。