|    | 
     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 
 
 | 
     
    
   |