Excel VBA質問箱 IV

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

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


2748 / 76735 ←次へ | 前へ→

【79627】Re:指定期間でログインしたユーザーを知りたい ...
質問  amatsuno  - 18/2/20(火) 16:36 -

引用なし
パスワード
   ▼亀マスター さん:

データ量が多量のため、
変数に格納する方法を試したいと思っています。
(各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

8 hits

【79618】指定期間でログインしたユーザーを知りたい ... amatsuno 18/2/14(水) 16:19 質問[未読]
【79619】Re:指定期間でログインしたユーザーを知り... 亀マスター 18/2/14(水) 21:03 回答[未読]
【79620】Re:指定期間でログインしたユーザーを知り... amatsuno 18/2/15(木) 13:36 お礼[未読]
【79627】Re:指定期間でログインしたユーザーを知り... amatsuno 18/2/20(火) 16:36 質問[未読]
【79633】Re:指定期間でログインしたユーザーを知り... 亀マスター 18/2/21(水) 22:38 回答[未読]
【79640】Re:指定期間でログインしたユーザーを知り... amatsuno 18/2/23(金) 15:53 発言[未読]
【79646】Re:指定期間でログインしたユーザーを知り... 亀マスター 18/2/23(金) 22:55 発言[未読]
【79650】Re:指定期間でログインしたユーザーを知り... amatsuno 18/2/26(月) 16:07 発言[未読]
【79651】Re:指定期間でログインしたユーザーを知り... 亀マスター 18/2/26(月) 18:53 発言[未読]
【79654】Re:指定期間でログインしたユーザーを知り... amatsuno 18/2/27(火) 17:56 お礼[未読]
【79641】Re:指定期間でログインしたユーザーを知り... amatsuno 18/2/23(金) 15:55 発言[未読]
【79642】Re:指定期間でログインしたユーザーを知り... amatsuno 18/2/23(金) 15:59 発言[未読]

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