Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


53229 / 76732 ←次へ | 前へ→

【28321】Re:差額チェック
回答  りん E-MAIL  - 05/9/2(金) 14:20 -

引用なし
パスワード
   Help me!! さん、こんにちわ。
一部修正。

Sub test()
  Dim wb As Workbook, ws1 As Worksheet
  Dim r1 As Range, r2 As Range, r3 As Range, Rpos1&, Rpos2&, Rpos&
 
  Set wb = ActiveWorkbook
  Set ws1 = Application.Workbooks.Add.Worksheets(1) '新しいブック
  '
  With wb.Worksheets("A")
   Rpos1& = .Range("A65536").End(xlUp).Row
   Set r1 = .Range(.Cells(2, 1), .Cells(Rpos1&, 2))
  End With
  With wb.Worksheets("B")
   Rpos2& = .Range("A65536").End(xlUp).Row
   Set r2 = .Range(.Cells(2, 1), .Cells(Rpos2&, 2))
  End With
  '
  With ws1
   '
   .Range("A1").Value = "管理番号"
   .Range("B1").Value = "金額A"
   .Range("C1").Value = "金額B"
   '値だけ貼る
   r1.Copy: .Cells(2, 1).PasteSpecial xlValue
   .Cells(2, 4).Value = 100001
   .Range(.Cells(2, 4), .Cells(Rpos1&, 4)).DataSeries Rowcol:=xlColumns, Type:=xlLinear, Step:=1, Trend:=False
   '
   '下に追加
   r2.Copy: .Cells(Rpos1& + 1, 1).PasteSpecial xlValue
   Rpos2& = .Range("A65536").End(xlUp).Row '位置再計算
   .Cells(Rpos1& + 1, 4).Value = 200001
   .Range(.Cells(Rpos1& + 1, 4), .Cells(Rpos2&, 4)).DataSeries Rowcol:=xlColumns, Type:=xlLinear, Step:=1, Trend:=False
 
   '戻す為のソートキーをDに付与
   '並べ替え
   .Range(.Cells(2, 1), .Cells(Rpos2&, 4)).Sort key1:=.Cells(2, 1), Order1:=xlAscending, _
                         key2:=.Cells(2, 4), Order2:=xlAscending, _
                         Header:=xlNo, SortMethod:=xlStroke
 
   '
   Set r3 = .Cells(Rpos2& + 1, 4) '無条件で削除してもよい行
   Rpos& = Rpos2&
   '
   Do
     If .Cells(Rpos&, 1).Value = .Cells(Rpos& - 1, 1).Value Then
      If .Cells(Rpos&, 2).Value = .Cells(Rpos& - 1, 2).Value Then
        '削除対象
        Set r3 = Application.Union(r3, .Cells(Rpos&, 4), .Cells(Rpos& - 1, 4))
      Else
        'データを繰り上げて1つ削除
        .Cells(Rpos, 2).Cut .Cells(Rpos - 1, 3)
        Set r3 = Application.Union(r3, .Cells(Rpos&, 4))
      End If
      Rpos& = Rpos& - 1
     Else
      If .Cells(Rpos, 4).Value > 200000 Then _
        .Cells(Rpos, 2).Cut .Cells(Rpos, 3)
     End If
     Rpos& = Rpos& - 1
   Loop While Rpos& > 2
   r3.EntireRow.Delete
   'ソートして元のならびに戻す
   Rpos2& = .Range("A65536").End(xlUp).Row
   .Range(.Cells(2, 1), .Cells(Rpos2&, 4)).Sort key1:=.Cells(2, 4), Order1:=xlAscending
   'ソートキー削除
   .Columns(4).Delete
   .Range("A1").Select
  End With
  '
  Set r1 = Nothing: Set r2 = Nothing: Set r3 = Nothing
  Set ws1 = Nothing: Set wb = Nothing
End Sub
今は時間がとれないので、わからないところがあれば解説はまた後ほど。
1 hits

【28286】差額チェック Help me!! 05/9/2(金) 8:06 質問
【28287】Re:差額チェック ちくたく 05/9/2(金) 8:57 発言
【28289】Re:差額チェック Help me!! 05/9/2(金) 9:28 質問
【28290】Re:差額チェック だるま 05/9/2(金) 10:25 発言
【28291】Re:差額チェック Help me!! 05/9/2(金) 10:42 質問
【28295】Re:差額チェック だるま 05/9/2(金) 11:32 発言
【28297】Re:差額チェック Help me!! 05/9/2(金) 11:47 質問
【28298】Re:差額チェック こたつねこ 05/9/2(金) 11:56 発言
【28299】Re:差額チェック こたつねこ 05/9/2(金) 12:00 発言
【28318】Re:差額チェック Help me!! 05/9/2(金) 13:59 質問
【28320】Re:差額チェック Help me!! 05/9/2(金) 14:06 発言
【28322】Re:差額チェック こたつねこ 05/9/2(金) 14:29 発言
【28324】Re:差額チェック Help me!! 05/9/2(金) 14:36 質問
【28330】Re:差額チェック こたつねこ 05/9/2(金) 15:30 回答
【28300】Re:差額チェック ちくたく 05/9/2(金) 12:04 回答
【28301】Re:差額チェック m2m10 05/9/2(金) 12:12 回答
【28307】Re:差額チェック Help me!! 05/9/2(金) 13:00 質問
【28309】Re:差額チェック m2m10 05/9/2(金) 13:06 回答
【28312】Re:差額チェック Help me!! 05/9/2(金) 13:26 質問
【28315】Re:差額チェック m2m10 05/9/2(金) 13:42 発言
【28317】Re:差額チェック m2m10 05/9/2(金) 13:56 発言
【28308】Re:差額チェック りん 05/9/2(金) 13:03 回答
【28310】Re:差額チェック Help me!! 05/9/2(金) 13:13 質問
【28321】Re:差額チェック りん 05/9/2(金) 14:20 回答
【28325】Re:差額チェック Help me!! 05/9/2(金) 14:42 質問
【28326】Re:差額チェック m2m10 05/9/2(金) 15:11 発言
【28332】助けてくださった皆様へ! Help me!! 05/9/2(金) 16:06 お礼

53229 / 76732 ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free