[[20110423235314]] 『選択した行をコピーして違うファイルに1列空けて』(まちゃ) ページの最後に飛ぶ

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

 

『選択した行をコピーして違うファイルに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.