Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


12258 / 13646 ツリー ←次へ | 前へ→

【11484】パフォーマンス向上について ふくいんちょー 04/3/9(火) 18:47 質問
【11487】Re:パフォーマンス向上について Kein 04/3/9(火) 19:57 回答

【11484】パフォーマンス向上について
質問  ふくいんちょー  - 04/3/9(火) 18:47 -

引用なし
パスワード
   こんにちは。

Sheet1のA列にあるデータとSheet2のA列にあるデータをマッピングしようと思い、
以下のようなコーディングをしました。

Sheet1のデータ件数が少ない場合は良かったのですが、
Sheet1のデータ件数が増えるにつれてパフォーマンスが悪くなってきました。(当然ですが・・・)

そこでパフォーマンスを上げる為に何かお気づきの点がありましたら、
ご指摘して頂きたく。。

どなたか宜しくお願いします。


***********************************
Do Until i > sheet1Rows
  Do Until j > sheet2Rows
      
   'ある条件の場合の処理。
   If (・・・) Then
     Exit Do
   End If
      
   'Sheet1のA列とSheet2のA列を比較
   If (Sheets("sheet1").cells(i,1).text = Sheets("sheet2").cells(j,1).text) Then
     ・・・
     Exit Do
   End If

   j = j + 1
      
   'Sheet2に存在しない場合、メッセージを表示する。
   If (j > sheet2Rows) Then
     msgbox ("Sheet2には存在しないコードです。")
   End If
  Loop
    
  j = 2
  i = i + 1
  
Loop
************************************

【11487】Re:パフォーマンス向上について
回答  Kein  - 04/3/9(火) 19:57 -

引用なし
パスワード
   Match関数の数式を、Sheet1の作業列に埋めこんだらどうですか ?
例えば A1〜A列最終入力行までを調べるなら

With Sheets("Sheet1")
  .Range("A1", .Range("A65536").End(xlUp)).Offset(, 25) _
  .Formula = "=MATCH($A1,Sheet2!$A:$A,0)"
End With

で、Z列に結果が出るので

On Error GoTo ErLine
Set MyR = Range("Z:Z").SpecialCells(3, xlErrors)
On Error GoTo 0
For Each C In MyR
  MsgBox C.Offset(, -25).Value & vbLf & _
  "はシート2に存在しません"
Next
Set MyR = Nothing: Exit Sub
ErLine:
MsgBox "全てのデータがシート2に存在します", 64
End Sub

のように判定すれば良さそうですが。

12258 / 13646 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free