• 締切済み

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

他のサイトでも質問させて頂いたのですが、回答が付く前に締切になってしまったので、こちらのサイトでもう一度質問させて頂きます。 複数の学習問題印刷用のエクセルファイルがあります。 (問題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/7940)
回答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

  • エクセルのマクロで、別ファイルの数値を参照する方法

    現在aaa.xlsというファイルを開いていて、 そのセルA1には20070621という数値が入っています。 別にbbb_20070621.xlsというファイルがあって、 そのファイルのsheet1内の、B1の値を参照したいと思います。 bbb_20070621.xlsのようなファイルが無数にあるので、 ファイルを開かなければいけないINDIRECT関数は使いたくありません。 =INDIRECT("[bbb_"&A1&".xls]Sheet1!B1") ファイルを開かず参照できるように、 できればマクロ(VBA)で組みたいと思っています。 RangeやCellでいろいろ試してみたのですが、 どうもうまくいかず、 分厚いマニュアルにも書いてありませんでした。。 初歩的な質問ですいませんが、 どなたかよろしくお願いします。

  • 参照先をセルに入力して、他のブックのセルを参照する方法

    Excelで、他のブックのセルを参照したいです。 たとえば、あるExcel(test.xls)上から、別のフォルダにある複数のブック C:\AAA.xls D:\BBB.xls の値を参照する場合ですが(AAA.xlsとBBB.xlsは、値の内容は違うが、同じシート名の同じセルに値が入っている)、 test.xlsのSheet1のA1に「C:\」、A2に「AAA.xls」を入力すると、test.xlsのSheet2にはAAA.xlsの値を表示し、 test.xlsのSheet1のA1に「D:\」、A2に「BBB.xls」を入力すると、test.xlsのSheet2にはBBB.xlsの値を表示するような方法です。 参照先が固定であれば、='C:\[AAA.xls]Sheet名'!D5・・・のような指定ができるのですが、参照するファイル名とパス名が都度変わるので、入力したセルの値で参照先を変えたいのです。 ちなみに、INDIRECTを使うやり方も考えましたが、参照先のブックを開いていないと値が表示されないようなので、却下されました。 (参照先のブックは開かなくても値を参照させたいです) どなたかご存知の方がいらっしゃったら、教えてください。 よろしくお願いします。

  • 他のブックファイルのセルの参照が上手く行きません

    こんにちはよろしくお願いいたします。 エクセルのブックファイル(Book1.xlsx)に,他のブックファイル(Book2.xls)のセルの値を参照しようと思い”=”を入力し参照するブックファイルのセルをクリックし,「 =[Book2]Sheet1!$A$1 」のような参照を行いました。こうしてきちんと表示されました。 しかし,この参照の式を「 =[Book3]Sheet1!$A$1 」のように,他のブックファイル(Book3.xls)のセルに変更したところ,参照できなくなりました。ブックファイル(Book1.xlsx)には,「 =[Book3]Sheet1!$A$1 」という式そのものが表示された状態となっています。式は,キーボードを使って変更しました。もちろん,(Book3.xls)は,(Book2.xls)と同様のシート形式をもち,データも入力されています。 このような状態になると,先に挙げたように,”=”を入力して参照するブックファイル(Book3.xls)のセルをクリックしても,ブックファイル(Book1.xlsx)には,「 =[Book3]Sheet1!$A$1 」という式そのものが表示された状態となったままで,(Book3.xls)のデータは表示されません。 (Book2.xls)と(Book3.xls)のセルのデータは,文字列です。 気になるのは,(Book1.xlsx)はoffice2010で作成されたファイルであること,(Book2.xls)と(Book3.xls)は,互換モードと表示されるファイルであること,また表示されているファイルを見ると,フルパスで参照している点です。「 ='C:\aaa\bbb\・・・・・[Book3]Sheet1'!$A$1 」という参照式になっています。3つのファイルはすべて同一ファイルに入っています。 何が,参照を阻んでいるのでしょうか?教えてください。よろしくお願いします。

  • セルのデータを使って、ファイルを参照する方法

    現在aaa.xlsというファイルを開いていて、 そのセルA1には20070620という数値が入っています。 別にbbb_20070620.xlsというファイルがあって、 そのファイルのshhe1内の、B1の値を参照したいと思います。 こんな感じかなと想像したのですが、うまくいきません。。 ↓ =["bbb_" "& A1 &"".xls"]sheet1!B1 初歩的な質問ですいませんが、 どなたかよろしくお願いします。

  • EXCEL VBAで指定したブックの保存場所を検索したい。(EXCEL2003)

     こんにちは、チェーン店型の店舗で働いている者です。  私が作ったVBA付のエクセルファイルを複数の店舗で使ってもらおうと考えてます。しかし、そのワークシートの中に他のブック(ここでは『売上集計表.xls』)のセルの値を参照しているセルが含まれており、参照する『売上集計表.xls』の保存場所が店舗によって違うので困っています。 『売上集計表.xls』は会社で作成されたものですので、どの店舗でも同じファイル名、レイアウトのうえ、『売上集計表.xls』という名のEXCELファイルはパソコンの中にひとつしか存在しません。 エクセルを起動したときに、参照するファイルが見つからないとリンクの編集をたずねてくるので、それでも大丈夫なのですが、パソコンに疎い人も多いので出来ればVBAで自動的にリンクを設定できるような仕組みがあればと思い質問させていただきました。

  • Excelで他Excelファイルのセルの値をVBAで参照したい時

    こんにちは。 Excelで他Excelファイルにあるセルの値をVBAで参照したい時って、 場所をどう指定したらいいのでしょうか。 やろうとしている事ですが、 c:\1.xlsに記述するVBAで c:\2.xlsのsheet1のA1の値を参照して、 それとc1.xlsのsheet1のA1の値が一致した時に、 c:\2.xlsのsheet1のB1の値を、 C:\1.xlsのsheet1のB1に書き出そうとしています。 派遣就業先でAccessで作ればいいものを なぜか社員の方たちでExcelで作ってしまったため、 そのメンテに四苦八苦しています。(笑) ご存知の方ぜひ教えてください。 よろしくお願いします!

  • 他ブックのセル参照するのに名前をセルで指定して参照させたい。

    他ブックのセル参照するのに名前をセルで指定して参照させたい。 題名が適当でないかもしれませんが、よろしくお願いします。 オフィス2000もしくは2002です。 200604.xls、200605.xlsという日付を基にした名称の規則的なブックがあります。 ファイル自体はネットワークの共通ドライブにあります。 それぞれsheet1に同様の形式で値のデータ(文字)が入っています。 その中のA1、B1、C1~・・・の値を 別ブック(仮にtest.xls)のA1に2006、A2に5と入力させることによって test.xlsの3行目に200605.xlsのA1、B1、C1~・・・の値を表示させたいです。 ブック名 test.xls    A列  B列  C列 ・・・・・・ 1行 2006 2行  5 3行 200605.xlsのA1、B1、C1~の値を表示させたいです。 4行 フォルダー名\[200605.xls]sheet1'!A1、次B1、次C1、と都度埋め込んでいけば値自体は出るのですが、 ブック名が手軽に変えられなくて困っています。 test.xlsのセルに埋め込んだ ='フォルダー名\[200605.xls]sheet1'!A1の [カッコ内]の文字をA1,A2セルに入れた値で参照させたいのですが、、、。 (A2は5ですが、参照したいのは2006の05というのも少々ミソです) 結果が同じなら手段はそんなには問いません。 よろしくお願いします。

  • Excelにて他のパソコンにファイルをコピーした場合のリンク(値の更新)について

    Excelのバージョンは2003以降です。 《ファイル1》 ドライブ:\XXXXX\○○○○○\△△△△△\12345.xls 《ファイル2》 ドライブ:\XXXXX\○○○○○\abcde.xls ファイル1はファイル2より特定のセルの情報を取得しています。 (数式例) ='ドライブ:\XXXXX\○○○○○\[abcde.xls]シート'!$AV$8 しかし、○○○○○フォルダ以降を他のパソコンに持っていくと ドライブ:\XXXXX\ の部分が違う為 「このブックには更新できないリンクが1つ以上含まれています。」 という警告画面が出てしまいます。 12345.xlsが有るフォルダの1つ上位のフォルダに有るabcde.xlsの値を参照する。 という感じに、ドライブ:\XXXXX\の部分が変わっても 警告画面を出さずに値を更新する方法はありますでしょうか? ご教授をお願い致します。

  • 他のBookに指定している外部参照先をセルの文字列で指定する方法

    マクロを使わずに外部参照先を変更する方法を探しています。 例えば, C:\○○フォルダにA+1.xls,A+2.xls・・・A+10.xls という感じでA+X.xlsのXの部分が1~10までのファイルがあります。 それぞれのファイルのSheet1!A1に数値が入力されています。 開いているBookのセルC1に ='C:\○○[A+X.xls]sheet1!A1 みたいな感じで数式を入力して, セルB1にXの部分(1~10)を入力すると セルC1に入力した番号のファイルの Sheet1!A1の数値を出力する方法はないでしょうか? マクロではできるのですが,マクロを使わずに実現したいです。

  • Excelで、閉じるときに、保存するか訊かれて判断に迷うときは

    Excelで、ファイルを開いた後、何かを変更すると、閉じるときに、「・・・xlsへの変更を保存しますか」と訊いてきます。 「何も自分では変更していないのに、このダイアログボックスが出てくる」ということではありません。 そのときに、保存に値する変更なのか、保存に値しない変更なのか、を私が判断するにはどうすればよいでしょうか。 Excelにとっては「変更」であっても、私にとっては保存したくないことがあるのです。 例えば、 列幅が広い列があったときに「同時に画面上に幾つも列を表示したいから」、 列幅を変更しただけかもしれません。 何かデータを入力したが、やっぱり入力する必要がなくて、消したかもしれません。 「保存に値する変更なのか、保存に値しない変更なのか」なんてことは、 自分という「人」が考えているだけで、 Excelが判断することはできないのです。 自分が「はい」か「いいえ」のいずれかを選択しないと、まともにExcelを終了することができません。 「・・・xlsへの変更を保存しますか」と訊いてきたときに、「いいえ」をクリックすれば、 無事、変更が保存されないで済みます。 でも、自分は、保存に値するような変更をしているかもしれません。 「・・・xlsへの変更を保存しますか」と訊いてきたときに、「はい」を選択すれば、無事に変更が保存されますが、無駄な変更が保存されたかもしれません。 非常に困るのは、いつでも「はい」を選択して保存すると、 ファイルの更新日時が変わってしまうことです。 私は、どんな操作をしたか、ということは逐一覚えていません。 ファイルを開く時点では、そのファイルを編集して保存しようか、それとも見るだけにしようか、決心がついていません。 Excelのバージョンは、2000です。 うろ覚えですが、後のバージョンなら、編集の「元に戻す」に変更した履歴が出ていたような気がします。

専門家に質問してみよう