• ベストアンサー

完全一致の件検索とその修正について

誠にすみませんが おねがいします。 エクセルで注文書と入荷の受入処理を行いたくマクロを作ってます。 途中 みなさんからお聞きしたマクロ文を参考にしてます。 注文書発行後そのデータをT_注文シートに最終行を確認して貼り付けます。 受入処理はそのT_注文シートの項目の注文番号を指定して T_受入処理シートに張ります。ここで 受入の諸事項を記入して再度、 T_注文シートにID番号で完全一致させ上書きさせたいと考えてます。 しかし、下記のマクロだと途中の '既存データの修正 x.PasteSpecial _ Paste:=xlPasteValues, Operation:=xlNone, _ SkipBlanks:=False, Transpose:=True で デバックしてとまります。ローカルウィンドで確認したら xはNothingでした。 なぜでしょうか?教えてください。 マクロの全文です。 Sub 受入処理() Dim z As Long '[T_注文]シートの最終行番号 Dim x As Range '検索したセル '画面を固定 Application.ScreenUpdating = False If Range("T_受入処理!C21").Value = "" Then MsgBox "受入有無が未記入です。確認してからこの処理をおこなってください。", vbOKOnly, "オービットベース データ有無確認" Exit Sub End If If Range("T_受入処理!C22").Value = "" Then MsgBox "受入日が未記入です。確認してからこの処理をおこなってください。", vbOKOnly, "オービットベース データ有無確認" Exit Sub End If If Range("T_受入処理!C23").Value = "" Then MsgBox "受入数が未記入です。確認してからこの処理をおこなってください。", vbOKOnly, "オービットベース データ有無確認" Exit Sub End If If Range("T_受入処理!C24").Value = "" Then MsgBox "受入単価が未記入です。確認してからこの処理をおこなってください。", vbOKOnly, "オービットベース データ有無確認" Exit Sub End If '入力したデータをコピー Range("c5:c24").Copy '[T_注文]シートを選択 Sheets("T_注文").Select '最終行番号を取得 z = Range("a1").End(xlDown).Row '[番号]を検索(ここをみなさんから教えていただきました。) Set x = Range("a2:a" & z).Find(What:=Range("T_受入処理!c5").Value, _ LookIn:=xlValues, _ LookAt:=xlWhole) '既存データの修正 x.PasteSpecial _ Paste:=xlPasteValues, Operation:=xlNone, _ SkipBlanks:=False, Transpose:=True 'コピーモードを解除 Application.CutCopyMode = False MsgBox "この品目の受入処理を完了しました。", vbOKOnly, "オービットベース:受入処理完了" '[入力]シートを選択 Sheets("T_受入処理").Select '画面の固定を解除 Application.ScreenUpdating = True

質問者が選んだベストアンサー

  • ベストアンサー
  • onlyrom
  • ベストアンサー率59% (228/384)
回答No.3

先ず、注文シートの最終行がちゃんと取得されてるかどうか確認すべきでしょう。 '-------------------------------------------- '最終行番号を取得 z = Range("a1").End(xlDown).Row   MsgBox z   '●最終行取得の確認! '[番号]を検索(ここをみなさんから教えていただきました。) '------------------------------------------------------- それから、 x.PasteSpecial の引数Transposeが、Trueになっているのはなぜ? こういう類の質問の場合は、質問の文言で受取り方が大分変るので ちゃんと各シートのレイアウトを提示すべきかと。 さすれば、即解決でせう。(^^;;; 以上。  

その他の回答 (2)

  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.2

Set x = Range("a2:a" & z).Find(What:=Range("T_受入処理!c5").Value, _ LookIn:=xlValues, _ LookAt:=xlWhole, _ SearchOrder:=xlByColumns) '←追加 検索する方向を指定してみるとか。

  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.1

例えばID番号を表示形式で頭に”0”とかつくようにしている、 と言う事はないですか?

K-19New
質問者

お礼

有難うございます。 表示形式は数値にしてあります。

関連するQ&A