[[20170223204819]] 『ファイルの数式を複数ファイルにコピー』(ななこ) >>BOT

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

 

『ファイルの数式を複数ファイルにコピー』(ななこ)

こんばんは。マクロ初心者です。
過去の質問内容から探してみたのですがうまく見つからなかったため
質問させていただきました。

・Aというファイルがあり、同じ形式でB〜Zというファイルがあります。
・B〜Z全て同じフォルダに格納されています。
・全ファイル1シートずつで構成されており、Aのファイルには値は入っておらず数式のみが入っていて、B〜Zは値は入っていますが数式が入っていません。
このB〜ZのファイルにAの数式シートを元に数式のコピーをしたいのですが可能でしょうか。
また、コピーをする際、
・空白セルは無視して数式を貼り付けたい
・書式(グループ化など)のコピーもしたい

のですが、こんなことってできるのでしょうか?

また、どのファイル(A〜Z)も1シートづつの構成なので特にシートの指定はいらないと思うのですが、もし可能であれば、右から何番目のシートに貼り付ける、などの指定もできますか?(Aの○○というシートを、フォルダ内全ファイルの右から1番目のシートへ貼り付ける、等)

構成としては
ファイルパスを指定し(B〜Zがあるファイル)、
ファイル形式を指定し(.xlsbのファイルに対して、等)
元になるファイル(A)のを指定、ここでシート(貼付元シート)も指定?し、
上記で指定したフォルダ内のファイルに貼り付ける
※ここで右から何番目のシート、数式のコピー(空白は無視する)、書式もコピーする、という指定をする
特定のセルに戻す(A1など)
保存して閉じる

という風な式になるのだと思うのですが、いかんせん初心者で
何から手をつけていいのかもわからず、頼ってしまいました。。
ご教示いただけると幸いです。よろしくお願い致します。> <

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


>何から手をつけていいのかもわからず

まず、AとBで、コピー貼り付けする部分を作ると良いです。
マクロの記録を利用してください。

(マナ) 2017/02/23(木) 21:17


 >ななこ さん
 >Aのファイルには値は入っておらず数式のみが入っていて、

 ★こちらで再現できるように、サンプルデータを提示してください。
 どのセル位置に数式が入っているかなどがわかるように。
 表形式でお願いします。
 こちらのエクセルマクロを使用すると、
 簡単にシートレイアウトされたテキストを作成できます。
http://d.kuku.lu/3a4242c051
 シートレイアウト To Text_To ClipBord.xls
[[20170116012224]]

 コピー元のセル範囲と、コピー先のセル範囲は一緒ですか?
 ★具体的に、それぞれのセル範囲を教えてください。
 数式の「セルの相対参照」が使用されている場合、
 コピー元の範囲とコピー先の範囲が異なると、数式も同じになりません。
 数式の「セルの相対参照」の例→「=A1+(G5)*30」
(マリオ) 2017/02/24(金) 03:07

マリオ様

ありがとうございます。
シートレイアウトをつくろうとしたのですが、元dataが横長すぎるのか貼付できませんでした。。。コピー元のセル範囲とコピー先のセル範囲は同じです。
ファイルA数式シートのA1〜ADA350行目をB〜ZのA1〜ADA350行目に数式コピー(空白セルは除く)、書式のコピー(グループ化の設定など)をしたいと思っています。
難しいでしょうか。。
(ななこ) 2017/02/24(金) 11:36


回答がつかないようなので、もう一度だけ…

>難しいでしょうか。。

その操作を手作業でできるのであれば
マクロを使って自動化するだけ。
まずは、AからBにコピペする部分について
「マクロの記録」を実行してください。

(マナ) 2017/02/25(土) 11:25


 すでに、B〜Z のブックが存在するのでしょうから、いまさら ということでしょうけど、
 そもそも、レイアウトや書式が同じ形式だということであれば、最初から

 ・テンプレートとして、レイアウト、書式がセットされたブックをつくっておく。
 ・それを元に A ブックやB〜Zブックをつくれば、Aブックの書式を B〜Z にコピーするなんてことは
  しなくてもよかったんですよね。

 まぁ、いまさら ということなら、

 ・Aブック(の該当のシート? Aブックはシートがたくさんあるのですか?)をコピーして新規ブックを生成
 ・その新規ブックに Bブックのシートの全セルを値コピー。
 ・その上で、Aブックの数式が入ったセル(これは ジャンプ機能で取得可能)を 1つずつ Bブックの同じセルに
  コピー。
 ・Bブックを上書き保存。

 これを C〜Zにも繰り返しで適用。

 こんな処理でできそうですけど。

 ところで、

 >・空白セルは無視して数式を貼り付けたい 

 この意味は? 
 数式を貼り付ける際に、貼付けてOKか貼付けをスキップするかの条件があるという意味ですか?
 それとも、無条件に(貼り付け先に値があろうがなかろうが)貼り付けるという意味ですか?

 なお、この手順は すべてのブックが1シートという前提です。(そういう説明でしたから)
 でも、説明の途中で、どのシートを元シートにするだの、どのシートに貼り付けるだの
 要件がかわっていってますよね。

 まぁ、それならそれで、可能ですけど、どちらなんですか?

 ★追加で

 >※ここで右から何番目のシート、数式のコピー(空白は無視する)、書式もコピーする、という指定をする 

 指定するのは操作者なんですか? つまり操作者が書式はコピーしないと指定することもあるということですか?

 ★もう1つ。

 Aブックって、このマクロブックですか? それとも、マクロブックとは別のブックですか?

( β) 2017/02/25(土) 23:32


 連投失礼。

 そもそも、テンプレートブックに数式もいれておき、数式が入ったセル以外のロックを外して、シート保護をしておき
 そのテンプレートを元に、B〜Zブックをつくっていれば、このようなマクロ処理そのものが不要だったのでは?

 今からでも、そういった運用を検討することはできませんか?

( β) 2017/02/26(日) 00:14


 >ななこ さん

 そもそも、なんで、B〜Zブックのようなファイルが作成されたのでしょうか?それが謎です。

 βさんもおっしゃているとおり、
 〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓
 B〜Zを作る土台となるテンプレートファイルには、はじめから、
 数式が入っていて、書式が整っているものを使用すべきです
 〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓

 とりあえず、作ってしまったB〜Zファイルを、
 どうするか話し合いましょう!

 _
 _

 >B〜Zは値は入っていますが数式が入っていません。 

 値は、●数字だけでしょうか?文字列は、ありませんか?

 ************************************
 エクセルの標準機能である●「条件を選択してジャンプ」を知ってますか?

 発想を変えて、コピー元2つ、コピー先1つの●計3つで考えます!

 例えば、下記の表(左側と右側)のように、1つのファイルに、
 シートA(※書式が設定されている)と
 シートB(※数字の値のみが入っている、A3セルはデータなし)があった場合に、

     ■シートA(左側)        ■シートB(左側)
    |  [A] |              |  [A] 
 [1]|     1|           [1]|     3
 [2]|     2|           [2]|     4
 [3]|=A1+A2|           [3]|      

 シートA上で、右クリック→コンテキストメニューの「移動またはコピー」
 →(末尾へ移動)を左クリックで選択
 →チェックボックスの「コピーを作成する」をチェック→OKボタン
 →シート名「A(2)」が末尾に作成される→シート名を「2B」にする
 以後、このシートを★シート2Bと呼ぶ。

 次に、シートBの値のみ(※値のうち、数字のみ)のセル範囲
 この場合だと、シートBの「A1:A2」セルをコピーして、
 ★シート2Bの「A1:A2」セルに、形式を選択して、
 値のみを貼り付ける(書式が貼り付かないように)。
 当然に、★シート2BのA3セルは数式「=A1+A2」が入っているので、「7」
 と表示される。
 やりたいことは、こういったことでしょうか?

 問題なのは、
 【シートBの値のみ(※値のうち、数字のみ)のセル範囲】
 を取得できるか、どうかですが、
 このセル範囲取得のために、
 ホームtabにある、●「条件を選択してジャンプ」を使います。
 選択オプションで、「定数」のラジオボタンを選択後に、
 「数値」のみチェックして(文字,論理値、エラー値のチェックを外す)、
 OKボタンを押す。
 この手作業を自動でコード記述させるために、
 ●マクロの記録をしてくださいね。マクロの記録は、やったことありますか?

 先走ってますが、
 自動で記述されるコードには、
「Cells.SpecialCells(xlCellTypeConstants, 1)」
(数値のみの定数のセル範囲を取得)
 が記録されると思います。

(マリオ) 2017/02/26(日) 1:00


β様、マリオ様

色々とご教示いただきありがとうございます。

>B〜Zブックのようなファイルが作成されたのでしょうか?それが謎です。

元々は全て1シートにまとまっていたものです。
10行目〜4万行目程のものが横ADA列まであるシートを、特定行毎にシート分割しています。
まとまっているシートに計算式を入れればいいのですが、いかんせん数値だけでもデータが重く、数式を入れてしまうと動かなくなってしまうため、一旦全て値にしてシートに分割しています。
そうして分けたシートにまとめて数式のコピーをするため、数式のみが入っているAというブックを作り、数式のコピー(空白セルを無視するにチェックを入れる)をしようと思ったのですが、複数シートを選択して作業すると、メモリー不足になってしまい落ちてしまいます。
そのため各シートを値のままブック化し、それに数式をのせていった方が作業が軽いのではないかと思ってお聞きした次第です。
説明文だけだとうまく伝わらず、申し訳ありません。

全てブック化にした後、ひとつづつ手作業で数式コピーをしていくのが
一番早いかもしれませんね。
ありがとうございました。
(ななこ) 2017/02/27(月) 17:27


 >ななこ さん

 >メモリー不足になってしまい落ちてしまいます。

 数式が入っているファイルで、数式が自動で計算されるから、
 作業中にメモリー不足になるのかと思います。

 〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓
 対策として、
 計算の方法を「手動」にしておいて、
 後で、「自動」に戻せばよいのでは?
 〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓

 「数式」タブ→
 「計算方法」グループの「計算方法の設定」をクリック
 →手動

 フォーマットのファイルは、値だけ入っているファイルではなくて、
 数式だけ入っているファイル(★「計算」方法を手動にしておいて、
 後で「自動」に戻す)にすべきだと思いますよ。
 数式をコピーするのではなく、値だけをコピー。

(マリオ) 2017/02/27(月) 19:53


マリオ様

ありがとうございます。
数式はもちろん手動にしています。それでも落ちてしまいます。

言葉ではうまく伝わらないことがわかりました。。
何かいい手を考えてみます。

みなさま、ありがとうございました。
(ななこ) 2017/02/28(火) 16:46


 >ななこ さん
 >何かいい手を考えてみます。 

 どうしても、シート関数を使いたいなら、ファイルの★分割数を増やすしかないのでしょうね
 B〜Zファイルだと、25分割ですが、10倍の250分割にしてみるとか…。分割してられないですね。
 シート関数を使わず、★マクロ処理することを検討してみては?

 ちなみに、数式は、何セルに入っているのでしょうか?
 Aファイルは、A1〜ADA350行目なので、781×350=27万3350セル以下になりますが、

 どんな数式かにもよると思いますが、
 数式が入っているセルが、2万を超えるようなら、★マクロ処理を考えた方がいいよな気がします。

 2万に特に根拠は、ないですが…。
 経験上、4列分に数式が入っていて、5000行ぐらいだと動作が重かったような…。
(マリオ) 2017/02/28(火) 17:49

マリオ様

アドバイスありがとうございます。
B〜Zは例えで(すみません)実際には120弱のファイルに分割をします。

単純に、同じフォルダの中に同じ形式のファイルたちが保存されるので、
各ファイルを開いていき、空白セルを除く数式のコピーと書式設定(グループ化)のコピーをループで行えないかと思い質問してみただけなのですが、あまりに大きく難しい気もします。

数式は全てのセルに入っているわけではありません。
また、列ごとに入っている数式も違います。
(例えばJ列とL列には縦を足す数式、I列にはJ列とK列を足す数式が入る、など)

(ななこ) 2017/02/28(火) 19:00


コメント返信:

[ 一覧(最新更新順) ]


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