人生最悪の忘れ物

VBAのForを使用してデータ転記をしたいのですが、
元のシートはA、B列を使用した形式となっており、行間を飛ばして反映する方法が解りません。

<元データ>
①店舗
①分類
①商品名
①日付
①金額
②店舗
②分類
②商品名
②日付
②金額
③以降同上の繰り返し

上記を店舗、分類、商品名、日付、金額の順に横並びに変更したいのが質問の趣旨になります。
金額欄を転記をしたいとした場合、下記の数式では反映されず困惑しております。
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
Dim i As Integer
For i = 1 To 100 Step 1  (100個データを転記)
For j = 2 To 501 Step 5 (2行目~501行目の参照データを5行ずつ飛ばして反映したい)
Cells(i +1, 5).Value = Cells(j,2)  (5列目に1行空けて参照元のB列のデータを転記したい)
Next j
Next i

End sub
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
どのようにすれば良いのかお助け頂ければと思い書き込みました。
ご指導いただけますと幸いです。

質問者からの補足コメント

  • つらい・・・

    解りづらくてすみません。元データは他の機器から抽出したデータになります。

    A列には抽出の際に採番されたデータ番号が入力されています。
    B列には上から順に店舗、分類、商品名、日付、金額となっております。

    縦長のデータ見辛いため、VBAを用いて横並びにしたいと思っております。
    採番されたデータ番号は不要です。

     A列 B列  C列  D列 E列
    ①店舗①分類①商品名①日付①金額
    ②店舗②分類②商品名②日付②金額

      補足日時:2018/11/24 23:04
  • お助け頂いておりますが、文章では伝わり辛く申し訳ございません。
    画像にてどのようにしたいのか表記させて頂きました。

    黄色のセルが元データです。
    水色のセルのように横並びにしたいと思っております。

    「エクセル VBA 行間隔を飛ばしたデータ」の補足画像2
      補足日時:2018/11/24 23:23

A 回答 (4件)

No.2・3です!



やっと理解できました。
前回までのコードはすべて無視してください。

同一シート上での操作で良いのですね?
↓のコードをシートモジュールにしてみてください。

Sub Sample4()
 Dim i As Long, cnt As Long
  cnt = 1
   For i = 2 To Cells(Rows.Count, "A").End(xlUp).Row Step 5
    cnt = cnt + 1
    With Cells(cnt, "D")
     .Value = Cells(i, "A")
     .Offset(, 1).Resize(, 5).Value = Application.Transpose(Cells(i, "B").Resize(5).Value)
    End With
   Next i
End Sub

※ 「値」の代入にしていますので、日付セルの表示形式がお望みの表示にならないかもしれません。
その場合は最後にセルの表示形式で調整してください。m(_ _)m
    • good
    • 0

No.2です。



補足を拝見しました。
①・②・・・はA列のデータで
店舗・分類・・・等々はB列のデータだというコトなのですね。
そして横並びに表示する場合、A列・B列データを1セル内の表示しなければならない!
という解釈です。
元データはSheet1の2行目以降にあり、Sheet2の1行目から横並びに表示するとします。
標準モジュールにしてください。

Sub Sample2()
 Dim i As Long, k As Long
 Dim cnt As Long, wS As Worksheet
  Set wS = Worksheets("Sheet2")
   With Worksheets("Sheet1")
    For i = 2 To .Cells(Rows.Count, "A").End(xlUp).Row Step 5
     cnt = cnt + 1
     For k = 1 To 5
      wS.Cells(cnt, k) = .Cells(i + k - 1, "A") & " " & .Cells(i + k - 1, "B")
Next k
Next i
End With
End Sub

※ Sheet1のA列が数値データの場合、A・B列を連結してしまうと、日付とか金額がおかしな結果になるので
半角スペースをかましています。
(すなわち文字列になりますので、金額などは計算には使えません。)

単純にB列だけを5列に横並びにしたい場合は、もっと簡単に・・・

Sub Sample3()
 Dim i As Long, cnt As Long
 Dim wS As Worksheet
  Set wS = Worksheets("Sheet2")
   With Worksheets("Sheet1")
    For i = 2 To .Cells(Rows.Count, "A").End(xlUp).Row Step 5
     cnt = cnt + 1
     wS.Cells(cnt, "A").Resize(, 5).Value = Application.Transpose(.Cells(i, "B").Resize(5).Value)
    Next i
   End With
End Sub

くらいで大丈夫だと思います。m(_ _)m
    • good
    • 0
この回答へのお礼

ありがとうございます。早速入力してみます。

お礼日時:2018/11/24 23:34

こんばんは!



No.1さんがおっしゃっているように、何をどうしたいのか?
が全く分かりません。

もしかして、B列データをC2セル以降(5行)に並び替えたい!という質問でしょうか?

そうであれば、一例です。

Sub Sample1()
 Dim i As Long, cnt As Long
  For i = 7 To Cells(Rows.Count, "A").End(xlUp).Row Step 5
   cnt = cnt + 1
   Cells(2, cnt + 2).Resize(5).Value = Cells(i, "B").Resize(5).Value
  Next i
End Sub

※ コードを拝見しても何をやりたいのかが見えてこないので
勝手に判断しました。

この手の質問は文章で説明するより、Before & After の形を示した方が
回答が付きやすいと思います。m(_ _)m
    • good
    • 0
この回答へのお礼

本当に解りづらくて申し訳ありません。
画像にてどのような状態のデータをどのようにしたいのかを貼り付けました。
ご教示いただけますと幸いです。

お礼日時:2018/11/24 23:28

仕様が不明瞭なので確認しますが



あるワークシートの A 列に記載されている元データがありますが、これを B 列以降に複製したいのですか?
移動 cut & paste ではなくて複製 copy & paste?

『5列目に1行空けて参照元のB列のデータを転記したい』という質問文が無茶苦茶で、列と行を混同しているものだから、何が言いたいのか分からない。


ざっくり、こんな感じにしたいと思うんだけど。

A列   B列   C列
①店舗  ②店舗  ③店舗
①分類  ②分類  ③分類
①商品名 ②商品名 ③商品名
①日付  ②日付  ③日付
①金額  ②金額  ③金額
    • good
    • 0
この回答へのお礼

解りづらくてすみません。補足致しましたので、ご教示いただけますと幸いです。

お礼日時:2018/11/24 23:28

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


おすすめ情報

このQ&Aを見た人がよく見るQ&A