| 
    
     |  | ▼りえ さん: 
 了解です。
 
 想像で書いているところもありますので当方の誤解あれば指摘願います。
 また、書いただけで動かしてはいません。不具合あれば指摘願います。
 
 ・もとのコードの構成のまま、途中で処理をうちきらずに、続行させることもできますが
 全体の制御が見えにくくなると思いましたので、処理部分をサブプロシジャ
 (実行したかどうかの戻り値付)にして外だしにしました。
 
 ・かつ、Sheet1側、Sheet2側ともに、対象シートが異なるだけで、全く同じ処理でしたので
 一本化しました。
 
 ・コード中にもコメント入れましたが
 
 For x = 1 To Cells(Rows.Count, 10).End(xlUp).Row
 If Range("G" & x).Value = "数" Then
 Range("J" & x).Value = "送"
 End If
 Next
 
 ここだけ、それぞれのセルが、どのシートかの指定がありません。
 追加しておいてください。
 
 Sub ボタン1_Click()
 Dim done As Boolean
 Dim bkB As Workbook
 Dim bkC As Workbook
 
 Application.ScreenUpdating = False
 
 Set bkB = Workbooks.Open("C:\東京\B.xls")
 Set bkC = Workbooks.Open("C:\東京\C.xls")
 
 'sheet1
 done = Proc(bkC.Worksheets("Sheet1"), bkB.Worksheets("Sheet1"))
 'sheet2
 done = Proc(bkC.Worksheets("Sheet2"), bkB.Worksheets("Sheet2"))
 
 bkB.Close SaveChanges:=False
 
 If done Then
 Application.DisplayAlerts = False
 bkC.SaveAs Filename:="\\サーバ名\フォルダ名1\共有フォルダ名2\" & bkC.Name
 Application.DisplayAlerts = True
 End If
 
 bkC.Close SaveChanges:=False
 
 Application.ScreenUpdating = True
 
 If done Then
 MsgBox "終わりました"
 Else
 MsgBox "処理すべきデータがありませんでした"
 End If
 
 End Sub
 
 Private Function Proc(sh1 As Worksheet, sh2 As Worksheet) As Boolean
 
 Dim r As Range
 Dim n As Long
 Dim i As Long, j As Long, k As Long
 Dim x As Long
 
 Set r = sh2.Range("A:I").Find("*", , xlValues, xlPart, xlByRows, xlPrevious)
 
 If r Is Nothing Then Exit Function
 
 n = Int((r.Row - 2) / 20)
 If n < 0 Then Exit Function
 
 Proc = True   '★実行された
 
 For i = 0 To n
 If i > 0 Then sh1.Range("A1:J33").Copy sh1.Cells(33 * i + 1, 1)
 For j = 1 To 9
 If j = 1 Then k = j Else k = j + 1
 sh1.Cells(33 * i + 12, k).Resize(20).Value = _
 sh2.Cells(20 * i + 2, j).Resize(20).Value
 Next
 Next
 
 '★以下の Cellsと2つのRange。どのシートでしょう? ここにも、sh1. なり sh2.なりを付けてください。
 
 For x = 1 To Cells(Rows.Count, 10).End(xlUp).Row
 If Range("G" & x).Value = "数" Then
 Range("J" & x).Value = "送"
 End If
 Next
 
 End Function
 
 
 |  |