Excel (VBA)

Excel VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 10 Pro : Excel 2013)
他のBookのシートをコピーする
投稿日時: 18/05/07 17:27:53
投稿者: olive23804

「xlsxの内容をxlsmにコピー&処理し、xlsxに戻す」の関連する質問です。
再びよろしくお願い致します。
 
データが設定されたxlsxは、他のシステムから配信されます。
配信だけであれば問題ないのですが、この配信されたファイルを人が確認し修正を行います。
そして、また修正したファイル(場合によっては修正無し)を、配信先に戻します。
この確認作業の際にマクロを使っているのですが、配信先に戻す際にxlsxでなければなりません。
 
そのため、マクロ付のEdit.xlsmを作成し、配信されるxlsxを読み込み、マクロで値のチェックを行おうと考えています。
これは、前回質問しました「xlsxの内容をxlsmにコピー&処理し、xlsxに戻す」で、できる!と教えて頂いたので、そのように現在作成しているところです。
 
 
◆配信されるファイル
 A_YYYYMMDDhhmmss.xlsx
 B_YYYYMMDDhhmmss.xlsx
 C_YYYYMMDDhhmmss.xlsx
 ・
 ・
 ・
 M_YYYYMMDDhhmmss.xlsx
 
 
◆上記ファイルのシート構成
 Date:採取データ日時
 Rep:人が修正するシート
 Original:データ取得結果
 Def:定義
 
シートのOriginalとRepは、配信された時には見た目は同じフォーマットで同じ値が入っています。
 
Repは、Originalを参照しています。
Rep!A1 = Original!A1
Rep!A2 = Original!A2
.
.
.
 
ここからが質問です。
Edit.xlsmに、見た目はxlsxの全てのシートがコピーできました。
しかし、
 
・上記の参照(Rep!A1 = Original!A1)はコピーされず、値そのものがコピーされました。
・Repで値を修正した時に、Originalとは異なるということで条件付き書式で色を付けるような設定にしているのですが、それが反映されていません。
 
コピーは、xlPasteAll、xlPasteAllMergingConditionalFormats で実行してみましたがダメでした。
 
これらも、そのままコピーされるような方法はあるのでしょうか?

投稿日時: 18/05/07 17:40:01
投稿者: olive23804

追記
 
オプションボタンもコピーされていませんでした。

回答
投稿日時: 18/05/07 19:52:18
投稿者: WinArrow
投稿者のウェブサイトに移動

引用:
Rep!A1 = Original!A1
Rep!A2 = Original!A2

 
このコードを具体的に書いてみてください。

回答
投稿日時: 18/05/07 22:28:36
投稿者: よろずや

>これは、前回質問しました「xlsxの内容をxlsmにコピー&処理し、xlsxに戻す」で、できる!と
>教えて頂いたので、そのように現在作成しているところです。
 
そんなこと教えたつもりはありません。
xlsmのファイルをいじらずにxlsxのままコピーを別名保存して、xlsxファイルを直接いじるような方向で納得して頂けたものと思っておりました。

回答
投稿日時: 18/05/07 23:30:52
投稿者: WinArrow
投稿者のウェブサイトに移動

よろずや さんの引用:

そんなこと教えたつもりはありません。
xlsmのファイルをいじらずにxlsxのままコピーを別名保存して、xlsxファイルを直接いじるような方向で納得して頂けたものと思っておりました。

 
きびしいご指摘!!
 
前回、私も、xlsxのクローンを作成・・・・・ってアドバイスしたんですが、
ご理解されていないようですね?

投稿日時: 18/05/08 09:51:33
投稿者: olive23804

よろずやさんやWinArrowさんのご説明は、納得していなかったことになると思います。
 
何かあった時に戻せるようにxlsxnのクローンは作成し、それをxlsmに取り込もうとしています。
それが欲しい形で取り込めなかったので再質問しました。
そして、修正を行ってファイルを保存する時に別名保存でxlsxにするという意味と理解しました。
 
 
>xlsmのファイルをいじらずにxlsxのままコピーを別名保存して、xlsxファイルを直接いじるような方向で納得して頂けたものと思っておりました。
 
「xlsxファイルを直接いじる」部分ですが、いじるためにマクロが必要なので、xlsxにマクロを追加するような処理をEdit.xlsmに書くというこのなのでしょうか?
Edit.xlsmからマクロを実行させ、別Excelファイルに対して変更を行うという意味なのでしょうか?
 
何度も申し訳ございませんが、よろしくお願い致します。

回答
投稿日時: 18/05/08 10:27:01
投稿者: よろずや

>Edit.xlsmからマクロを実行させ、別Excelファイルに対して変更を行うという意味なのでしょうか?
です。

回答
投稿日時: 18/05/08 11:14:13
投稿者: Suzu

例えば
 
同一フォルダ内に、
マクロ有効なブック  : マクロ.xlsm
元となるワークブック : 元.xlsx
 
を用意し
 
 
マクロ.xlsm に 下記を設定し実行すれば、
同一フォルダ内に、元.xlsx をコピーし、更に A2 に 「い」と入力されたファイルが作成されます。
 
Sub TEST()
    Dim app As Excel.Application
    Dim wbk As Excel.Workbook
    Dim wst As Excel.Worksheet
 
    Dim strFldPath As String
 
    Set app = Excel.Application
 
    strFldPath = ThisWorkbook.Path & "\"
 
    Set wbk = app.Workbooks.Add(strFldPath & "元.xlsx")
    Set wst = wbk.Worksheets("Sheet1")
    wst.Range("A2").Value = "い"
 
    Set wst = Nothing
    wbk.SaveAs strFldPath & "先.xlsx": wbk.Saved = True
    wbk.Close: Set wbk = Nothing
    Set app = Nothing
End Sub
 
この応用です。

回答
投稿日時: 18/05/08 11:18:44
投稿者: WinArrow
投稿者のウェブサイトに移動

「別ファイルで保存する」=(クローンを作成と同意味)の目的が理解できていないようです。
 
受信したファイルは、開いてみないと修正が必要かわからないと考えます。
 
>この確認作業の際にマクロを使っているのですが
 
この確認作業というのは、
修正の結果を確認しているのか?
修正が必要なのかを確認しているのか?
どちらなんでしょう?
 
前者であるならば、修正前にクローンを作成する必要があります。
後者ならば、修正が必要と判断してから、クローンを作成してもよいでしょう。
 
で、なぜ、クローンが必要かというと、
修正(手でもマクロでも)が正しいか?検証することはとても大事なことです。
絶対的な自信(確信)があれば、クローンは必要ありません。
でも、そんな人はいませんよね。クローンは、バックアップのためです。
 

投稿日時: 18/05/08 15:16:31
投稿者: olive23804

よろずやさん、suzuさん、WinArrowさん
 
コメントありがとうございます。
大変に助かりました。
 
バックアップの意味は理解しています。
自分のパソコンは、コマンドを作成してDaily Backupを実行しています。
 
業務内容のためあまり詳細に書けないのがもどかしいところですが、クローンは必要ないのです。
最初はアドバイス通りクローンを考えましたが、よくよく考えると再計算を実行すると前の状態に戻るからです。
(正確には若干違うのですが、ここで言われるクローンと同じ意味なので)
また、特段必要でない処理を書いておくと、後々このマクロを修正する別の方が悩むと思ったからです。
 
とりあえず、Edit.xlsmにマクロを作成して、そのマクロから別ファイルへの希望する処理はできるようになりました。
 
xlsmにxlsxを取り込んで処理をしようと考えていたので、みなさま方のコメントが無ければ遭難していました。
最適な道へのアドバイス頂きありがとうございます。
 
またよろしくお願い致します。