2016-12-09 39 views
1

私はフォームsheet3からデータを取り出し、別のシートにデータを転送するコードを書いています。この部分はすべてOKです。 同様のクリックで、同じ書式のデータを見てください。sheet3Item's ID(それは列Aにあります)、塗りつぶされた各行からsheet1(列C)の一致が見つかります。次に、一致が存在する行を識別し、セル(列I)の減算を行うコード一致が検出されます。つまり、値をフォームsheet3から取得します。それは列4にあります。次に - >行では一致が - >列になります。この値を使って減算します。sheet3 透明のために印刷画面が添付されています。は別のシートのデータを更新する必要があります。

enter image description here

Option Explicit 

    Sub Button4_Click() 
    Dim x As Long 
    Dim erow As Long 
    Dim y as Long 
    Dim roww as Long 
    Dim matchess as Integer 
    Dim IDitem as Integer 
    Dim myrange as Long 

    'Calculate starting rows 
    x = 15 
    With Worksheets("sheet2") 
     erow = .Cells(.Rows.Count, 1).End(xlUp).Offset(1, 0).Row 
    End With 
    myrange = Worksheets("sheet1").Cells.Range("C:I") 

    With Worksheets("sheet3") 
     Do While .Cells(x, 1) <> "" 

      'The next line copies values to Sheet2 
      Worksheets("sheet2").Range("A" & erow & ":Z" & erow).Value = .Range("A" & x & ":Z" & x).Value 

      'increment row counters 
      x = x + 1 
      erow = erow + 1 
     Loop 
    End With 
    y = 15 
    With Worksheets("sheet1") 
     Do While Worksheets("sheet3").Cells(y, 1) <> "" 
      matchess = Worksheets("sheet3").Cells(y, 1) 
      IDitem = Application.WorksheetFunction.VLookup(matchess, myrange, 4, False) 
      roww = Application.Match(matches, myrange, 0) 
      .cell(roww, 7).Value = .cell(roww, 7).Value - IDitem 
     y = y + 1 
     Loop 
    End With 

End Sub 

私は理由を知りませんが、コードの第二部では動作しません。

追加情報:sheet3:行は15から始まり、マージ列AとBのアイテムID。マージ列 "S、T、U"の量。 sheet1:列Cの商品ID、列Iの在庫、

Guysは、私はこのような問題に対処するために、過去に.Find方法を使用しているコード

+0

(a)変数を宣言してください。 (b)あなたが(a)を確実に行うためには 'Option Explicit'を使います。 (c)「コードの2番目の部分はうまくいかない」と言っているが、何を意味するのかわからないので、Set IDItem行にタイプの不一致が表示されていると推測している。もしそうなら、そのステートメントから 'Set'を取り除いてください。 - VLookupはオブジェクトを返さないので、その(存在しない)オブジェクトを指すように変数を設定するのは不適切です。 – YowE3K

+0

クリックしてもエラーが表示されず、転送以外に何も起こらないことを意味します。シート1の在庫は減少しません。私は変数を宣言しますが、私は何も起こらないと言いました。 –

+0

(a)あなたの 'Do While Worksheheheets(" sheet3 ")。セル(x、1)<>" "'ステートメントは、このステートメントに達する前に、行xの列Aのセルが確実に ""になるように値を設定します。 (b)あなたの変数に 'myrange'、' matchess'、 'matches'、' IDitem'、 'roww'など私が見逃している変数を宣言しているコードのビットを質問に含めてください。 – YowE3K

答えて

0

を修正するために私を助けて。コードにループの説明が含まれていますが、必要であれば詳しく説明します。

Sub Find_Method() 

    Dim LastRow_1 As Long 
    Dim LastRow_3 As Long 

    Dim Source_Item_ID_Range As Range 
    Dim Search_Item_ID_Range As Range 
    Dim Item_ID_Found_Cell As Range 
    Dim Cell As Range 

    LastRow_1 = Worksheets("Sheet1").Range("C" & Rows.Count).End(xlUp).Row 
    LastRow_3 = Worksheets("Sheet3").Range("A" & Rows.Count).End(xlUp).Row 

    Set Search_Item_ID_Range = Worksheets("Sheet1").Range("C4:C" & LastRow_1) 
    Set Source_Item_ID_Range = Worksheets("Sheet3").Range("A15:A" & LastRow_3) 

    'For each Item ID cell in Sheet3, search for its 
    'string in the Item ID column of Sheet1. If a match 
    'is found, deduct 1 from the Warehouse Stock column 
    'and move on to the next cell. 

    For Each Cell In Source_Item_ID_Range 

     Set Item_ID_Found_Cell = Search_Item_ID_Range.Find(Cell.Value, LookIn:=xlValues) 

     If Not Item_ID_Found_Cell Is Nothing Then 

      Item_ID_Found_Cell.Offset(0, 6).Value = Item_ID_Found_Cell.Offset(0, 6).Value - Cell.Offset(0, 3).Value 

     End If 

    Next Cell 

End Sub 
+0

ありがとうMJV。このコードは既にどこかにあります。しかし、面倒な問題。私は理由を知ることができませんが、シート ' –

+0

ありがとうMJV。このコードはすでにどこかにあります。しかし、いくつかの問題があります。なぜ私はなぜか分からないが、最初の空行の 'sheet1'には、コードをクリックした後の6列目に負の数が書かれている(例えば、私は-34を得た)。私はそれはいくつかの計算だが、何を、そして第二のものを捕まえていないのか分からない。今は、式が1ではなく、sheet3の列4から値をとり、sheet1、すなわちItem_ID_Found_Cell.Offset(0、6).Value' - '*****。Value'の算術演算を行う変数をいくつか追加する必要があります。 。私はそれをしようとしたが、エラーが発生しました。あなたはその問題と、最終的にどのようにコードを見ていくべきかを教えてくれますか? –

+0

シート3の第4列の値が1ではなくシート1から控除されるようにコードを変更しました。 – MJV

関連する問題