Excel VBA質問箱 IV

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

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


2112 / 13645 ツリー ←次へ | 前へ→

【69879】列のデータを行に変更するには kuwamio 11/9/12(月) 18:58 質問[未読]
【69880】Re:列のデータを行に変更するには UO3 11/9/12(月) 20:02 回答[未読]
【69881】Re:列のデータを行に変更するには kuwamio 11/9/13(火) 8:44 お礼[未読]

【69879】列のデータを行に変更するには
質問  kuwamio  - 11/9/12(月) 18:58 -

引用なし
パスワード
   データ1をデータ2のようにマクロを使って自動でやりたいのですが、
やり方がわかりません。教えていただければありがたいです。
何卒よろしくお願いいたします。
<データ1>
項目1 項目2 項目3
001 aaa bbb
001 aaa ccc
001 aaa ddd
002 あああ いいい
002 あああ ううう
003 ははは ひひひ
004 ららら りりり
004 ららら るるる
    ↓
<データ2>
項目1 項目2 項目3 項目1 項目2 項目3 項目1 項目2 項目3
001 aaa bbb 001 aaa ccc 001 aaa ddd
002 あああ いいい 002 あああ ううう
003 ははは ひひひ
004 ららら りりり 004 ららら るるる

【69880】Re:列のデータを行に変更するには
回答  UO3  - 11/9/12(月) 20:02 -

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

要件を取り違えていたらごめんなさい。


Sub Sample()
  Dim v() As String
  Dim c As range
  Dim dic As Object
  Dim i As Long, j As Long, k As Long
  Dim wk As Variant
  
  Set dic = CreateObject("Scripting.Dictionary")
  
  With Sheets("Sheet1").range("A1").CurrentRegion
    ReDim v(1 To .Rows.Count, 1 To .Rows.Count * 3) 'Max
    For Each c In .Columns(1).Cells
      If Not dic.exists(c.Value) Then
        k = k + 1
        dic(c.Value) = Array(k, 0)
      End If
      wk = dic(c.Value)
      wk(1) = wk(1) + 1
      dic(c.Value) = wk
      i = wk(0)
      j = (wk(1) - 1) * 3 + 1
      v(i, j) = c.Value
      v(i, j + 1) = c.Offset(, 1).Value
      v(i, j + 2) = c.Offset(, 2).Value
    Next
  End With
  
  With Sheets("Sheet2")
    .Cells.ClearContents
    .range("A1").Resize(UBound(v, 1), UBound(v, 2)).Value = v
    .range("A1:C1").Copy .range("D1").Resize(, .range("A1").CurrentRegion.Columns.Count - 3)
  End With
  
  Set dic = Nothing
  
End Sub

【69881】Re:列のデータを行に変更するには
お礼  kuwamio  - 11/9/13(火) 8:44 -

引用なし
パスワード
   早速のご返答誠にありがとうございます。
一度、このプログラムで考えさせていただきたいと
おもいます。
本当にありがとうございました。

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