| 
    
     |  | ▼亀マスター さん: 
 データ量が多量のため、
 変数に格納する方法を試したいと思っています。
 (各csvは20000件と40000件です)
 ws_masterが40000件
 ws_daily2が20000件
 
 
 ただ、配列に格納して実施したいのですが、
 
 格納したい当該の箇所は、取得前と取得後の抽出対象列が異なっています。
 どのように並び替えればいいのでしょうか?
 
 
 Dim daily_num As Long
 Dim master_num As Long
 
 Dim count_master As Long
 Dim count_daily As Long
 
 Dim ws_master As Worksheet
 Dim ws_match As Worksheet
 
 Dim mail_match As String
 
 Dim ary_cell As Variant ' ←配列予定の変数
 
 
 For master_num = 1 To count_master
 
 For daily_num = 1 To count_daily
 mail_match = ws_master.Range("D" & master_num)
 
 If ws_daily2.Range("B" & daily_num).Value = mail_match Then
 ws_match.Range("A" & daily_num).Value = ws_master.Range("B" & master_num).Value
 ws_match.Range("B" & daily_num).Value = ws_master.Range("D" & master_num).Value
 ws_match.Range("C" & daily_num).Value = ws_master.Range("G" & master_num).Value
 ws_match.Range("D" & daily_num).Value = ws_master.Range("I" & master_num).Value
 ws_match.Range("E" & daily_num).Value = ws_master.Range("L" & master_num).Value
 ws_match.Range("F" & daily_num).Value = ws_master.Range("M" & master_num).Value
 ws_match.Range("G" & daily_num).Value = ws_master.Range("N" & master_num).Value
 Exit For
 End If
 Next
 
 
 >col1とcol3の値に問題があると思います。
 >いずれも値が1になっているので、Forループからすぐに抜けてしまうようです。
 >
 >    cols1 = .UsedRange.Cells(.UsedRange.Rows.Count, 1).Column
 >    cols3 = .UsedRange.Cells(.UsedRange.Rows.Count, 1).Column
 >
 >これはいずれもColumnがRowの誤りでしょう。
 >CellsプロパティでColumnを1に指定しているのですから、そこから得られたセルのColumnを取得すれば1にしかなりません。
 >
 >それと、これを修正しても問題が残っています。
 >ループに入ってからの
 >    If ws6.Range("B" & migi).Value = ws1.Range("D" & hida).Value Then
 >ですが、migiはmaster(ws1)の行数、hidaはdaily3(ws6)の行数を表しているのですから、ここでは逆でしょう。
 >
 >同じく、
 >    ws3.Range("A" & hida).Value = ws1.Range("B" & hida).Value
 >    ws3.Range("B" & hida).Value = ws1.Range("D" & hida).Value
 >    ws3.Range("C" & hida).Value = ws1.Range("C" & hida).Value
 >    ws3.Range("D" & hida).Value = ws1.Range("A" & hida).Value
 >は、いずれも=の右側の式でhidaをmigiに修正する必要があると思われます。
 >
 >以上で、私が手元で試してみた範囲では動作しました。
 >
 >
 >なお、動作には支障がないのですが、変数名は直した方がいいですね。ws1とかcols1とかhidaとか、何を表しているのかわかりません。私がコードを読む際にも、結構読みにくかったですよ。
 >ws1ならsh_masterのような、中身がわかる変数名にするか、いっそのこと変数を使わずにWorksheets("master")だけでもいいのではないでしょうか。
 >
 >それに、シートの選択方法が、ws1のような変数を使ったり、Worksheet("シート名")になっていたり、ActiveSheetになっていたりで、やはりどのシートを指定しているのかがわかりにくいです。特にActiveSheetは手前のコードを読んでどこのシートがアクティブになっているのかを調べないとわかりませんし、そもそもそのシートをアクティブにする処理が余計です。
 >
 >あと、サンプル程度のデータ量ならこれでもすぐ終わると思いますが、件数が多くなってくるとセルの読み書きの回数が多くなり、処理に時間がかかるようになりますよ。
 >Variant型変数にセル範囲を代入して配列として扱う方法がありますので、余裕があれば勉強してみてはどうでしょうか。
 >ht tp://officetanaka.net/excel/vba/speed/s11.htm
 
 
 |  |