Excel VBA質問箱 IV

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

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


6023 / 13644 ツリー ←次へ | 前へ→

【47604】二次元配列をシートの範囲に一発転写 hiyo 07/3/15(木) 21:05 質問[未読]
【47605】Re:二次元配列をシートの範囲に一発転写 りん 07/3/15(木) 21:24 発言[未読]
【47608】Re:二次元配列をシートの範囲に一発転写 hiyo 07/3/15(木) 21:48 お礼[未読]
【47606】Re:二次元配列をシートの範囲に一発転写 ichinose 07/3/15(木) 21:25 発言[未読]

【47604】二次元配列をシートの範囲に一発転写
質問  hiyo  - 07/3/15(木) 21:05 -

引用なし
パスワード
   二次元配列をシートの範囲に一発転写する方法はあるでしょうか?
二次元配列が持つ値を、繰り返し文など使って転写することは出来ますが
とても遅く
セル範囲の値の入力でも、(Rang("A1","G100").value = 1)のように
したら、繰り返し文で一つづつのセルに入力するよりも格段に早いので、
そういった方法がもしあれば教えてください。
また逆に、セル範囲を一発で二次元配列に格納する方法もあれば教えてください。

【47605】Re:二次元配列をシートの範囲に一発転写
発言  りん E-MAIL  - 07/3/15(木) 21:24 -

引用なし
パスワード
   hiyo さん、こんばんわ。

>二次元配列をシートの範囲に一発転写する方法はあるでしょうか?
配列が(行,列)になっていれば、そのサイズに合わせた範囲.Value = 配列()
で可能です。

>また逆に、セル範囲を一発で二次元配列に格納する方法もあれば教えてください。

Sub test()
  Dim v1 As Variant, ws As Worksheet
  '作業用ブック追加
  Set ws = Workbooks.Add.Worksheets(1)
  '
  MsgBox "セルに適当な値をセット"
  Range("A1:B10").Value = 1
  '
  MsgBox "配列に格納"
  v1 = Range("A1:B10").Value
  '
  MsgBox "新しい範囲にデータをセット"
  Range("E1:F10").Value = v1
  '
  MsgBox "OK?"
  'ブックを閉じる
  ws.Parent.Saved = True
  ws.Parent.Close
  Set ws = Nothing
End Sub
これで確認してみてください。

【47606】Re:二次元配列をシートの範囲に一発転写
発言  ichinose  - 07/3/15(木) 21:25 -

引用なし
パスワード
   ▼hiyo さん:
こんばんは。

>二次元配列をシートの範囲に一発転写する方法はあるでしょうか?
>二次元配列が持つ値を、繰り返し文など使って転写することは出来ますが
>とても遅く
>セル範囲の値の入力でも、(Rang("A1","G100").value = 1)のように
>したら、繰り返し文で一つづつのセルに入力するよりも格段に早いので、
>そういった方法がもしあれば教えてください。
>また逆に、セル範囲を一発で二次元配列に格納する方法もあれば教えてください。
過去ログにも↑たくさんありますけどね!!

新規ブックの標準モジュールに

'=======================================
Sub sample()
  Dim g0 As Long, g1 As Long
  Dim array_lbl2(1 To 3, 1 To 3) As Long
  Dim rec_lbl2 As Variant
  Cells.Clear
  For g0 = 1 To 3
   For g1 = 1 To 3
     array_lbl2(g0, g1) = g0 * g1 + 1
     Next
   Next
  Range(Cells(1, 1), Cells(UBound(array_lbl2, 1), UBound(array_lbl2, 2))).Value = array_lbl2()
  MsgBox "二次元配列をセルに移行  確認!!"
  rec_lbl2 = Range(Cells(1, 1), Cells(UBound(array_lbl2, 1), UBound(array_lbl2, 2))).Value
  For g0 = LBound(rec_lbl2, 1) To UBound(rec_lbl2, 1)
   For g1 = LBound(rec_lbl2, 2) To UBound(rec_lbl2, 2)
     MsgBox rec_lbl2(g0, g1)
     Next
   Next
  MsgBox "セル範囲を二次元配列に移行"
  
  Erase array_lbl2()
  
  Erase rec_lbl2
End Sub


上記のコードとこれを実行した結果を調べてみて下さい。

【47608】Re:二次元配列をシートの範囲に一発転写
お礼  hiyo  - 07/3/15(木) 21:48 -

引用なし
パスワード
   ありがとうございました。
まさかこんな簡単に出来るとは思いませんでした。

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