プロが教えるわが家の防犯対策術!

お世話になります。

マクロ初心者で、今、「エクセルのマクロとvbaがみるみるわかる本」http://bit.ly/1sFd4gK
という本で、マクロの勉強中です。

仕事でシート「Sheet1」に入っているデータを「Sheet2」にコピーし、画像のようにタテ1列に張り付けるマクロを作る必要があります。

まだまだ勉強不足でガイドブックの範囲外のことですので、すいませんが詳しい方、親切な方、サンプルプログラムを張り付けて頂けないでしょうか?

詳細は以下のとおりです。理論を説明して頂いても今の私の知識では、手に負えないと思いますので、すいませんがサンプルの貼り付けでお願いします。

※エクセルのバージョンはEXCEL2010です。

-----------
「Sheet1」「Sheet2」で入力する条件、範囲の詳細

1)「Sheet1」の「日付」の範囲は「-」までです。
※6月は30日までしかありませんが、31日まである月にも対応したいので。

2)「伝票番号1」~「伝票番号10」について
※「日付」に対して左詰で記載します。途中が空白になったりしません。
例)6月30日で「A5-32」がなくて、セル番号E32に「A5-33」があるということはありません。

3)「Sheet2」はタテ1列で昇順で並べる必要があります

-----------

こんな感じです。
すいませんが、よろしくお願いします。

「別シートにデータをコピーするマクロ」の質問画像

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

  • 画像を貼り直しました。こちらの方が見やすいと思います。

    「別シートにデータをコピーするマクロ」の補足画像1
      補足日時:2016/05/29 18:34
  • 画像を2個に分けました。これでだいぶマシだと思います。

    「別シートにデータをコピーするマクロ」の補足画像2
      補足日時:2016/05/29 18:44
  • 2個目の画像、「Sheet2」です。これでわかると思います。すいませんが、よろしくお願いします。

    「別シートにデータをコピーするマクロ」の補足画像3
      補足日時:2016/05/29 18:48

A 回答 (2件)

No.1です。



投稿後気づきました。
>3)「Sheet2」はタテ1列で昇順で並べる必要があります
を見逃していました。

↓のコードに変更してください。(並び替えのコードを追加しています)

Sub Sample2()
Dim i As Long, j As Long, cnt As Long, wS As Worksheet
Set wS = Worksheets("Sheet2")
wS.Range("A:A").ClearContents '←Sheet2のA列データを一旦消去//
With Worksheets("Sheet1")
For i = 2 To .Cells(Rows.Count, "A").End(xlUp).Row '←2行目~A列最終行まで//
For j = 2 To 11 '←B列~K列まで//
If .Cells(i, j) <> "" Then
cnt = cnt + 1
wS.Cells(cnt, "A") = .Cells(i, j)
End If
Next j
Next i
'▼追加(並び替え)//
wS.Range("A:A").Sort key1:=wS.Range("A1"), order1:=xlAscending, Header:=xlNo
End With
End Sub

どうも失礼しました。m(_ _)m
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます、いつもお世話になります。

おかげさまで助かりました。

「'」以下に解説もつけて頂き本当にありがとうございます。
まだ「参考になりました」と言えるレベルではなく、
「多分、こうなんだろうな、、、」という程度ですが助かりました。

ガイドブックで勉強しながら時々、範囲外のことをこちらで
質問しようと思っておりますので、またよろしくお願いします。

PS
前回、 http://bit.ly/1Pbmnzg の件、
「お礼なし」となってしまい、大変失礼しました。

ちゃんと書いたのですが、お礼のところにブログのURLを貼り付けたので、多分、規約違反でコメントが削除されたのだと思います。
すいませんでした。

機会がありましたら、また、よろしくお願いします。

お礼日時:2016/05/30 19:20

こんばんは!



この程度の量であれば、単純にループさせるのが簡単だと思います。
一例です。標準モジュールにしてください。

Sub Sample1()
Dim i As Long, j As Long, cnt As Long, wS As Worksheet
Set wS = Worksheets("Sheet2")
wS.Range("A:A").ClearContents '←Sheet2のA列データを一旦消去//
With Worksheets("Sheet1")
For i = 2 To .Cells(Rows.Count, "A").End(xlUp).Row '←2行目~A列最終行まで//
For j = 2 To 11 '←B列~K列まで//
If .Cells(i, j) <> "" Then
cnt = cnt + 1
wS.Cells(cnt, "A") = .Cells(i, j)
End If
Next j
Next i
End With
End Sub

こんな感じではどうでしょうか?m(_ _)m
    • good
    • 0

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