2012-03-02 9 views
0

sheet2の列Aの一意の値のリストの最初の値を取得し、それに対して検索するVBAコードを作成しようとしていますsheet1の列Aの一意の値。これが見つかると、sheet1のアクティブなセルの右側のセル6をsheet2の一意のコードに隣接する値で更新します。それは空のセルに達するまで、シート2の残りのリストを実行し続けます。Excel VBA - sheet2のsheet1から値を検索し、sheet1の隣接値で更新する

私は一意の値を検索し、1を追加することによって、右にセル6を更新するためのコードを取得するために管理してきましたが、私は他のビットをうまくすることはできません。

Private Sub SinglePaste_Click() 
    On Error GoTo InvalidBarcode 
    Dim EAN As Range 
     Sheets("Paste Here").Select 
      For Each EAN In ActiveSheet.Range("A:A") 
      Sheets("Master Stock File").Select 
      With Worksheets("Master Stock File") 
      .Range("A:A").Find(What:=EAN, After:=.Range("A1"), LookIn:=xlFormulas, _ 
      LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _ 
      MatchCase:=False).Activate 
     ActiveCell.Offset(0, 6).Select 
     ActiveCell.Value = ActiveCell.Value + 1 
     End With 
     If IsEmpty(EAN) Then Exit For 
     Next EAN 
    Exit Sub 
    InvalidBarcode: 
    MsgBox ("Invalid Barcode - " & "" & EAN) 
    End Sub 

はこれを行います理にかなっている?どんな助けでも大歓迎です。

+1

あなたはうまくいかない "空のセルまで実行しているか、または他のシートに対応する一意のコードを見つけるか?両方のシートが同じユニークなコードを持っているのか、あるシートに欠けているのでしょうか? – Ryan

答えて

1

あなたのコードでは、マクロレコーダーを示す多くのActiveSheet、ActiveCell、およびSelectが使用されており、一般的に効率が悪いです。私はまだあなたが参照している "他のビット"が何であるかは分かりませんが、ここに修正されたマクロがあります:

Public Sub NewSinglePaste_Click() 
    Dim EAN As Range 
    Dim FoundRange As Range 
    Dim ValueCell As Range 
    Dim MasterSheet As Worksheet 
    Dim PasteSheet As Worksheet 

    Set MasterSheet = Sheets("Master Stock File") 
    Set PasteSheet = Sheets("Paste Here") 

    On Error GoTo InvalidBarcode 
    For Each EAN In PasteSheet.Range("A:A") 
    If IsEmpty(EAN.Text) Or EAN.Text = "" Then Exit For 

    Set FoundRange = MasterSheet.Range("A:A").Find(What:=EAN, _ 
     After:=MasterSheet.Range("A1"), LookIn:=xlFormulas, LookAt:=xlPart, _ 
     SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False) 

    If Not (FoundRange Is Nothing) Then 
     Set ValueCell = FoundRange.Offset(0, 6) 
     ValueCell.Value = ValueCell.Value + 1 
    Else 
     Debug.Print "Cell not found: " & EAN.Worksheet.Name & "!" & EAN.Address 
    End If 
    Next EAN 

    Exit Sub 

InvalidBarcode: 
    MsgBox ("Invalid Barcode - " & "" & EAN) 

End Sub 
+0

彼は 'FoundRange.Offset(0、6)'を 'EAN.Offset(0,1)'の値で更新したいと思うと思います。 –

+0

あなたの助けに感謝します。私が説明しようとしていたのは、Sheet1(「マスタストックファイル」)に一意のIDの確定リストがあり、Sheet2(「ここに貼り付け」)は、これらのIDは、マスターストックファイルシートの特定の値を更新するために使用される他のデータと一緒に使用されます。私が苦労していた部分は、マスターストックファイルの見つかったEANの右側にあるセル6に1を追加するのではなく、IDの横にある数量を「ここに貼り付け」シートに追加したいと思っていました。ティムは何を言いましたか? –

+1

...おそらく、+ EAN.Offset(0,1)を追加すると完璧に動作します。両方とも大変ありがとうございます。 –

関連する問題