[[20160203222726]] 『vbaでコピーペーストについて』(らむ) ページの最後に飛ぶ

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

 

『vbaでコピーペーストについて』(らむ)

vbaでのコピー、ペーストについて教えて下さい。

シート1には、A6以下に、7行毎に氏名が入力されていて、
だいだい300名分あります。

その300名近い氏名だけをコピーし、シート2のA2に最初の名前(シート1のA6の氏名)を、
31行分貼り付け、
32行目にシート1の2番目の氏名を31行分、、、と貼りたいのですが、
どういったvbaになりますでしょうか?

※シート2のA列には同じ氏名が31づつ続くかたちになります。

※31行必要なのは、この横に一ヶ月分の日付が入るので、
その日付分に呼応させるため氏名を31入れたいからです。

< 使用 Excel:Excel2013、使用 OS:Windows7 >


 とりあえず、効率も無視した、バカチョンコードです。

 値転記版(Test1) と コピペ版(Test2)

 Sub test1()
    Dim i As Long
    Dim x As Long

    Dim sh1 As Worksheet
    Dim sh2 As Worksheet

    Set sh1 = Sheets("Sheet1")
    Set sh2 = Sheets("Sheet2")

    sh2.Range("A1", sh2.UsedRange).Offset(1).Columns("A").ClearContents

    x = 2

    For i = 6 To sh1.Range("A" & Rows.Count).End(xlUp).Row Step 7
        sh2.Cells(x, "A").Resize(31).Value = sh1.Cells(i, "A").Value
        x = x + 31
    Next

 End Sub

 Sub test2()
    Dim i As Long
    Dim x As Long

    Dim sh1 As Worksheet
    Dim sh2 As Worksheet

    Set sh1 = Sheets("Sheet1")
    Set sh2 = Sheets("Sheet2")

    sh2.Range("A1", sh2.UsedRange).Offset(1).Columns("A").ClearContents

    x = 2

    For i = 6 To sh1.Range("A" & Rows.Count).End(xlUp).Row Step 7
        sh1.Cells(i, "A").Copy sh2.Cells(x, "A").Resize(31)
        x = x + 31
    Next

 End Sub

(β) 2016/02/03(水) 22:59


β様

ありがとうございます!
すみません、後学の為、教えてほしいのですが、

sh2.Range("A1", sh2.UsedRange).Offset(1).Columns("A").ClearContents

というのは、シート2のA列に何かセルが入ってる可能性を考えて、
消す?というコードでしょうか??

また、

sh2.Cells(x, "A").Resize(31).Value = sh1.Cells(i, "A").Value

sh1.Cells(i, "A").Copy sh2.Cells(x, "A").Resize(31)

この式の意味について教えていただけますか?
テスト2の方は、シート1のA6から7行をコピーし、シート2のA2にへということですか??
実際31行貼るのは
x = x + 31
かと思うのですが、resize(31)ってどういう働きになりますか?、

質問ばかりですみません!

(らむ) 2016/02/03(水) 23:53


 >>シート2のA列に何かセルが入ってる可能性を考えて、  消す?というコードでしょうか?? 

 はい、たとえば前回の転記結果が残っていて、それが今回のものより多かった場合、下のほうに前回のものが
 のこっていて、今回のものと見分けがつかなくなるので。

 >>sh2.Cells(x, "A").Resize(31).Value = sh1.Cells(i, "A").Value 

 値転記のコードです。転記先領域.Value = 転記元領域.Value です。
 通常は転記先の領域サイズと転記元の領域サイズを同じにして転記することがほとんどですが、
 今回は、31セルに対して、1セルから転記しています。 
 転記先のサイズが 指定のA列のセルを基準に下に 31セル伸ばしたもの、Resize(31) としています。

 >>sh1.Cells(i, "A").Copy sh2.Cells(x, "A").Resize(31) 

 いわゆるコピペです。指定の1セルの値を転記先の31セルにコピペしています。
 たとえば A6 に ABC とあったとき、A6 を選択して Ctrl/c。 次に F1:F31 を選択して Ctrl/v とやると
 F1:F31 に A6 の値がペーストされますよね。そのコピーとペーストをあわせた形のコードです。

(β) 2016/02/04(木) 00:07


β様

ご丁寧に教えていただき、ありがとうございました!!
すごく勉強になりました!
(らむ) 2016/02/04(木) 06:40


コメント返信:

[ 一覧(最新更新順) ]


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