マクロで”在庫管理”をしようとしています。
”在庫表”シートのI列の2行目(セル;I2)に「整理番号」のタイトル、データは3行目から下方向に4桁の数値で並べて200行程度あります。(行方向には、仕入日、商品名、仕入先、金額などのデータが入れてあります。)

「売上入力シート」に、売れた「整理番号」をセル:D3から下方向に数量分入力し、それを売上表に転記(ここは出来ました)後、在庫表から売れた「整理番号」を含む行を削除したいのですが、これの”マクロコード”ができず、悩んでおります。

ヒントでも教えていただければ、助かります。
マクロの勉強を始めて数ヶ月の初心者ですが、よろしくお願いします。

このQ&Aに関連する最新のQ&A

A 回答 (1件)

こんにちは。



行削除をするときに
上の行から下に向かって処理をされていませんか?

行削除をループ処理で回すときは
下の行から始めて上に向かうのが基本です。
(上から始めてもできないことはありませんが‥)

↓を試してみてください。
◆シート名は「在庫表」「売上入力」ですよね?
-----------------------------------------------------------
Sub test()
  Dim sh As Worksheet, sh2 As Worksheet
  Dim i As Long, j As Long
  Dim cntDelete As Long, ZaikoRow As Long, UriageRow As Long

  Set sh = Worksheets("在庫表")
  Set sh2 = Worksheets("売上入力")

  Application.ScreenUpdating = False

  '「在庫表」I列の最終行を取得
  ZaikoRow = sh.Range("I65536").End(xlUp).Row

  '「売上表」D列の最終行を取得
  UriageRow = sh2.Range("D65536").End(xlUp).Row

  '「在庫表」の最終行から3行目まで削除処理
  For i = ZaikoRow To 3 Step -1
    For j = 3 To UriageRow
      If sh.Cells(i, "I").Value = sh2.Cells(j, "D").Value Then
        sh.Cells(i, "I").EntireRow.Delete
        cntDelete = cntDelete + 1

        Exit For

      End If
    Next j
  Next i
  sh.Activate
  Application.ScreenUpdating = True

  If cntDelete > 0 Then
    MsgBox cntDelete & "件、削除しました。"
  Else
    MsgBox "在庫表から削除するデータはありませんでした。"

  End If

  Set sh = Nothing
  Set sh2 = Nothing

End Sub
-------------------------------------------------------------
    • good
    • 0
この回答へのお礼

AloneAgain 様
早速のご回答ありがとうございました。
教えていただきましたコードをペーストし、祈る気持ちでマクロを実行したところ、なんと!期待どおりの結果で在庫表から削除できておりました。
今日は快晴の日曜日。悩みが削除されまして、気分は上々です。これから、このコードを10回くらい読み直し、理解、応用ができるようにします。

ありがとうございました。

お礼日時:2005/04/17 10:56

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


人気Q&Aランキング

おすすめ情報