[[20100710113026]] 『データを別シートに転記する』(さくら) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『データを別シートに転記する』(さくら)

 お世話になりまし。
 前回の質問まとへずに結局悩み解消できないままです。
 どなたか教えてください。

 「シート1」
 F1 日付
 A2 番号
 A3 名前
 を

 A8 商品A 数量 金額 
 A9 商品B 数量 金額
 :
 :

 「シート2」転記先シート
 日付 番号 名前 商品A 数量 金額
 日付 番号 名前 商品B 数量 金額

 シート1のデータをシート2のように転記すること出来ますか?
 それぞれはマクロで出来ますが。。。
 上記の条件では初心者の私ではにっちもさっちもいかない状態です。
 分かりましたが、教えてください。よろしくお願いします。m(_ _)m


  一応下記も見ましたが、情報が混乱(殊にシート名)しているように見えました。
[[20100707163934]] 

 上記の内容だけでしたら、
    mr = Worksheets("シート2").Range("A" & Rows.Count).End(xlUp).Row + 1
    Dim r As Long
    For r = 8 To 22
        If Application.WorksheetFunction.CountA(Worksheets("シート1").Range("A" & r).Resize(1, 6)) = 0 Then Exit For

        Worksheets("シート2").Cells(mr, "A").Value = Worksheets("シート1").Range("A1").Value
        Worksheets("シート2").Cells(mr, "B").Value = Worksheets("シート1").Range("A2").Value
        Worksheets("シート2").Cells(mr, "C").Value = Worksheets("シート1").Range("A3").Value
        Worksheets("シート1").Cells(r, "A").Resize(1, 6).Copy _
            Destination:=Worksheets("シート2").Cells(mr, "D").Resize(1, 6)
        mr = mr + 1
    Next

 のような感じだと思います。(問題はこれ以外にもありそうですが。)
 (Mook)

 Mookさん回答ありがとうございます。
 解答が付かなかったのでどうしようかと思いました ><;;;

 頂いたコード思い通りの結果を得ることになりました。
 ただ文字のみコピーは可能ですか?書式は不要です。

 コードについて教えてください。>人<
 >If Application.WorksheetFunction.CountA(Worksheets("シート1").Range("A" & r).Resize(1, 6)) = 0 Then Exit For
 > Worksheets("シート1").Cells(r, "A").Resize(1, 6).Copy _
  >           Destination:=Worksheets("シート2").Cells(mr, "D").Resize(1, 6)
  ココはどういう意味ですか?    
 >   mr = mr + 1
 これは次の行にコピーする?ですか?

 >(問題はこれ以外にもありそうですが。)
 どんなことが予想されますか?
 初めて作りますので、模索しながらやっています。
 自分のやり方は非常に効率悪そうに思います。^^;;

 (さくら)

 多少のアレンジは、マクロの記録をすればできると思います。

 「形式を選択して貼り付け」に「値」があります。
 これを試してみて、
     Worksheets("シート1").Cells(r, "A").Resize(1, 6).Copy
     Worksheets("シート2").Cells(mr, "D").Resize(1, 6).PasteSpecial Paste:=xlPasteValues
 のようなことが、ご自身でできればマクロの利用の範囲が広がることでしょう。

 mr は 貼り付け位置を指定する変数ですから(前のマクロでそのように使用して
 ましたよw)、ループの中でひとつづつ増やしてあげます。

 下記は別々の事柄です。
 >If Application.WorksheetFunction.CountA(Worksheets("シート1").Range("A" & r).Resize(1, 6)) = 0 Then Exit For
 は r行の A:F(6列分)にデータがなければ終了という処理です。
 (関数の COUNTA はご存じではありませんか?)

 > Worksheets("シート1").Cells(r, "A").Resize(1, 6).Copy _
  >           Destination:=Worksheets("シート2").Cells(mr, "D").Resize(1, 6)
 こちらは同じくシート1の r行の A:F を
               シート2の mr行の D:I へコピーする処理です。

 >どんなことが予想されますか?
 いえ、これで解決するなら、何よりです。
 (Mook) 

 mookさんありがとうございます。
 >(関数の COUNTA はご存じではありませんか?)
 関数なら分かります。^^;;マクロの中でもこんなふうに使うのですね。

 いろいろアレンジしてみますが、なかなか難しいですね。
 お陰さまでなんとなく分かりました。

 もうひとつだけ教えてください。>< 
 ↓が有ることは分かりました。
 数式            xlPasteFormulas	            
 値              xlPasteValues             
 書式            xlPasteFormats    
 >Worksheets("シート1").Cells(r, "A").Resize(1, 6).Copy _
 >            Destination:=Worksheets("シート2").Cells(mr, "D").Resize(1, 6)
 >        mr = mr + 1

 シート2転記前の最終行の書式と数式を
 転記後の行数ごとにコピすることは可能ですか?

(さくら)


 内容が良く分かりませんが、せっかく値をコピーした部分に式をコピーしてしまう
 のでしょうか。
 おわかりかと思いますが、式と値は共存できません。

 書式のコピーは応用でできるかと思いますが、前回の変更と合わせると
        Worksheets("シート1").Cells(r, "A").Resize(1, 6).Copy _
            Destination:=Worksheets("シート2").Cells(mr, "D").Resize(1, 6)
 を
     Worksheets("シート2").Cells(mr-1, "A").Resize(1, 8).Copy
     Worksheets("シート2").Cells(mr, "A").Resize(1, 8).PasteSpecial Paste:=xlPasteFormats    

     Worksheets("シート1").Cells(r, "A").Resize(1, 6).Copy
     Worksheets("シート2").Cells(mr, "D").Resize(1, 6).PasteSpecial Paste:=xlPasteValues
 といった感じでしょうか?
 (Mook)


 mookさんありがとうございます。^^

 >おわかりかと思いますが、式と値は共存できません
 式をコピすると値までくっついて来るのですね 。。。´x`。

 しかしお陰さまで何とか思い通りになりそうです。
 これをいじりながらいろいろ追加していきたいと思います。

 また分からないことありましたら、ご指導よろしくお願いします。m(_ _)m
 本当にありがとうございました。^^

(さくら)


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.