1289221935 Excelの質問です。

2回比較して、一致すれば隣の列に○印をつけたいです。

Excelで今、「都市.xls」というブックのSheet1のA列には、

香港
ロサンゼルス
東京




と、都市の名前が並んでいます。
そしてC列には、


U.S.A
中国
日本

と、国名が並んでいます。

同じく、「街.xls」というブックのSheet1には、

東京
香港
アムステルダム




と、街の名前が並んでいます。
そしてC列には、

日本
中国
U.S.A

と、国名が並んでいます。

マクロによって、2つのブックおよびシートのA列を比較し、A列のデータが一致すれば、B列に、○か×かの判定をします。
一致した場合、隣の(C列の同じ行の)セルの比較に入ります。
一致しなかったものは、終了します。

同じく、C列同士のデータが一致すれば、隣のD列に、一致したという印(○印など)を挿入したいのです。

B列、D列にもしデータがあった場合は、強制的にB列、D列を挿入する形でも構いません。

何とかこの2段階に及ぶデータ比較を、マクロで出来ないでしょうか?
よろしくお願いします<m(__)m>

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2010/11/09 21:56:58
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:taknt No.1

回答回数13539ベストアンサー獲得回数1198

ポイント100pt
Sub チェック()

a = "街.xls"
a1 = "Sheet1"  '街のシート名
z = "都市.xls"
z1 = "Sheet1"   '都市のシート名

For b = 1 To 65536
    If Workbooks(z).Worksheets(z1).Cells(b, "A") = "" Then Exit For
    f = 0
    For c = 1 To 65536
        If Workbooks(a).Worksheets(a1).Cells(c, "A") = "" Then Exit For
        
        If Workbooks(a).Worksheets(a1).Cells(c, "A") = Workbooks(z).Worksheets(z1).Cells(b, "A") Then
            Workbooks(z).Worksheets(z1).Cells(b, "B") = "○"
            Workbooks(a).Worksheets(a1).Cells(c, "B") = "○"
            f = 1
            If Workbooks(a).Worksheets(a1).Cells(c, "C") = Workbooks(z).Worksheets(z1).Cells(b, "C") Then
                Workbooks(z).Worksheets(z1).Cells(b, "D") = "○"
                Workbooks(a).Worksheets(a1).Cells(c, "D") = "○"
            Else
                Workbooks(z).Worksheets(z1).Cells(b, "D") = "×"
                Workbooks(a).Worksheets(a1).Cells(c, "D") = "×"
            End If
        End If
    Next c
    
    If f = 0 Then Workbooks(z).Worksheets(z1).Cells(b, "B") = "×"
    
Next b

For b = 1 To 65536
    If Workbooks(a).Worksheets(a1).Cells(b, "A") = "" Then Exit For
    If Workbooks(a).Worksheets(a1).Cells(b, "B") = "" Then
        Workbooks(a).Worksheets(a1).Cells(b, "B") = "×"
    End If
Next b

End Sub

都市と街のブックを両方開いた状態で実行します。

マクロは 都市か街のどちらかに 入れればいいです。

A列がある分チェックしますので 都市名がなければ セルは なしの状態にしてください。

id:moon-fondu

ありがとうございます、うまくいきました!

2010/11/09 21:56:17

その他の回答2件)

id:taknt No.1

回答回数13539ベストアンサー獲得回数1198ここでベストアンサー

ポイント100pt
Sub チェック()

a = "街.xls"
a1 = "Sheet1"  '街のシート名
z = "都市.xls"
z1 = "Sheet1"   '都市のシート名

For b = 1 To 65536
    If Workbooks(z).Worksheets(z1).Cells(b, "A") = "" Then Exit For
    f = 0
    For c = 1 To 65536
        If Workbooks(a).Worksheets(a1).Cells(c, "A") = "" Then Exit For
        
        If Workbooks(a).Worksheets(a1).Cells(c, "A") = Workbooks(z).Worksheets(z1).Cells(b, "A") Then
            Workbooks(z).Worksheets(z1).Cells(b, "B") = "○"
            Workbooks(a).Worksheets(a1).Cells(c, "B") = "○"
            f = 1
            If Workbooks(a).Worksheets(a1).Cells(c, "C") = Workbooks(z).Worksheets(z1).Cells(b, "C") Then
                Workbooks(z).Worksheets(z1).Cells(b, "D") = "○"
                Workbooks(a).Worksheets(a1).Cells(c, "D") = "○"
            Else
                Workbooks(z).Worksheets(z1).Cells(b, "D") = "×"
                Workbooks(a).Worksheets(a1).Cells(c, "D") = "×"
            End If
        End If
    Next c
    
    If f = 0 Then Workbooks(z).Worksheets(z1).Cells(b, "B") = "×"
    
Next b

For b = 1 To 65536
    If Workbooks(a).Worksheets(a1).Cells(b, "A") = "" Then Exit For
    If Workbooks(a).Worksheets(a1).Cells(b, "B") = "" Then
        Workbooks(a).Worksheets(a1).Cells(b, "B") = "×"
    End If
Next b

End Sub

都市と街のブックを両方開いた状態で実行します。

マクロは 都市か街のどちらかに 入れればいいです。

A列がある分チェックしますので 都市名がなければ セルは なしの状態にしてください。

id:moon-fondu

ありがとうございます、うまくいきました!

2010/11/09 21:56:17
id:hathi No.2

回答回数216ベストアンサー獲得回数49

ポイント40pt

多分 前2回答者と同じか、もっといい加減なものですが、

Sub test()
Dim B都市 As Worksheet
Dim B街 As Worksheet
Dim i, sl, el
Set B都市 = Workbooks("都市.xls").Worksheets("Sheet1")
Set B街 = Workbooks("街.xls").Worksheets("Sheet1")
sl = 1
el = 30
For i = sl To el
  If B都市.Cells(i, 1) <> "" Then
     If B都市.Cells(i, 1) = B街.Cells(i, 1) Then
        B都市.Cells(i, 2) = "○"
        B街.Cells(i, 2) = "○"
        If B都市.Cells(i, 3) <> "" Then
           If B都市.Cells(i, 3) = B街.Cells(i, 3) Then
              B都市.Cells(i, 4) = "○"
              B街.Cells(i, 4) = "○"
           Else
              B都市.Cells(i, 4) = "×"
              B街.Cells(i, 4) = "×"
           End If
        End If
     Else
        B都市.Cells(i, 2) = "×"
        B街.Cells(i, 2) = "×"
     End If
  End If
Next
End Sub
id:moon-fondu

ありがとうございます<m(__)m>

2010/11/09 21:56:29
id:Silvanus No.3

回答回数180ベストアンサー獲得回数71

ポイント50pt

都市.xlsのセルB1に

「=IF(COUNTIF([街.xls]Sheet1!$A:$A,A1),"○","×")」

を貼って、それを下方のセルへコピペ、同じくセルD1に

「=IF(B1="○",IF(VLOOKUP(A1,[街.xls]Sheet1!$A:$C,3,FALSE)=C1,"○","×"),"")」

を貼って、それを下方のセルへコピペ。

街.xlsのセルB1に

「=IF(COUNTIF([都市.xls]Sheet1!$A:$A,A1),"○","×")」

を貼って、それを下方のセルへコピペ、同じくセルD1に

「=IF(B1="○",IF(VLOOKUP(A1,[都市.xls]Sheet1!$A:$C,3,FALSE)=C1,"○","×"),"")」

を貼って、それを下方のセルへコピペ。

これで恐らく大丈夫かと。

id:moon-fondu

なるほどです、関数でもできました!

ありがとうございます(^_^)

2010/11/09 21:56:05
  • id:Silvanus
    第一段階目の○×判定については、
    都市.xlsのセルB1に
    「=IF(COUNTIF([街.xls]Sheet1!$A:$A,A1),"○","×")」
    を貼って、それを下方のセルへコピペ、
    街.xlsのセルB1に
    「=IF(COUNTIF([都市.xls]Sheet1!$A:$A,A1),"○","×")」
    を貼って、それを下方のセルへコピペすればOKです
    (シート名は実情に合わせて書き換えて下さい)。
    第二段階目の判定方法について確認しておきたいのですが、
    同一行に書かれている「都市-国名」間の組み合わせが
    両ワークブック間で一致しているものを○と判定するということですか?
  • id:taknt
    >B列、D列にもしデータがあった場合は、

    B列、D列は 何もデータがない状態で実行してください。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません