• 締切済み

エクセルで他のブックのセルデータの更新方法は?

他のサイトでも質問させて頂いたのですが、回答が付く前に締切になってしまったので、こちらのサイトでもう一度質問させて頂きます。 複数の学習問題印刷用のエクセルファイルがあります。 (問題1.xls・問題2.xls…) 問題を印刷するときに、種類にかかわらず10枚印刷するごとに「あたり」の文字を印刷したいのです。 印刷枚数を記録するためのファイル(印刷枚数.xls)を作り、そのセルデータを参照して何枚目の印刷かを判断したいと考えています。 流れとしては  (1)問題1.xlsを開く   ↓  (2)印刷枚数.xlsのセルデータの数値を参照し「あたり」(10枚目・20枚目・30枚目…)かどうか判断する   ↓  (3)印刷枚数.xlsのセルデータの値を+1して保存する   ↓  (4)問題1.xlsを印刷しファイルを閉じる   ・   ・   ・  (1)問題3.xlsを開く   ↓  (2)印刷枚数.xlsのセルデータの数値を参照し「あたり」」(10枚目・20枚目・30枚目…)かどうか判断する   ↓  (3)印刷枚数.xlsのセルデータの値を+1して保存する   ↓  (4)問題3.xlsを印刷しファイルを閉じる   ・   ・   ・ です。 この(3)の動作を印刷枚数.xlsを開かずに行いたいと考えています。 どなたかアドバイスをお願いいたします。

みんなの回答

  • Nouble
  • ベストアンサー率18% (330/1783)
回答No.5

追記 データファイルは 開けっ放しでも 実は、構わない の、ですが 抑も、 内部変数 特に グローバル変数、等で 処理せず トランザクションデータファイルを 儲け、処理する 其の、意義 と、しては 処理の堅牢性 言い変えれば トラブルリカバリー性 と、言う 此の点が、 上記の、 其の、意義 と、して 多く、挙げられる 要素群の、一つ な、訳 ですが 他方で オープンしっぱなしで 処理終了したFileは 他からは 開けない可能性が、出ます 言うまでもなく、此では、 処理の 堅牢性、リカバリー性、 其れ等が、保てません 故に、 開きっぱなしにする様な、やり方では 意味消失し グローバル変数で、処理させた方が 利点が、多くなります と、言う事で 結局は 「データファイルは 小まめに、クローズする」 此を、お勧めします よ まぁ、 オープン、クローズ、 の、オーバーヘッドは 増えますが、ね あと、実質的な、 VBAコードを、ご所望なら 別途、其の旨 お求めください。

すると、全ての回答が全文表示されます。
  • Nouble
  • ベストアンサー率18% (330/1783)
回答No.4

此って ローカル変数では駄目 て、事ですよね? グローバル変数でも、 ある程度は、対応できる と、思いますが https://support.microsoft.com/ja-jp/help/408871 わざわざ、セルに 値を、止めるのは 処理アボート時への、対策 か、何かですか? でも、 セルに、止めなくても データファイルを、作らせて オープンと、クローズーを、 繰り返し、つつ 更新させれば 出来ますよね? http://officetanaka.net/excel/vba/file/file08.htm やりたいのは、こう言う事 ですか? 違ったなら 補足を、頂けますか? もしかして お役に、立てた なら 幸いです。

yosshi26
質問者

お礼

返答が遅くなり、申し訳ありません。 何もエクセルファイルにこだわる必要は無いので、教えて頂いたサイトを 参考に、テキストファイルを使って試してみたいと思います。 有難うございました。

すると、全ての回答が全文表示されます。
  • keithin
  • ベストアンサー率66% (5278/7941)
回答No.3

ご質問が「10枚ごとにあたりを印刷する云々」じゃなく、単純に「閉じた(印刷枚数)ブックに記入されたデータを外から書き換え(+1)できるか」だけになってるようです。 ご質問の直接の回答としては、そういうことはできません。 マクロを使っているなら、単純にできる方法で印刷枚数ブックを開いたまま各問題を印刷するようにプログラムするだけのことです。 「閉じたブックの書き換え」のアタマを捨てて、具体的にあたりを印刷する方法について解決したければ、その旨ご相談をリセットして新しく投稿し直していただいたほうがよいでしょう。 問題1,2,3…が(今印刷したいのは)問題何番xlsまで続くのかとか、問題1,2,3,1,2,3、1,2,3…といったい何セット印刷したいのかとか、実際の場面でプログラムに教えてやらなきゃならない印刷したい内容の条件があるはずです。 印刷命令ブックみたいなのを一つ用意、印刷したい1,2,3の列記と、何セット印刷を出したいのかを記入、そこに更に今回ご質問の「+1するセル」を準備してマクロを走らせれば完成です。

yosshi26
質問者

補足

ご回答、有難うございます。 やはり閉じたままデータを書き換えることは出来ないんですね。 「1,2,3,1,2,3、1,2,3…を何セット」ということではなく 1,1,3,2,5,4,6,2,1,2,2...というように印刷するファイルはランダムで、10枚目・20枚目・30枚目…をあたりとしたいため、印刷枚数をカウントしたいのです。 各問題ファイルで印刷枚数が10・20・30...枚の時にあたりを表示する方法は思い付いているのですが、印刷枚数を記録するために印刷枚数.xlsのセルデータの値を+1して保存する方法がわからなかったので、質問させて頂きました。 keithinさまのおっしゃる通り、知りたかったところは「閉じた(印刷枚数)ブックに記入されたデータを外から書き換え(+1)できるか」ということその物です。 他のサイトでこの点だけを質問したところ、「開かずに どう変更になっているのか確認されるのですか? 開いた時点で変更更新されますが・・」というような返答をされてしまったので、上記のような質問をしました。 聞きたいことが曖昧になってしまって申し訳ありませんでした。 閉じたままデータを書き換えることは出来ないということなので、他の方法を考えてみたいと思います。

すると、全ての回答が全文表示されます。
回答No.2

横から失礼します。 「印刷したら」を各問題ブックに仕込むことはできますが、 おそらく、そちらの方が面倒くさいですよ。 やるのであれば、DAOやADOなどを使って 開かずに(厳密にいうと「開いてるように見せずに」)操作は可能ですが、 セルひとつだけ操作するのには大袈裟すぎて非実用的です。 > 印刷枚数.xlsを開いた状態でないと、セルデータの変更が出来ないと思います。 開いておく、あるいは印刷したら開いて編集することに支障でもありますか? 「見た目の問題」だけなのであれば、開く前に     Application.ScreenUpdating = False 及び     Application.DisplayAlerts = False を仕込んでやれば、見た目には開かずに処理しているように見えますよ。 例えば Sub SampleMacro1() Dim myWB As Workbook, mySH As Worksheet Application.DisplayAlerts = False Application.ScreenUpdating = False     Set myWB = Workbooks.Open(Filename:="フルパス\印刷枚数.xls ")         Set mySH = myWB.Sheets(1)         mySH.Range("C1") = mySH.Range("C1") + 1     myWB.Close SaveChanges:=True Application.ScreenUpdating = True Application.DisplayAlerts = True End Sub でもお試しください。 動かすたびに該当ブックのC1セルに+1されるはずです。 エクセルの画面の見た目も何もなかったように見えるはずです。 (VBEのウィンドウはチカチカしますが。) まぁむしろ、印刷枚数.xlsに「問題を印刷するマクロ」を仕込めば良いだけの話。 ・あたりかどうか判別 ⇒ あたりならあたり印刷 ・問題1.xls を開く ・印刷する ・+1する ・閉じる の一連の流れを組んで、ボタンに登録しておけば楽だと思いますよ。 そのボタンを問題の数だけ用意しておけば良いです。

yosshi26
質問者

お礼

返答が遅くなり、大変申し訳ありません。 確かに、「印刷枚数.xlsに「問題を印刷するマクロ」を仕込めば良いだけの話」ですね。 この方法で一度試してみたいと思います。

すると、全ての回答が全文表示されます。
  • hawa254
  • ベストアンサー率43% (259/589)
回答No.1

VBAマクロをご存じでないという前提で回答します。 もしご存じの上で質問されていたとすれば、本回答はスルーしてください。 印刷をきっかけにしてセルデータを更新されるのであれば、Excelマクロ(VBA)を組む必要があります。 幸い、どういった操作で更新するのか整理出来ていらっしゃるようなので、まずは「マクロの記録」で自動的にマクロを作成されてはいかがですか? マクロの記録方法 (1)「表示」→「マクロ」→「マクロの記録」をクリック  →マクロ名を聞いてくるので必要に応じて変更 (2)質問内容で書かれている一連の操作を手動で実行  →この一連の操作が「マクロ」として記録される (3)全ての操作が終わったら、  「表示」→「マクロ」→「記録終了」をクリック  →(1)で登録したマクロ名でVBAが出来ています マクロの再生方法  「表示」→「マクロ」→実行するマクロを選んで「実行」 上記の方法は冗長だらけで動作も遅く、実行させるExcelシートがマクロ記録時と違っていたりすると正確に実行出来ないことがありますので、必要に応じてVBAの編集(プログラミング)を行ってください(ここが難しいのですが)

yosshi26
質問者

補足

アドバイス有難うございます。 印刷枚数.xlsを開いている状態であれば、マクロを使ってセルデータを変更することは出来ます。 しかし、印刷枚数.xlsを開かずにセルデータを変更する方法がわかりません。 マクロの記録では印刷枚数.xlsを開いた状態でないと、セルデータの変更が出来ないと思います。 印刷枚数.xlsを開かずに、他のファイルからデータを変更するにはどうしたら良いのでしょうか? ご存知でしたら、お教えください。 よろしくお願いします。

すると、全ての回答が全文表示されます。

関連するQ&A