2017-12-22 7 views
-1

こんにちは私は同じExcelシートで2つのテーブルを比較しようとしています。以下は私が達成しようとしているものです。これは、VBAで行う必要があります。Excel VBA-一致する列の比較

A B C D  E   F G H  I  J   
E1 40 1 4 4/16/2017  E4 30  11/1/2017 
E2 20 1 5 6/22/2016  E2 20  11/1/2017 
E3 10 0 4 6/30/2017  E1 40  10/31/2017 
E4 30 1 6 3/10/2015  E3 10  10/31/2017 

TASK 1

If A matches F (Equipment numbers match) 
AND 
If B matches G (ID-Numbers match) 
AND 
If column C=1 (Equipment is in Service. C=0 means not in service) 

Then 
Update (copy/ paste) Column H with value in D (Update Inspection intervals from column D into H) 

But 
If A doesn’t match F (Equipment numbers DO NOT match) 
AND/ OR 
If B doesn’t match G (ID-Numbers DO NOT match) 

Highlight the cell in column A 

TASK 2

If A matches F (Equipment numbers match) 
AND 
If B matches G (ID-Numbers match) 
AND 
If C=1 (Equipment is in Service. C=0 means not in service) 
AND 
If Column I (Inspection Due date) has a red OR Pink Cell highlighted 

Then 
Update Column J with E (Update Inspection date (J) with Last Inspection date (E)) 
+0

はい、あなたの質問には意味があります。 –

+0

私はそれをより分かりやすくするためにいくつかの編集をしました。再度質問をご覧ください。どんな助けも本当にありがとう! – Afrokh

+2

通常、人々は何らかのコードが付いているか、少なくとも問題を解決しようと努力していることを示しています。これらの種類の質問は、誰もあなたを助けようとするだろうと判明しました。あなたの投稿に従ってください。あなたはvbaが何の役にも立っているのを知らないかもしれません。その後も助けようとすると、コードを貼り付ける方法がわからなくなります。このような質問をする前に研究をしてください。誠実に –

答えて

0

編集:あなたのコメントで提供、さらに情報の後、私は今、仕事のために働く必要があります以下のコードを、調整しています1、次にタスク2のためにあなたに示されたものを調整します:

Sub Task_1() 
    Dim X As Integer, Y as Integer, LastX as Integer 
    For X = 2 to 10000 
     If Range("A" & X).Value = "" Then Exit For 
    Next X 
    LastX = X - 1 
    For X = 2 to LastX 
     For Y = 2 to LastX 
      If Range("F" & Y).Value = Range("A" & X).Value Then 
       If Range("G" & Y).Value = Range("B" & X).Value Then 
        If CInt(Range("C" & X).Value) = 1 Then 
         Range("H" & Y).Value = Range("D" & X).Value 
         GoTo Found_It 
        End If 
       End If 
      End If 
     Next Y 
     Range("A" & X).Interior.Color = vbCyan 
Found_It: 
    Next X 
End Sub 

編集:Task_2のコードの問題は次のとおりです。1. 2つのEnd Subを1つのSubルーチンの最後にすることはできません。 2. 2つ以上の行を持つIf ThenステートメントのEnd Ifが必要です。 3. Andパラメータを組み合わせて、ネストされたIfの数を減らすことができます。 4.括弧を使用して変数に名前を付けることができます(大括弧はArray値用に予約されています)。以下は現在動作するはずです。

Sub Task_2() 
    Dim X As Integer, Y As Integer, LastX As Integer 
    Dim RGB1 As Long, RGB2 As Long 

    RGB1 = RGB(255, 153, 204) 
    RGB2 = RGB(255, 0, 0) 

    For X = 2 To 10000 
     If Range("B" & X).Value = "" Then Exit For 
    Next X 
    LastX = X - 1 
    For X = 2 To LastX 
     For Y = 2 To LastX 
      If Range("W" & Y).Value = Range("B" & X).Value And Range("N" & Y).Value = Range("D" & X).Value And CInt(Range("E" & X).Value) = 1 Then 
       If Range("I" & Y).Interior.Color.RGB = RGB1 Or Range("I" & Y).Interior.Color.RGB = RGB2 Then 
        Range("J" & Y).Value = Range("E" & X).Value 
        GoTo Found_It_2 
       End If 
      End If 
     Next Y 
     Range("B" & X).Interior.Color = vbCyan 
Found_It_2: 
    Next X 
End Sub 
+0

コメントは議論の延長ではありません。この会話は[チャットに移動]されています(http://chat.stackoverflow.com/rooms/161881/discussion-on-answer-by-sercho-excel-vba-compare-columns-for-matching)。 –

関連する問題