Excel VBA質問箱 IV

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

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


22 / 13290 ツリー ←次へ | 前へ→

【80714】データを横にペーストしていきたい リョウ 19/4/21(日) 1:29 質問[未読]

【80716】Re:データを横にペーストしていきたい リョウ 19/4/21(日) 11:13 質問[未読]
【80717】Re:データを横にペーストしていきたい γ 19/4/21(日) 14:10 回答[未読]
【80718】Re:データを横にペーストしていきたい リョウ 19/4/21(日) 14:23 お礼[未読]
【80719】Re:データを横にペーストしていきたい γ 19/4/21(日) 21:26 回答[未読]
【80720】Re:データを横にペーストしていきたい リョウ 19/4/22(月) 20:30 お礼[未読]

【80716】Re:データを横にペーストしていきたい
質問  リョウ  - 19/4/21(日) 11:13 -

引用なし
パスワード
   ▼リョウ さん:

ご教授ありがとうございます。
希望通りの処理が行われることを確認しました。
また「Mod」の使い方も理解しました。

>大量にある場合は、配列を利用することになると思います。
度々で申し訳ございませんが、ここの文言がピンときていません。。
実際はもっとデータが多いのですが、宜しければもう少し具体的に教えていただけると助かります。

宜しくお願いいたします。

【80717】Re:データを横にペーストしていきたい
回答  γ  - 19/4/21(日) 14:10 -

引用なし
パスワード
   時間がかかるのは、シートへの書き込みです。
各セルにその都度書き込むとそれだけ時間が掛かりますから、
いったん二次元配列に結果を書き込んでおいて、
それを一回の処理でまとめてシートに書き込む方法です。
トライしてみてください。

もっとも数千行くらいのデータであれば今の方法で十分でしょう。
数万〜数十万行のオーダーなら効果は大きいと思います。

【80718】Re:データを横にペーストしていきたい
お礼  リョウ  - 19/4/21(日) 14:23 -

引用なし
パスワード
   ▼Y さん:

>いったん二次元配列に結果を書き込んでおいて、
>それを一回の処理でまとめてシートに書き込む方法です。
>トライしてみてください。
なるほど。
あとは自分で色々と調べてみます。


>もっとも数千行くらいのデータであれば今の方法で十分でしょう。
>数万〜数十万行のオーダーなら効果は大きいと思います。
あっても数百行くらいのデータですので、特に考慮する必要は無さそうということで理解しました。

早々にご返信いただきまして、本当にありがとうございました。
また機会ありましたら、宜しくお願いいたします。

【80719】Re:データを横にペーストしていきたい
回答  γ  - 19/4/21(日) 21:26 -

引用なし
パスワード
   配列を使ったコード例。(色々な書き方があるので一例として)

Sub test2()
  Dim lastRow As Long
  Dim mysize As Long
  Dim mat()  As Variant
  Dim v    As Variant
  Dim k    As Long
  Dim j    As Long
  Dim m    As Long
  Dim kk   As Long
  
  Dim t    '経過時間計測用
  t = Timer
  
  lastRow = Cells(Rows.Count, "A").End(xlUp).Row
  
  'できあがりの表の行数
  mysize = WorksheetFunction.Ceiling(lastRow / 3, 1)
  
  '結果一時保持用配列の大きさを宣言
  ReDim mat(1 To mysize, 1 To 9)
        
  '元データを配列vに取り込む
  v = Range("A1").CurrentRegion.Resize(mysize * 3, 3).Value

  For k = 1 To mysize * 3 Step 3
    kk = Int((k - 1) / 3) + 1
    For j = 1 To 3
      For m = 1 To 3
        mat(kk, (j - 1) * 3 + m) = v(k + j - 1, m)
      Next
    Next
  Next

  '纏めて書込む
  [E1].Resize(mysize, 9).Value = mat
  
  Debug.Print "配列利用 "; Timer - t
End Sub

【80720】Re:データを横にペーストしていきたい
お礼  リョウ  - 19/4/22(月) 20:30 -

引用なし
パスワード
   ▼Y さん:

サンプルをありがとうございます。
ただ正直、理解しきれていないので時間を掛けて習得したいと思います・・。

ご丁寧に教えていただきまして、ありがとうございました。

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