[[20141106144547]] 『複数列のコピペ』(1901) ページの最後に飛ぶ

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

 

『複数列のコピペ』(1901)

以下のようなマクロを教えていただけますか?

・ブック名「あ」/シート名「ア」のE,H,Q列をブック名「い」/シート名「イ」のB,M,W列にコピペ
・E列以外の列セルが空欄混じりのためE列(空欄なし)の最終行を基準にコピペしたい
・コピー元/先のブック/シート名や対象列はできるかぎり簡単に変更したい
(変更箇所を注記?いただけると助かります)
・コピー元/先は「開いて」いるものとします
・マクロ実行は「コピー先」シートで行います

この操作はいろいろなブック/シート間でしょっちゅう行うので、できるかぎり汎用性の高い
マクロをもっておきたいもので。

よろしくお願いします。

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


コピー元の先頭行は?
コピー先の先頭行は? 常に先頭から? それとも追記? 追記の場合、3列同じ行にする?
(???) 2014/11/06(木) 16:04

すみません。 
・コピー元/先とも常に2行目からでお願いします
・コピー列は可変でお願いします
(1901) 2014/11/06(木) 16:30

 Sub test()
    Dim i As Long
    Dim cc1 As String
    Dim cc2 As String

    With Workbooks("あ.xlsx").Sheets("ア")
        For i = 0 To 2
            cc1 = Array("E", "H", "Q")(i)
            cc2 = Array("B", "M", "W")(i)
            .Range(.Cells(2, cc1), .Cells(.Cells(.Rows.Count, cc1).End(xlUp).Row, cc1)).Copy Cells(2, cc2)
        Next i
    End With
(???) 2014/11/06(木) 17:51

うまくいきましたっ!

マクロ記録程度しかできませんので、おおいに助かります。。。
Arrayも初めて目にしました。
(素人にはムズだけど処理速度には有利なようですね)

これからいろいろなファイルに移植?していこうと思います。

ありがとうございました!
(1901) 2014/11/07(金) 13:30


確認させてください。。。

希望した「E列の最終行に合わせて他の列もコピペする」
ようにはなっていないのですね?

実害はなさそうなのでこのまま使わせていただきますが、
E列(選択する最左列)の列の最終行に合せて他の列を
コピペすることは可能でしょうか?

(1901) 2014/11/07(金) 17:13


>・E列以外の列セルが空欄混じりのためE列(空欄なし)の最終行を基準にコピペしたい

これは、基準にコピペとはどういう意味か判らなかったので、

>・コピー元/先とも常に2行目からでお願いします
>・コピー列は可変でお願いします

これを読んで、コピー列可変ということは、3列共行数ばらばらのままコピーするのかと解釈しました。
コピー行数をE列に合わせて固定にするならば、以下を変えてみてください。

.Cells(.Rows.Count, cc1).End(xlUp).Row
 これは、各列の末尾行の意味なので、これを、E列固定に。
.Cells(.Rows.Count, "E").End(xlUp).Row

ちなみに、Arrayの利用は速度面からではなく、コーディングの分かり易さ、直し易さのためです。
(???) 2014/11/10(月) 09:04


うまくいきましたっ!

これぐらいの変更は自分でできなくてはならないですよね..
と言えないのがつらいです。。。
(ここで徐々に学ばせていただきます)

ありがとうございました、これからもよろしくお願いします。

(1901) 2014/11/10(月) 17:05


すみません。

上記のマクロを「コピー元」で実行するにはどこを
どのように変えればいいのでしょうか?

情けないですが、なんともならず。。。

再度よろしくお願いします。

(1901) 2014/11/16(日) 18:02


>With Workbooks("あ.xlsx").Sheets("ア")

これは、いまは自分のブック以外のコピー元シートを示しています。まず、これをコピー先に変えてください。
コーディング中で Range や Cells や Rows の先頭がドットの場合、上のWith指定したシートの意味になります。

いまは、コピー元の指定には全部ドットが付いていて、コピー先には付いていませんね。
コピーしている1行の、このドットの有無を、全て逆にしてみてください。

           Range(Cells(2, cc1), Cells(Cells(Rows.Count, cc1).End(xlUp).Row, cc1)).Copy .Cells(2, cc2)
(???) 2014/11/17(月) 11:43

なんとか変更できたので、取下げようとしていたところでした。
でも、回答いただいてよかったです。

冒頭のファイル名を変える方法を考えてたんですが、お手上げでした。
で、>Copy Cells(2, cc2)< を
>Copy Workbooks("い.xlsx").Sheets("イ").Cells(2, cc2)< に
して一見うまくいってるようなんですが。。。
ファイル名が2回出てくるしヤボッタイですよね^^;

基本がわからず四苦八苦..といったところでしょうか。。。

ありがとうございました。

(1901) 2014/11/17(月) 13:19

 ※共用パソコンのため、他の人のネームになってたのを訂正しました。

再々度教えていただけますか?

実際のデータではコピー先にデータがあるため、貼付ける前に
全て「消去」しておきたく修正したんですがエラーとなります。
※基礎知識もなくやっているので当たり前と反省してます。。。

下記のどこをどのように直せばいいでしょうか?
*「Erase」のところでエラーになります
*コピー元「実行」にしてあり、追加するまでは正常でした
*コピー元先の対象は最初のと変わっています
*追加変更部分のみ記します

 Sub test_K()
    (略)
    Dim j As Long     '追加
    With Workbooks("T3.xls").Sheets("T3")   'コピー先変更
        For j = 0 To 2     '追加
            cc2 = Array("A", "C", "E")(j)   '追加
            Erase .Cells(2, cc2)   '追加
        Next j   '追加
        For i = 0 To 2
            cc1 = Array("E", "G", "I")(i)  '対象列変更
            cc2 = Array("A", "C", "E")(i)  '対象列変更
    (以下同様)

よろしくお願いします。。。

(1901) 2014/11/19(水) 10:17


Eraceは意味が違います。また、iのループと重ならないので、変数jは追加しなくて良いでしょう。

        For i = 0 To 2
            cc2 = Array("A", "C", "E")(i)
            .Range(.Cells(2, cc2), .Cells(.Rows.Count, cc2)).ClearContents
        Next i

または、他の列もまとめて消して良いならば、以下の1行のほうが良いです。

        .Rows("2:" & .Rows.Count).ClearContents
(???) 2014/11/19(水) 12:16

>Eraceは意味が違います。
→これもちょっと恥ずかしい質問になりますが、>違い<とは
 プロパティとステートメントのことでしょうか?

基本がわかってないところ、許してください。。。
(1901) 2014/11/19(水) 16:22


Eraseは配列を初期化するステートメントですと言ってもよくわからないと思いますので以下の例

Sub EraseSample()

    Dim A(3) As String
    Dim i As Long

For i = 0 To 3

    A(i) = i
    MsgBox A(i)
Next i

    Erase A

For i = 0 To 3

    MsgBox A(i)
Next i

End Sub
結果は0 1 2 3
になります。
もっと詳しく知りたいのなら以下や開発者用リファレンスなどを参考にしてください
http://officetanaka.net/excel/vba/statement/Erase.htm

(デイト) 2014/11/19(水) 16:45


ありがとうございます。

実は紹介いただいたところ見にいってますが、よくわからなかったです。。。

しょせん、今の自分はこんなていどなわけですが。。。

「初期化」と「消去」がよくわかってないのか、あるいは“マクロ脳?”が
自分にはないのかなぁ〜と思ってますが。。。

でもめげずに一歩でもみなさんに追いつきたいと前を向いていきますので。

これからもよろしくお願いしますね。

(1901) 2014/11/19(水) 21:29


コメント返信:

[ 一覧(最新更新順) ]


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