2016-11-23 10 views
0

私は混乱のために謝罪します。私のカウント変数は1の値を超えて増分しません。

擬似コード: - > 2(j)のリストにゼロ

  • チェックするために、各項目を変数のカウントを設定し
  • リスト1(I)内の各アイテムの

    1. ここで明確にする試みを行きます
    2. リスト項目が1つカウント== 2は、他のものを行う場合はカウント== 1は、その後のもの(リスト2 ONE時間で見つかったリスト1つの項目)
    3. を行う場合は、リスト2つの項目は、カウンタや店舗値
    4. をインクリメント一致した場合(リスト2の1つの項目をリストするTWO回)
    5. 次の項目

    私の問題は、「ティッカー」変数は式の内部でインクリメント、しかし、カウントした場合、変数の値が「、このように1から2へのステートメントを変更したことがないてしまうことです= 2 "は決して発火しない。私の写真は、j Forループの各繰り返しでコードが壊れて、 "ティッカー"変数の値を監視する場所を示しています。 "ティッカー"が1から2に変わるはずの反復では、IFステートメント内の式が増分されていることを示していますが、ローカルウィンドウに表示されている変数の値は変更されません。

    enter image description here

    コード:

    For i = LBound(SAPanArray) To UBound(SAPanArray) 
          anString = Trim(Split(SAPanArray(i), " ")(0)) 
          ticker = 0 
          Set a = FindNextEmpty(Sheets("SAPdata").Range("F4")) 
    
          If IsInArrayC(anString, SAPanArray) = 0 Then 
           Sheets("SAPdata").Cells((a.Row), (a.Column)).Value = Sheets("SAPdata").Cells((i + 3), 9).Value 
           Sheets("SAPdata").Cells((a.Row), 7).Value = (Sheets("SAPdata").Cells((i + 3), 10).Value) * 2000 
           Sheets("SAPdata").Cells((a.Row), 7).Interior.Color = RGB(255, 192, 0) 
          Else 
           For j = LBound(SAPbulkArray) To UBound(SAPbulkArray) 
           SAPbulkArray = WorksheetFunction.Transpose(Sheets("SAPdata").Range("F4:F" & (Sheets("SAPdata").Range("F" & Cells.Rows.Count).End(xlUp).Row))) 
    
            If InStr((SAPbulkArray(j)), anString) > 0 Then 
             ticker = (1 + ticker) 
             dupArray(ticker) = Sheets("SAPdata").Cells((j + 3), 7).Value 
            End If 
    
            If ticker = 1 Then 
             If ((Sheets("SAPdata").Cells((i + 3), 10).Value) * 2000) <> (Sheets("SAPdata").Cells((j + 3), 7).Value) Then 
              Sheets("SAPdata").Cells((a.Row), (a.Column)).Value = Sheets("SAPdata").Cells((i + 3), 9).Value 
              Sheets("SAPdata").Cells((a.Row), 7).Value = (Sheets("SAPdata").Cells((i + 3), 10).Value) * 2000 
              Sheets("SAPdata").Cells((a.Row), 7).Interior.Color = RGB(255, 192, 0) 
             End If 
            ElseIf ticker = 2 Then 
             summer = (dupArray(1)) + ((Sheets("SAPdata").Cells((i + 3), 10).Value) * 2000) 
             If summer <> dupArray(2) Then 
              If Not IsEmpty(Sheets("SAPdata").Cells((j + 3), 11)) Then 
               Sheets("SAPdata").Cells((j + 3), 7).Value = Sheets("SAPdata").Cells((i + 3), 11).Value 
              End If 
    
              Sheets("SAPdata").Cells((i + 3), 11).Value = Sheets("SAPdata").Cells((j + 3), 7).Value 
              Sheets("SAPdata").Cells((i + 3), 11).Font.Color = vbWhite 
              Sheets("SAPdata").Cells((j + 3), 7).Value = ((Sheets("SAPdata").Cells((i + 3), 10).Value) * 2000) + Sheets("SAPdata").Cells((j + 3), 7).Value 
              Sheets("SAPdata").Cells((j + 3), 7).Interior.Color = RGB(255, 192, 0) 
             End If 
            End If 
    
           Next 
          End If 
         Next 
    
    +3

    forループの前にティッカー= 0を宣言するとどうなりますか? – Sami

    +4

    これは大量のコードです。人々は答えたいと思う質問をするために問題を絞り込んでください。 [mcve]と[ask]を参照してください。 –

    +4

    これはポイントの横にありますが、この行は「Dim counter、counter1、counters、duplicateCount、ticker As Long'という形式が悪いです。 ( 'ticker'を除く全ての変数はVariant型であり、' ticker'だけが 'Long'データ型です)。他の宣言文にも同じ運命があります。 –

    答えて

    1
      For i = LBound(SAPanArray) To UBound(SAPanArray) 
    
           anString = Trim(Split(SAPanArray(i), " ")(0)) 
           ticker = 0 
           Set a = FindNextEmpty(Sheets("SAPdata").Range("F4")) 
    
           If IsInArrayC(anString, SAPanArray) = 0 Then 
    
           Else 
            For j = LBound(SAPbulkArray) To UBound(SAPbulkArray) 
             If InStr((SAPbulkArray(j)), anString) > 0 Then 
              ticker = (1 + ticker) 
             End If 
    
             If ticker = 1 Then 
    
             ElseIf ticker = 2 Then 
    

    OKハック/すべてを大幅に削減するために私を許したが、これは私があなたの論理的な順序を読むことができます。

    あなたの推論のラインのせいで、ティッカーは実際には1つまたは0になる必要があります。

    ElseIf ticker =2 
    

    は、ティッカーはこれまで1より大きいことが必要でない限り、yoyuが自分に手間を省くことができ

    Elseif ticker = 0 
    

    OR

    Else 
    'some more code 
    

    であるべき。あなたが投稿したものでこれまでのところ、それは必要ありません。

    +2

    私はそれも考えていましたが、 'iループ'の中に 'j loop'があります(これは、コードが完全に働いていることを意味します) 'OPは' ticker =(1 + ticker) 'でティッカーをインクリメントします。 –

    +0

    これは可能な答えです、しかし、より詳細には、OPからこれを決定的に言う必要があります。 –

    +1

    ティッカーは1つまたは2つを参照する必要があるので、これは正解ではないように見えるので、ゼロはiのeahc反復の始めにリセットする必要があります。 –

    関連する問題