[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『選択した行をコピーして違うファイルに1列空けて貼り付けしたい』(まちゃ)
(Bファイル) A B C D ・・・X 1 あ い う え 2 か き く け 3 4
(Cファイル)
A B C D ・・・X 1 さ し す せ 2 た ち つ て 3 4
(Dファイル)
A B C D ・・・X 1 な に ぬ ね 2 は ひ ふ へ 3 4
↓↓↓
(Aファイル) A B C D E 1 100 あ い う え 2 101 さ し す せ 3 102 か き く け 4 103 な に ぬ ね 5 104 は ひ ふ へ 6 105
B・C・Dファイルで選択した行をコピーして違うAファイルに貼り付けしたいです。 ただ、AファイルはA列(索番)を空けて貼り付けをしたいです。 簡単な方法などありますか? 素人ですいません。
Excel2003・WindowsXP
↓ですね? [[20110421090424]] 『選択した行をコピーして違うファイルに1列空けて』(まちゃ)
レスがつかないのには理由が有ると思います。
「範囲を選択して コピーして Aファイルの貼り付けたい先頭セルをアクティブにして貼り付け」 と言う作業が、そんなに難しいとは思えません。
マクロでやりたいという事であれば 丸投げ的な質問はしない方が レスがつきやすいですよ。
全文検索もしてみられると良いと思います。
それから、マクロの記録で出来るコードも参考になると思います。
たとえば、B列の入力が有る最後の行へは B列の入力が有るセルよりいくつか下の まだ入力が無い場所のセルをアクティブにして Ctrl + ↑ で移動する事が出来ます。
一つのファイル(現在アクティブに成っているファイルの選択されている範囲)を コピーして、Aファイルの続きに貼り付け と言う作業だけなら、マクロの記録でもある程度の物は出来ると思います。
(HANA)
これでどうでしょうか 同じことの繰り返しですからもっと簡単なマクロがあると思います。 もう少し待ってみましょう。 とりあえず私ので試してください。 Aファイルに張り付けて実行してください。 ABCDファイルは全部開いてからマクロを実行してくださいね。 Sub Macro1() Workbooks.Open Filename:="C:\Documents and Settings\KAZU\My Documents\B.xls" Range("A1:A2").Select Selection.Copy Windows("A.xls").Activate Range("B1").Select ActiveSheet.Paste Application.CutCopyMode = False Workbooks.Open Filename:="C:\Documents and Settings\KAZU\My Documents\C.xls" Range("A1:A2").Select Selection.Copy Windows("A.xls").Activate Range("B3").Select ActiveSheet.Paste Application.CutCopyMode = False Workbooks.Open Filename:="C:\Documents and Settings\KAZU\My Documents\D.xls" Range("A1:A2").Select Selection.Copy Windows("A.xls").Activate Range("B5").Select ActiveSheet.Paste Range("A1").Select Application.CutCopyMode = False End Sub (shota)
shotaさん こんにちは shotaさんはエクセル関数等のファイルを集めているとの事で >http://www.realintegrity.net/~yancha/ブリーフケースからファイルを取ってくださいね。 との案内文があったので、開いてみたのですが Welcome to realintegrity.net というのが表示され 後はどうしていいのか解りませんでした。 宜しければこの後、どうすればファイルにたどり着けるか お教え下さい。 質問者さんへ 横入り申し訳ありません。 (karo)
まちゃさん横から飛び入りまことに申し訳ありません。 karoさんへ どこから見つけられたのかは知りませんが、 たぶんヤフーのブリーフケースが無料だったころのものだと思います。 有料になってからは使っていません。 だから私が悪いんだと思います。 止めるという宣言をしないでほったらかしにしたせいだと思います。 まことにすみません。 私にもどうすればよいのかわかりません。 本当にすみません。 (shota)
マクロの記録案です。 -------------- (1)コピーしたい範囲を選択、コピーを実行しておく ★マクロの記録開始(保存先を個人用マクロブックに指定) (2)(Aファイル)を開く (3) 貼り付け先シート選択 (4) B1選択 (5)Ctl+↓を押す (6)↓を押す (7)Ctl+Vを押す (8)Ctl+Sを押す (9)Ctl+Wを押す ★マクロの記録終了 -------------- でできないでしょうか。 (Mook)
(5)と(6)の間に、「相対参照に切り替え」ってを やっておくのが良いと思いますが。。。
それと、Ctrl+↓ では、1回目がうまくいかないので Ctrl+↑の方が安全に思います。
(HANA)
(Mook)(HANA)さん 言う通りしたつもりですがうまくいきません。 どこが悪いのか教えてください。
ActiveCell.Offset(0, 1).Range("A1").Select Selection.End(xlUp).Select ActiveCell.Offset(1, 0).Range("A1").Select ActiveSheet.Paste Application.CutCopyMode = False ActiveWorkbook.Save ActiveWindow.Close End Sub
(まちゃ)
全体を提示できませんか(ファイル名は書き換えてよいので。) ファイルを開く部分、シートを選択する部分、B列を選択する部分が見当たりません。 カーソルの移動ではなく、マウスでクリックしてください。 (Mook)
Sub サブ1() ' ' サブ1 Macro '
'
Sheets("●").Select ActiveCell.Offset(2, 0).Range("A1").Select Selection.End(xlUp).Select ActiveCell.Offset(1, 0).Range("A1").Select ActiveSheet.Paste Application.CutCopyMode = False ActiveWorkbook.Save ActiveWindow.Close End Sub もちろんマウスで選択しています。でも、うまくいきません。 なぜでしょうか?
まさかとは思いますが、本当は(Excel2003・XP)なんですが、 今(Excel2007【互換モード】・Vista)でしてる事関係ありますか?
(まちゃ)
例ではファイルは閉じた状態から始めています。
開いた状態で実行するなら、最後の保存、閉じるは不要です。 その場合は、マクロの実行時にいつもファイルを開いている必要があります。
ActiveCell.Offset(2, 0).Range("A1").Select Selection.End(xlUp).Select ActiveCell.Offset(1, 0).Range("A1").Select はなんか変ですね。 ここだけ直接 Range("B" & Rows.Count).End(xlUp).Offset(1,0).Select としてみてどうでしょうか。 (Mook)
一緒でした。
ActiveSheet.Paste
色が変わっているのでここがおかしいのですか? (まちゃ)
マクロの実行の前に、 >(1)コピーしたい範囲を選択、コピーを実行しておく は実行していますか? (Mook)
もちろん実行してますよ。
Sub △() ' ' △ Macro ' マクロ記録日 : 2011/4/27 ユーザー名 : '
' Application.WindowState = xlMinimized Sheets("● ").Select Range("B6").Select Selection.End(xlUp).Select Range("B6").Select ActiveSheet.Paste ←ここが色変わってるのでおかしいのですか? Application.CutCopyMode = False ActiveWorkbook.Save ActiveWindow.Close End Sub
やはり出来ません↓教えてください。 (まちゃ)
個人マクロではSelectがダメなのかな? Workbooks.Open Filename:="C:\xxx\yyy\zzz.xls" Sheets("● ").Activate Range("B" & Rows.Count).End(xlUp).Offset(1, 0).Activate ActiveSheet.Paste ActiveWorkbook.Save ActiveWindow.Close でやってみてどうでしょうか。 (Mook)
簡単な事から想定してやってみませんか?
まずは、同じシートでコピー&ペーストをするマクロを記録にしてみます。 ●シートのB1セルに何か入力をして、以降のセルには 入力が無い状態から始めてください。 B1セル以外のセルをアクティブにして、記録を開始して下さい。
●マクロの記録開始 0.相対参照ボタンが押されていない事を確認。 (押された状態でしたら、もう一度クリックしてください。) 1.B1セルを選択 2.Ctrl + C (コピー) 3.B10セルを選択 4.Ctrl + ↑(入力が有る最後のセルに移動) 5.相対参照ボタンを押す。 7.↓(一つ下のセルに移動) 8.Ctrl + V (貼り付け) (9.相対参照ボタンをクリックして、押されていない状態にする。) ■マクロの記録終了
記録で出来たマクロを実行すると、B列の続きにB1セルがコピペされますか? 同じ場所(Paste)の所でエラーに成る様であれば マクロを実行するときに [ステップイン(S)] で実行してください。
VBEの画面が開きますので、大きさを少し小さくして ワークシートと当時に見える様にして下さい。
コードの先頭部分が黄色くハイライトされていると思います。 [F8]キーを押すことで、一行ずつマクロが実行されます。 コピーする行が実行されたら、B1セルが点線で囲われると思います。 貼り付けの行までの間のどこかで、その点線の囲いが解除される所が無いでしょうか?
検証してみてください。
また、コードが正しく記録出来ているか知りたいので こちらへ貼り付けていただければと思います。
(HANA)
(Mook)さんやはりうまくいきません。すいません素人で↓↓
(HANA)さんの言うとおりしたら出来ました。 次は何をすれば良いですか?
Sub 実験() ' ' 実験 Macro ' マクロ記録日 : 2011/4/28 ユーザー名 : '
' Range("B6").Select Selection.Copy Range("B15").Select Selection.End(xlUp).Select ActiveCell.Offset(1, 0).Range("A1").Select ActiveSheet.Paste End Sub
ついでに、PERSONAL.XLS ってなんですか? 急になんで出てきたんですかね? (まちゃ)
うまくいきましたか。 コードも綺麗に記録されているみたいです。 (実際はB6セル以降 と言う事で良いのでしょうか?)
「サブ1」のコードを記録した時に一番最初に ●シートを選択したと思います。 その時のコードの部分が >Sheets("● ").Select ですね?
「実験」のコードの、.Copy の後に Sheets("● ").Select を一行追加して、再度ステップインで実行 をしてみてください。
あ、B7以降にデータが入ったままになっていたら、消しておいて下さいね。
この時、最初は「● 」シートを表示した状態でやってください。
うまくいきましたら、別のシートのB6セルに何か入力をして そのシートを表示した状態で 再度やってみてください。
テストを繰り返すとB6セル以降にどんどんデータが蓄積されていく事に成りますが B15セルまで到達する前に 削除する様にして下さい。
>PERSONAL.XLS ってなんですか? マクロの記録をする時に、記録場所で「個人用マクロブック」ってのが 選択されていませんでしたか?
↓の画像では マクロの保存先(I) [作業中のブック ▼] と成っている所です。
作業中のブックにマクロを記録した場合、そのマクロを利用するためには 記録して保存したファイルを開く必要があります。
個人用マクロブックに記録した場合、エクセルを開いた時に 勝手にそのブックを開いてくれるので 「マクロを記録したブックはどれだっけ?」 なんて意識しなくても、そのマクロが使えます。
今回は「作業中のブック」に記録してもらえれば良いと思います。
(HANA)
(HANA)さん今回もうまくいきました。
Sub 実験() ' ' 実験 Macro ' マクロ記録日 : 2011/4/28 ユーザー名 : '
' Range("B6").Select Selection.Copy Sheets("● ").Select Range("B15").Select Selection.End(xlUp).Select ActiveCell.Offset(1, 0).Range("A1").Select ActiveSheet.Paste End Sub
次はどのようにすればいいですか? (まちゃ)
うまくいきましたか。
でしたら、今は「● 」シートをアクティブにしてやってみてもらいましたが 隣のシートをアクティブにしてやってみてもらえますか?
隣のシートのB6セルに、「● 」シートのB6セルの文字と違う文字を入れて やってみてください。
うまく行きましたら、コードの最初の2行 Range("B6").Select Selection.Copy を削除して、今度は まちゃさんが B6セルをコピーした状態で コードを実行してみて下さい。
(HANA)
うまくいきました。
Sub 実験() ' ' 実験 Macro ' マクロ記録日 : 2011/4/28 ユーザー名 : '
' Sheets("一覧表 ").Select Range("B15").Select Selection.End(xlUp).Select ActiveCell.Offset(1, 0).Range("A1").Select ActiveSheet.Paste End Sub
(まちゃ)
でしたら、後違うのは何処ですか?
「同じファイルの別シートのコピーされている範囲を」 って所が 「別ファイルのシートのコピーされている範囲を」 ですか?
当初のご希望が >違うAファイルに貼り付けしたいです。 と言う事でしたが。。。
「一覧表 」シートは、Aファイルに有りますね?
でしたら、まずは メニュー・ファイル(F)→新規作成(N)で新しいファイルを作り 単独で「一旦そのファイルを選択して、再度 Aファイルを選択」 を記録に撮ってみてください。
そのうち、「Aファイルを選択」の部分のコードを >Sheets("一覧表 ").Select のコードの前に配置してください。
出来ましたら、新しいファイルのどこかのシートのどこかのセルに何か入力をして そのセルをコピーしてから、出来たマクロを実行してみて下さい。
> ActiveSheet.Paste の所でエラーに成りますか?
(HANA)
試しましたが、エラーになります。 何がおかしいのですか?
Sub 実験() ' ' 実験 Macro ' マクロ記録日 : 2011/4/28 ユーザー名 : '
' Workbooks.Open Filename:="C:\xxx\yyy\zzz.xls"
Sheets("一覧表 ").Select Range("B15").Select Selection.End(xlUp).Select ActiveCell.Offset(1, 0).Range("A1").Select ActiveSheet.Paste ←ここでエラーになります。
End Sub
(まちゃ)
ちなみに、このマクロはどのファイルに書いてあって どうやって実行してますか?
さて、コピーするデータが有るファイルを B.xls として話を進めますね。
実験マクロを ステップインで実行してください。
まず、B.xlsの必要範囲をコピーします。 マクロをステップインで実行します。 VBEが開きますので、少し小さくして下さい。 コードを一行実行するとzzz.xlsファイルが開きますね? Bookを小さくして、B.xlsのコピーした範囲が見える様にして下さい。 B.xls と zzz.xls と VBEのコードが書いてある所 が 同時に見えるようにして下さい。
三つとも見える様に配置出来たら、まずzzz.xlsを選択して その後 VBE を選んで [F8] でコードを実行して行きます。
どこかの行が実行された時に、B.xlsのコピーした範囲の点線が 無くなっていると思いますが、何処で無くなりますか?
(HANA)
マクロはコピーするデータがあるB.xlsのファイルにあります。 マクロを開いて実行してます。 (後々、上手くいけばコマンドボタンを作り作業をやりやすくするつもりです。)
さて、(HANA)さんに言われた通りしましたら、止まることなく最後の貼り付けまでいきました。 なので普通にしたらやっぱり上手くいきません。
色々と試して解ったんですが、必要範囲をコピーしてマクロを選んで実行してますが、 マクロを選ぶ時 にコピーした範囲の点線が無くなっています。なんでですか?
1.必要範囲コピー 2.ALT+F8 ←この時点でコピーの点線が消えています。 3.マクロ選んで実行
(まちゃ)
>2.ALT+F8 ←この時点でコピーの点線が消えています。 これですね。 何ででしょうね? 仕様なんじゃないでしょうか。(テキトーな事を言ってますが。。。)
>後々、上手くいけばコマンドボタンを作り作業をやりやすくするつもりです。 って事なので、一歩早めて 仮にオートシェイプで○を描いて 右クリック→マクロの登録(N) でマクロを登録して下さい。
必要範囲をコピー後、○をクリックしてマクロを実行してみるとどうですか?
(HANA)
オートシェイプでマクロ登録してやってみました。 上手く動作しました。 有難うございます。
もうひとつ聞きたいことがあります。 必要範囲をコピーするのですが、範囲が狭いのならドラックしてコピーするのですが、 範囲が一行(A:BC)と広範囲です選択した行をコピーして!ってできますか? (まちゃ)
>上手く動作しました。 でしたら、初め頃にうまくいかなかったのも 同じ問題だったんですね?
先に一つコードの問題ヶ所を直しておきます。 現在は >Range("B15").Select の後に Ctrl + ↑ をして最終行のセルを探しています。 これだと、B15セルまでデータが入っていた場合 うまく検索出来ません。
「シートの最後までデータが埋まる事はないだろう」 と楽観的に考えて「B15」の所を シートの最後のセルに変更しておいて下さい。 一番下は 65536 行なので、"B65536" に変更です。
ちなみに↑でMookさんが Range("B" & Rows.Count).End(xlUp).Offset(1, 0).Activate と書いて下さっていますが Rows.Count ってのが、シート全体の行数を数えた数なので、今回は「65536」に成ります。 おきかえると↓ですね。 Range("B65536").End(xlUp).Offset(1, 0).Activate
現在までで出来ているコードの一部を抜き出すと Range("B65536").Select Selection.End(xlUp).Select ActiveCell.Offset(1, 0).Range("A1").Select の様に成っていますが 2行目の「Selection」ってのは、そのひとつ上の行で選択した B65536 セルの事です。 Range("B65536").End(xlUp).Select ActiveCell.Offset(1, 0).Range("A1").Select 3行目は「ActiveCell」で始まっていますが、これはやはり その前に選択したセルの事ですから 置き換えてみます。 Range("B65536").End(xlUp).Offset(1, 0).Range("A1").Select
すると、Mookさんが書いて下さったコードと似て来ますね。
さて、「"B15"」の所は「"B65536"」或いは「"B" & Rows.Count」に直してもらうとして。。。
>範囲が一行(A:BC)と広範囲です選択した行をコピーして!ってできますか?
そうですね。「Intersect」なんか使うと、VBAっぽいかもしれません。 たとえばこんな感じで。。。
Sub Intersectをつかって() Dim MyRng As Range Set MyRng = Application.Intersect(Selection.EntireRow, Range("A:BC")) If MsgBox(MyRng.Address(0, 0) & " をコピーします。", vbOKCancel) = vbOK Then MyRng.Copy 'ここに、現在出来ているコードをはる End If Set MyRng = Nothing End Sub
間違った範囲がコピーされたら、消せば良いだけかもしれませんが 一応ミスよけに メッセージボックスを表示します。
たとえば「必ず一行ずつしかコピーしないから、複数行選択されてたらメッセージが欲しい」 とか言う条件があれば、その様に作るのが良いと思います。 そんな条件でもあれば、Intersectなんて使わなくても良く成りますね。
これでコードはほぼ完成したと思います。
せっかくですので、Mookさんが書いて下さっている >(8)Ctl+Sを押す >(9)Ctl+Wを押す の部分の追加と
現在 B.xlsにコードを書いていると思いますが 同じコードが C,D,・・・と増えて行くのは 今後の事も考えて、あまりお勧めできません。 もう少し マクロのスキルがあがって「ここを変更したいんだけどなぁ」 となった時に、すべてのファイルのマクロを修正しないといけなくなるので。。。
たちまち、PERSONAL.XLS に書いておくか アドインファイルにしておかれるのが良いと思います。
コードを一つだけにしておけば、そのコードだけ変更すれば良いので。
ご検討下さい。
(HANA)
HANAさんありがとうございます。 コピーの方も上手くいきました。
>現在 B.xlsにコードを書いていると思いますが >同じコードが C,D,・・・と増えて行くのは >今後の事も考えて、あまりお勧めできません。 >もう少し マクロのスキルがあがって「ここを変更したいんだけどなぁ」 >となった時に、すべてのファイルのマクロを修正しないといけなくなるので。。。
>たちまち、PERSONAL.XLS に書いておくか >アドインファイルにしておかれるのが良いと思います。
>コードを一つだけにしておけば、そのコードだけ変更すれば良いので。
PERSONAL.XLS に書いておけばすべてのコードが変更するって事ですか?
↑Mookさんがマクロの保存先を(保存先を個人用マクロブックに指定)って言うてます が! 気にしなくていいのでしょうか? 現在は(作業中のブック)になっています。 (まちゃ)
えっと 個人用マクロブック = PERSONAL.XLS です。 なので、Mookさんが書いておられる場所と同じです。
>PERSONAL.XLS に書いておけばすべてのコードが変更するって事ですか? 違います。
個人用マクロブックに、一つだけコードを作っておいて 他のブックは、(それぞれがコードを持つのではなく) 個人用マクロブックにあるコードを呼び出して使います。
コードが一か所にしか無いので 修正する時も その一つのコードを修正すれば良い事になります。
たとえば、時刻表を 各個人が机に一冊ずつ持っていたら 改正が有った時、人数分の時刻表を買い替えないといけないですね。
でも、入口の机に一冊だけ置く事にして、各個人が必要な時に そこに見に行く事にすれば 買い替える時刻表は一冊で済みます。
時刻表=マクロ 各個人の机=作業中のブック 入口の机=個人用マクロブック のイメージです。
(HANA)
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.