[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『複数列のコピペ』(1901)
以下のようなマクロを教えていただけますか?
・ブック名「あ」/シート名「ア」のE,H,Q列をブック名「い」/シート名「イ」のB,M,W列にコピペ
・E列以外の列セルが空欄混じりのためE列(空欄なし)の最終行を基準にコピペしたい
・コピー元/先のブック/シート名や対象列はできるかぎり簡単に変更したい
(変更箇所を注記?いただけると助かります)
・コピー元/先は「開いて」いるものとします
・マクロ実行は「コピー先」シートで行います
この操作はいろいろなブック/シート間でしょっちゅう行うので、できるかぎり汎用性の高い
マクロをもっておきたいもので。
よろしくお願いします。
< 使用 Excel:Excel2010、使用 OS:Windows7 >
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
これは、基準にコピペとはどういう意味か判らなかったので、
>・コピー元/先とも常に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
これは、いまは自分のブック以外のコピー元シートを示しています。まず、これをコピー先に変えてください。
コーディング中で 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
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
基本がわかってないところ、許してください。。。
(1901) 2014/11/19(水) 16:22
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.