0

1 つのワークシートの 2 つの列を、別のワークシートの 2 つ (またはそれ以上) の列と一致させようとしています。

ワークシート データのサンプルを投稿しました。この 1 週間で何をしようとしていたかをうまく説明できれば幸いです。私は正しい軌道に乗っていると思いますが、2 つのワークシートを適切に参照する方法がわかりません。

私がやりたいのは、場所 1 の列を見て、その場所が場所 1 または場所 2 のいずれかで私の RefSheet を参照しているかどうかを確認することです。

一致する場合は、場所 2 が RefSheet の同じ行のどこかに一致するかどうかを確認したいと思います。一致する場合は、セルを黄色で強調表示し、RefSheet から ID 番号を取得します。

一致がない場合は、赤で強調表示するか、強調表示しません。

Sheet All
A       B               C               D
ID  Location 1  Location 2  Given ID
1   West    North   
2   North   South   
3   South   East    
4   East    West    
5   East    East    
6   South   West




Sheet RefSheet
A       B               C   
ID  Location 1     Location 2
1   West            North
2   West            East
3   South           East
4   South           North



What it should look like on the original Worksheet
A               B               C           D
ID          Location 1  Location 2      Given ID
1(Yellow)   West            North           1
2(Yellow)   North           South           4
3(Yellow)   South           East            3
4(Yellow)   East            West            2
5(Red)      East            East    
6(Red)      South           West    

これが私のひどいコードです

    Sub roadfinder()

    Dim lngLast As Long
    Dim lngCounter As Long
    Dim rCell As Range
    Dim lCnt As Long
    Dim nextIntersection
    Dim RefSheet As Worksheet
    Dim list As Worksheet

    Set intersections = ThisWorkbook.Sheets("RefSheet")
    Set crashes = ThisWorkbook.Sheets("All")


    Application.ScreenUpdating = False
    lngLast = Cells(Rows.Count, "B").End(xlUp).Row
    For lngCounter = 2 To lngLast
        With Cells(lngCounter, "B")

            For Each rCell In RefSheet.Range("B1", RefSheet.Cells(RefSheet.Rows.Count, 1)).Cells
            lCnt = lCnt + 1

                'I wasn't sure what to put as a reference to
                If .Value = "" Then
                    .Interior.ColorIndex = 6

                End If

            Next rCell
        End With
    Next lngCounter

    Application.ScreenUpdating = True

End Sub 
4

1 に答える 1

0

実際、プログラミングをしなくても、簡単な Excel の数式で簡単に実行できます。指定された ID の列のセル 2 に次の配列数式を入力するだけです。

=SUM(SIGN((B2=Refsheet!$B$2:$B$5)*(C2=Refsheet!$C$2:$C$5)+(B2=Refsheet!$C$2:$C$5)*(C2=Refsheet!$B$2:$B$5))*Refsheet!$A$2:$A$5)

そして、この式を列全体にコピーします(例で提供したように、入力場所は列B、Cにあり、RefSheetの範囲はA2〜C5にあると想定しています)ただし、Refsheetに名前付き範囲を作成することをお勧めします、その式は次のようになります。

=SUM(SIGN((B2=Ref_Loc1)*(C2=Ref_Loc2)+(B2=Ref_Loc2)*(C2=Ref_Loc1))*Ref_ID)

(これは配列数式である必要があります)。ID を取得したら、ID が 0 (見つからないことを意味する) であるかどうかに基づいて、入力セルの条件付き書式を簡単に作成できます。ID がゼロではなく数値であるためには、refsheet の場所のペアが一意であることが不可欠です。

于 2012-06-07T18:13:41.140 に答える