[[20171211134425]] 『シートを他のブックへコピー』(お肉さん) ページの最後に飛ぶ

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

 

『シートを他のブックへコピー』(お肉さん)

お世話になります。
漠然とした質問で申し訳ありませんが、
Aのブックのシート2枚のコピーをBのシートにマクロで移す事は可能ですか?

一応やりたいことは
1、Aのブックで請求書を作り、提出用と保存用の2枚のシートを作成します。
2、それをBのブックにコピーして
3、Aのブックに次の顧客の請求書を作って同じようにBのブックに移します
4、というのを何人分か行ったら
5、Bのブックに移ったシートをPDF化して保存及び印刷がしたい

の1〜4がマクロで出来ればもの凄く助かるのですがいかがでしょうか?

よろしくお願いします。

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


マクロでシートコピーできますが、それだけなら手作業の方が早くないですか?
それと、AブックとBブックを分ける意味が不明。Bブックって、2シートずつAシートからコピーするだけですよね?

そして、マクロを作れば楽ができるようになりますが、他人にマクロを作らせようとしては駄目ですからね? それは貴方の仕事ですよ。
(???) 2017/12/11(月) 14:10


???さん
自分で作るので伺っているのに何故他人に作らせる話が前提なのでしょうか?
マクロでする作業自体手作業で出来るモノを自動で作ってり出来るモノなのに何故否定から入るのでしょうか?
出来ないなら出来ないで良くて、出来るなら助かるな〜、て感じで質問させて頂いたのに何故そこまで全否定なのかよく分かりません。
ちなみにAのブックとBのブックを分けて質問したのはAのブックで請求書は大量の枚数印刷出来ますが、一つ一つの請求書は良びだす事は出来てもそれをまとめてPDFにするのはとても手間がかかるので別のブックに枚数を気にせず請求書を一括保存してデータとして残したり、PDFにして渡したり出来れば良いなと思い質問させて頂きました。
(お肉さん) 2017/12/11(月) 14:59

ご自分で作るのですね。それは失礼しました。

何故作業依頼と思ったのかというと、質問が「以下の内容がマクロで可能か?」だけだったからです。可能かどうかならば、「可能」という答えにしかなりませんので、そんな答えを望んでいるとは思えませんでした。 普通にマクロに関する質問であれば、現在のコードを挙げて、こういう現象がでて、マクロでは無理か?と思っているが、いかが?、とかになるもので。

そして、処理内容も、私の理解だと以下ですが、正しいでしょうか?

1.手作業でAブックに2シート作成。
2.手作業でAブックの2シートをBブックにコピー。
3.手作業でAブックに次の2シート作成。Bブックにコピー。
4.これを繰り返す。
5.PDF保存、印刷。

5番が判らない、ならば納得ですが、1〜4のマクロ利用ですよね? シートコピーは手作業でもすぐだし、マクロ化の意味が無いと思います。書かれていませんが、もしかして、Aブックは常に2シートで、Bブックにコピー後は入力を全て消去している、とかならば、少しマクロ化を考えるのが判ります。 しかし、それでも入力しない空のひな形シートを用意して、それをコピーしてから入力すれば、いちいち消さなくて済むし、そもそもBブックにコピーする必要もないし…、と思います。

改めて尋ねますが、知りたいことは、他ブックに2シート追加コピーする事がマクロで可能かどうか、なのでしょうか?
(???) 2017/12/11(月) 15:34


さりげなく すいません
まず下記内容は調べればすぐ出てくると思います
これをどの様に調理しているか?
その時の不具合を質問される事が良いと思いますよ

ただ漠然とマクロで出来ること出来ないこと判断したいのなら
一通りの作業を記録とってみて
再現出来るか出来ないかで判断するのも
一つの方法と考えます

別ブックからコピぺ
Workbooks("別ブック.xlsx").Worksheets("コピー元").Copy After:=Workbooks("このブック.xlsm").Worksheets("Sheet1")
印刷
Sheets(Array("Sheet1", "Sheet2", "Sheet3")).PrintOut
PDF作成
WorkSheetオブジェクト.ExportAsFixedFormat Type:=xlTypePDF,

 fileName:=ファイル名

>4、というのを何人分か行ったら
個別にシートを増やすのか  1シートに下にずっと書いていくのか
PDFファイルは個別に作るのか 月とかでまとめて1個のファイルにするのか
処理が変わってきます

頑張ってください
(++) 2017/12/11(月) 16:35


 喧嘩を売っているわけではないことだけご承知おきいただきたいのですが。
 (それとすみません回答ではないんですけども)

 上記の内容が「可能か否か知りたいだけ」なら、ここに書き込むのに使用した機器なりで
 Google検索にでもかければ回答を待たずともすぐに判明すると思いますよ。

 ここの回答者さんたちは、みなさんまず自分で調べることを大前提にしていると思うので、
 可能かどうか知りたいだけで終わらないのでは? と思ってしまわれたのだと思います。

 事実、ここの掲示板の質問内容を見ているとよくそういった(質問ではなく作成依頼に近い)
 書き込みもよく見かけますので。

 過去の質問はもちろん知らなくていいですし、そんな事情も知らなくて全くかまわないんですが
 顔を合わせもしない他人に話をするのならば、なるべく必要な情報は出しておくといいと思いますよ。
 自分で作ろうと思っているが可能なのだろうか、それを知りたいとかそんな形で。
 実際に質問するときには、本質部分が書き込めてない人も多いですからね。

 ちょっとかぶってしまいましたが、書いたので一応載せておきます。
(わをん) 2017/12/11(月) 16:40

皆様いろいろなご意見ありがとうございます。
質問の仕方に関してはもっと具体的に書くよう心がけたいと思います。
過去の質問も確認しては見たのですが特にどれが正解なのかが分からずまた自分でもマクロは作ってみたモノの大分イメージと違うので余計な事は書かず質問した方が良いかと思い上の様な質問になってしまいました。

流れとしては請求書の様なものを自分の所で印刷する分には問題なかったのですが、それを他の店の方に配布するのに
1.そのまま印刷するだけのエクセルのブックを作成して転送
2.PDFにしてそのまま印刷して貰えるようにする

のどちらかをしたいと思いました。

PDFにするにしてもExcelブックにするにしても請求書は2枚1組の物で、その時によって必要な請求書の数は未定です。

他店では請求書と請求書の裏面のみ必要で他の情報はいりません。

請求書は氏名や簡単な金額などが関数の呼出で表示され
請求書の裏面は細かい日数や金額等の情報が日付の昇順で表示されるようになります。
これを該当者の数だけ呼出・印刷していましたがシートを増やすにしても書式が決まっていて貼り付けだと表がうまく複製出来ないので複製用のシートを作り、情報を更新し、それを別なブックにコピーするというような感じで行いたいです。

ちなみに自分で組んだマクロは以下の通りで

   Dim i As Long

    Dim ws1 As Worksheet
    Dim ws2 As Worksheet
    Dim ws3 As Worksheet

    Set ws1 = Worksheets("請求書")
    Set ws2 = Worksheets("請求書(裏)")
    Set ws3 = Worksheets("印刷頁")

    ws3.Activate
    i = Range("B5")
    ws1.Activate
    Range("D5").Value = i

    ws2.Activate
    Range("D9:H39").Select
    Selection.Sort Key1:=Range("D9"), Order1:=xlAscending, Header:=xlNo, _
        OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, SortMethod _
        :=xlPinYin, DataOption1:=xlSortNormal

  ws.Activate

    ws.Range("GC10").Select
    Selection.Copy
    Sheet292.Select
    Range("GC10").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
        ActiveSheet.Name = Range("D1").Value

    ws1.Activate
    Range("D9:G39").Select
    Selection.Copy
    i = ws1.Range("BV4").Value
    Sheet294.Select
    Range("D9").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Sheet294.Range("BV4").Value = i
    ActiveSheet.Name = Range("AJ4").Value
    Application.CutCopyMode = False

  Sheets(Array("(請)", "(裏)")).Copy

    ws3.Activate
    ws3.Range("A1").Select
    Application.ScreenUpdating = True
End Sub

という感じで作っては見ましたが、これだと
請求書と裏面の二つのシートを新しいブックに移動させる事は出来ましたが、2人以上の請求書を作る時にブックも同じ数だけ出来るのでこれを一つのブックにまとめる事は出来ないモノかと思い質問させて頂きました。

それと一度自分のやりたいことを記録を取ってみましたが、マクロにブックの選択が表示されず同じ工程を再現できませんでした。

このような感じだと分かりやすいでしょうか?
ご協力頂ければ幸いです。宜しくお願いします。
(お肉さん) 2017/12/11(月) 21:40


おはようございます
まず お客様に配るのはPDFが妥当と思います

請求履歴等のシートを作り経緯記録していく
A列 日時 B列 顧客名 C列 金額 いかずらずらと
シート 請求書と シート 請求書裏 の内容すべて1行でまとめる感じで

請求書 請求書裏が完成した時点  その2個のシートをPDF化 および 纏めシート転記のVBA作成
そのようにすれば 1つのBOOKで済むと思います

(++) 2017/12/12(火) 09:25


きれいなコードじゃないけど
PDF化するサンプルです

  Dim FileName As String
Dim FilePath As String
Dim FSO As Object
FileName = ThisWorkbook.Name
Set FSO = CreateObject("Scripting.FileSystemObject")
FileName = FSO.getbasename(FileName)
FilePath = ThisWorkbook.Path & "\"
 Sheets(Array("請求書", "請求書裏")).Select
 Sheets("請求書").Activate 
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, _
FileName:=FilePath & FileName & "_" & Range("顧客入力セル") & Range("日付セル") .Value & ".pdf", _
Quality:=xlQualityStandard, _
IncludeDocProperties:=True, _
IgnorePrintAreas:=False, OpenAfterPublish:=True

    ThisWorkbook.Save

(++) 2017/12/12(火) 09:38


プリントアウトするコード

Sheets(Array("請求書", "請求書裏")).Select

    Sheets("請求書").Activate
    ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True
(++) 2017/12/12(火) 09:41

一覧へ転記するコード

Dim sh1, sh2 As Worksheet
Set sh1 = Worksheets("請求書")
Set sh2 = Worksheets("請求書裏")
With Sheets("請求書一覧")

     intRow = .Cells(Rows.Count, "B").End(xlUp).Row
    i = 1 
   .Range("A" & i + intRow) = sh1.Range("A1").Value
   .Range("B" & i + intRow) = sh2.Range("A1").Value
    End With
(++) 2017/12/12(火) 09:52

請求書の数だけブックまたはPDFの数が多くなり、部門毎に受け渡したとしても、印刷するのに1つずつ開いては印刷、だと手間がかかる、ということですかね? だから1ブックに複数請求書をまとめようと考えたのか、と想像します。

既存ブックに、2シート転記するならば、以下。(Book2が、仮に決めた転送先まとめブック)

 Sub test()
    With Workbooks("Book2")
        ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count - 1).Copy after:=.Sheets(.Sheets.Count)
        ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count - 0).Copy after:=.Sheets(.Sheets.Count)
    End With
 End Sub

しかし、別案があります。 まとめブックは作成せず、現行のまま1請求書1ブックとして、新たなブックを1つ作成。これは指定フォルダ下にある請求書を一覧化する機能と、チェックを入れる(セルに○×する)と、指定されたブックを連続印刷する機能を持たせる。 こんな方法ではいかがでしょうか?
(???) 2017/12/12(火) 10:03


皆様いろいろありがとうございます。今日はちょっと忙しいのでゆっくり検証してみたいと思います。ありがとうございます
(お肉さん) 2017/12/12(火) 13:10

コメント返信:

[ 一覧(最新更新順) ]


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