Excel VBA質問箱 IV

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

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


4172 / 76734 ←次へ | 前へ→

【78188】Re:エクセル内のデータ転送に関して
発言  β  - 16/5/20(金) 20:10 -

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

別案もアップしておきます。
2回目、3回目の条件は、先にコメントした通りです。
下記の Test2 が、TODDさんがループで処理しようとしておられた流れになるかと思います。
Test3 は、同じループなら、効率を考えて、一工夫したもの。

F列等の件数が少なければアップ済みの Test でも問題ないかと思いますが
件数が膨大ならTest3ですね。
で、残念ながら、Test2 は、最も効率の悪い方式になります。

Sub test2()
  Dim col As Long
  Dim i As Long
  Dim x As Long
  Dim mx As Long
  
  Application.ScreenUpdating = False
  
  mx = Range("A" & Rows.Count).End(xlUp).Row
  col = Cells(1, Columns.Count).End(xlToLeft).Column
  
  With Range(Cells(1, col), Cells(Rows.Count, col).End(xlUp)).Resize(, 3)
    For i = 1 To .Rows.Count
      .Cells(i, 2).Resize(, 2).ClearContents
      For x = 1 To mx
        If .Cells(i, 1).Value = Cells(x, "A").Value Then
          .Cells(i, 2).Value = Cells(x, "B").Value
          .Cells(i, 3).Value = Cells(x, "C").Value
          Exit For
        End If
      Next
    Next
  End With
  
End Sub

Sub test3()
  Dim dic As Object
  Dim c As Range
  Dim col As Long
  Dim x As Long
  Dim v As Variant
  Dim w As Variant
  
  Set dic = CreateObject("Scripting.Dictionary")
  
  For Each c In Range("A1", Range("A" & Rows.Count).End(xlUp))
    dic(c.Value) = c.Offset(, 1).Resize(, 2).Value
  Next
  
  col = Cells(1, Columns.Count).End(xlToLeft).Column
  v = Range(Cells(1, col), Cells(Rows.Count, col).End(xlUp)).Value
  ReDim Preserve v(1 To UBound(v, 1), 1 To 3)
  
  For x = 1 To UBound(v, 1)
    If dic.exists(v(x, 1)) Then
      w = dic(v(x, 1))
      v(x, 2) = w(1, 1)
      v(x, 3) = w(1, 2)
    End If
  Next
  
  Cells(1, col).Resize(UBound(v, 1), UBound(v, 2)).Value = v
  
End Sub
5 hits

【78185】エクセル内のデータ転送に関して TODD 16/5/20(金) 8:24 質問[未読]
【78186】Re:エクセル内のデータ転送に関して β 16/5/20(金) 9:31 発言[未読]
【78198】Re:エクセル内のデータ転送に関して TODD 16/5/24(火) 12:34 お礼[未読]
【78200】Re:エクセル内のデータ転送に関して β 16/5/24(火) 21:19 発言[未読]
【78205】Re:エクセル内のデータ転送に関して TODD 16/5/26(木) 1:28 お礼[未読]
【78206】Re:エクセル内のデータ転送に関して TODD 16/5/26(木) 4:29 お礼[未読]
【78207】Re:エクセル内のデータ転送に関して β 16/5/26(木) 8:03 発言[未読]
【78209】Re:エクセル内のデータ転送に関して TODD 16/5/26(木) 10:29 質問[未読]
【78187】Re:エクセル内のデータ転送に関して β 16/5/20(金) 9:39 発言[未読]
【78188】Re:エクセル内のデータ転送に関して β 16/5/20(金) 20:10 発言[未読]

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