Excel 2000のブックの「シート1」に、「氏名(A列)」、「住所(B列)」、「電話番号(C列)」が、10万件ほど記入されています。同じフォーマットで、「シート2」にも、同じフォーマットで入力されています。


さて、「シート2」に含まれる人が、「シート1」に含まれる人の「氏名」・「住所」が同じであるが、「電話番号」だけが違う、という状況があるとします。

このときに、「シート1」のその人の電話番号を、「シート2」の新しい電話番号に書き換えるには、どのようにすればよろしいでしょうか?

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

回答1件)

id:SALINGER No.1

回答回数3454ベストアンサー獲得回数969

ポイント60pt

VBAを使って一括で処理するとして、ループを使って捜査してもそんなに時間はかからないと思いますが、

ワークシート関数を使って工夫してみました。


Sub Macro()
    Dim i As Long
    Dim lastRow1 As Long
    Dim lastRow2 As Long
    Dim r As Long
    Dim s As String
    
    Application.ScreenUpdating = False
    
    lastRow1 = Sheet1.Cells(Rows.Count, 1).End(xlUp).Row
    lastRow2 = Sheet2.Cells(Rows.Count, 1).End(xlUp).Row
    
    For i = 1 To lastRow2
        s = "=SUMPRODUCT((Sheet1!$A$1:$A$" & lastRow1 & "=Sheet2!A" & i & ")*(Sheet1!$B$1:$B$" _
            & lastRow1 & "=Sheet2!B" & i & ")*ROW(Sheet1!$A$1:$A$" & lastRow1 & "))"

        r = Application.Evaluate(s)
        If r > 0 Then
            Sheet1.Cells(r, "C").Value = Sheet2.Cells(i, "C").Value
        End If
    Next i
    
    Application.ScreenUpdating = True
End Sub
  • id:SALINGER
    Excel2000は65536行しかないので10万件のデータはどのように入っていますか?
  • id:hiko3karasu
    関数こね回して、半分手動でできそうですが件数が多いならマクロで全自動で書き換えていった方がいいですかね?
  • id:SALINGER
    前々回に引き続いて説明が足りなかったかな。
    VBAでは回答のコードをVBEの標準モジュールにコピペして実行します。
    VBAの使い方はこちらを参考にしてみてください。
    http://www.officepro.jp/excelvba/ini/index1.html
    http://www.officepro.jp/excelvba/ini/index2.html
    http://www.officepro.jp/excelvba/ini/index3.html

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

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

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

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