重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

【GOLF me!】初月無料お試し

VBAに詳しい方に質問です。

私はVBA初心者です、お力添えのほどよろしくお願いいたします。
エクセルで入力し、それを一覧表に転記し、最終的に出力フォームにデータを呼び出し印刷するプログラムを作成しています。
1つの項目のデータを表に転記したり、呼び出すVBAはなんとか作成できました。
しかし、複数のセルのデータを表に転記するVBAが作ることができません。

☆シート1
入力フォームがあり、
氏名・電話番号・住所等の項目を100人ほど表で入力します。
それらをシート2へ転記します。

   1     2      3    4…  
1  日付    名前    年齢   電話番号
2 2010/07/01 石川花子   12才  090-××

4  ↓以下100名ほど入力
5  ※列も行も数値で表すように設定してあります。




☆シート2
これまでに入力したデータをすべて一覧表にします。
シート1のデータはこれまでに入力されたデータの下に転記されます。

   1     2     3   4…
1 日付    名前    年齢  電話番号
902010/06/28 山田太郎  33才 090-××
912010/07/01 石川花子   12才  090-××  
92  ↑このように日付欄に空白を見つけ、そこからデータを転記する。
93




私が考えたVBAは、
sub 転記マクロ()
set 入力 = worksheet("シート1")
set 一覧 = worksheet("シート2")

日付1=入力.cells(2,1)
名前1=入力.cells(2,2)
年齢1=入力.cells(2,3)
電話1=入力.cells(2,4)

日付2=入力.cells(3,1)
名前2=入力.cells(3,2)
年齢2=入力.cells(3,3)
電話2=入力.cells(3,4)
'以下○○100まで

※一覧.(縦,2)に縦+1をしていき""の場所を探す。
(すみません、データを会社に置いてきたので表記の仕方を忘れてしまいました^^;)

一覧.(縦,1)=日付1
一覧.(縦,2)=名前1
一覧.(縦,3)=年齢1
一覧.(縦,4)=電話1

一覧.(縦+1,1)=日付2
一覧.(縦+1,2)=名前2
一覧.(縦+1,3)=年齢2
一覧.(縦+1,4)=電話2
'以下+100まで

end sub

何も見ずに思い出しながら書いたので、もしかしたらどこか間違っているかもしれませんが、
このような感じで書いていきました。
さすがにこのようなことを100回繰り返すのは大変なので、for next関数でなんとかならないか試行錯誤したのですがなかなか解明できず困っています。
詳しい方、どうか教えてください。

A 回答 (1件)

Sub 転記マクロ2()


  Dim ws As Worksheet '転記先シート
  Dim x As Long

  'シート名は実際のシート名に変更要
  Set ws = Sheets("シート2")
  With Sheets("シート1")
    x = .Cells(.Rows.Count, 1).End(xlUp).Row
    If x > 1 Then
      With .Range("A2:D2").Resize(x - 1)
        .Copy ws.Cells(ws.Rows.Count, 1).End(xlUp).Offset(1)
        .ClearContents
      End With
    End If
  End With
  
  Set ws = Nothing
End Sub
こんな感じです。
    • good
    • 0

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