出産前後の痔にはご注意!

エクセル2007についての質問です。

2つのファイルBook1とBook2があります。Book1はBook2のデータを参照しています。ある作業をするとき、Book1は常時エクセルで開いています。Book2はあるソフト(自作)を使ってエクセルを開くことなくデータを更新しています(直接にBook2を編集していません)。このとき、Book2のデータが更新されても参照元のBook1のデータが更新されません。Book2をエクセルで開いたときにBook1が更新されます。Book2をエクセルで開くことなく参照元のBook1を自動及び手動で更新する方法はあるでしょうか。(エクセルのデータタブの「すべて更新」を実行すれば更新されるかと思いましたが駄目でした。)

Book1を更新するのためにいちいちBook2を開かなければならず不便を感じています。良い方法があればどうかよろしくお願いします。

このQ&Aに関連する最新のQ&A

A 回答 (3件)

手動でよければ、リンク式のあるセルにカーソルを移動し、F2→Enterで更新されると思います。



自動にしたければ、次の設定を試してください。
(1)Officeボタン
(2)エクセルのオプション
(3)セキュリティセンター
(4)セキュリティセンターの設定
(5)外部コンテンツ
(6)ブックリンクのセキュリティ設定を一番上にする。
    • good
    • 15

こんにちは。



文章として、つじつまがあっていませんね。(^^;

>ある作業をするとき、Book1は常時エクセルで開いています。
>Book2はあるソフト(自作)を使ってエクセルを開くことなくデータを更新しています

「ある」って何でしょうね。ただ、誤解しないでくださいね。その内容を明らかにしろというのではなく、読んでいる人に、その仕組みを言わなくては、分かるわけないです。こちらで勝手に考えろなんて、そんな無茶な質問なんてありません。

それに、Book2のデータを更新しています。<---> Book2のデータが更新されても参照元のBook1のデータが更新されません。

話の論理が成り立ちませんね。あくまでも、Book1 を編集していて、Book2は開いていないのだから、Book2 の編集が、Book1に反映するわけがありません。そんなことは当然です。そうでないなら、Book2 に対する命令を、そのままBook1 に写せばよいのです。(移すではありません。Copy のほうです。)

>Book2は・・・エクセルを開くことなくデータを更新しています
それを自作でできる技術があるなら、こんな質問が出るはずもありません。VBAの3年生ぐらいの技術です。一般のVBAプログラマよりも遥かに上の技術です。その質問からみる限りは、まったくの素人の方のようにしか思えません。もう少し、分かるように質問してください。
    • good
    • 9

>Book2はあるソフト(自作)を使ってエクセルを開くことなくデータを更新しています(直接にBook2を編集していません)



この辺がよく分かりません、特に「直接にBook2を編集していません」とは?
    • good
    • 2

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qエクセルで打ち込んだ数字を自動で別シートに表示したい

エクセルでセルに打ち込んだ数字を自動で別シートに表示できる方法があれば、教えてください。

例えば、シート1のC1に5を打ち込んだら、シート2のD2にシート1で打ち込んだ5が自動で表示される。

また1列すべてを自動で表示させる場合、一つのセルの時と違いがありましたら教えてください。よろしくお願いします。

Aベストアンサー

こんばんは。
入力したセルの値を合計とかでなくて、
純粋に別のシートに自動的に表示したいのであれば、
以下の方法があります。

1.1つのセルだけの場合
例)シート1のC1に5を打ち込んだら、
  シート2のD2にシート1で打ち込んだ5が自動で表示される

⇒シート2のD2のセルをアクティブにして「=」を入力
 した後、シート1のC1をクリックする。
 そうするとD2のセルに「=Sheet1!C1」と表示され、値が自動的に
 表示されるようになります。

2.1列全てコピーしたい場合。
  コピー&リンク貼り付けを使うと便利です。

例)例)シート1のC1~C5に何かを入力したら、
  シート2のD2~D7にシート1で打ち込んだものが自動で表示される

  シート1にあるコピー元のセルを範囲選択して、
  シート2のD2の上で「右クリック」⇒「形式を選択して貼り付け」
  をクリックします。

  そして出てきた小さな画面の左下にある「リンク貼り付け」という
  ボタンをクリックすると完成です。
  試してみてください。。

  念のためにリンク貼り付けを図解しているURLを載せておきます。
  参考にしてみてくださいね。。
  http://www.geocities.jp/office_inoue/excel/eq21.htm

こんばんは。
入力したセルの値を合計とかでなくて、
純粋に別のシートに自動的に表示したいのであれば、
以下の方法があります。

1.1つのセルだけの場合
例)シート1のC1に5を打ち込んだら、
  シート2のD2にシート1で打ち込んだ5が自動で表示される

⇒シート2のD2のセルをアクティブにして「=」を入力
 した後、シート1のC1をクリックする。
 そうするとD2のセルに「=Sheet1!C1」と表示され、値が自動的に
 表示されるようになります。

2.1列全てコピーしたい場合。
  コ...続きを読む

Qエクセルで別ブックのセルを参照する式の内部

エクセルで別ブックのセルを参照する式の内部


別ブックのセルを参照する時は

='パス名[ブック名]シート名'!セル名

という式みたいなので、
='item\zaiko\[zaiko_2010_06_01.xls]在庫シート'!B5
という式を作りました(パスは適当です)。

それで、
='item\zaiko\[zaiko_2010_06_01.xls]在庫シート'!B5
='item\zaiko\[zaiko_2010_06_02.xls]在庫シート'!B5
='item\zaiko\[zaiko_2010_06_03.xls]在庫シート'!B5
='item\zaiko\[zaiko_2010_06_04.xls]在庫シート'!B5

と日付を連番で複数のセルに入れていきたいので、
日付の 2010_06_01 の部分を他セルから持ってきたいのですが、
この式の中に 文字列参照のMID() とかで挿入できるでしょうか?
日付の入っているセルがちょうど横の方に連番で存在しています。

分かる方いましたら教えてください。
よろしくお願いします。

エクセルで別ブックのセルを参照する式の内部


別ブックのセルを参照する時は

='パス名[ブック名]シート名'!セル名

という式みたいなので、
='item\zaiko\[zaiko_2010_06_01.xls]在庫シート'!B5
という式を作りました(パスは適当です)。

それで、
='item\zaiko\[zaiko_2010_06_01.xls]在庫シート'!B5
='item\zaiko\[zaiko_2010_06_02.xls]在庫シート'!B5
='item\zaiko\[zaiko_2010_06_03.xls]在庫シート'!B5
='item\zaiko\[zaiko_2010_06_04.xls]在庫シート'!B5

と日付を連番で複数のセルに入れていきたい...続きを読む

Aベストアンサー

=INDIRECT("''item\zaiko\[zaiko_"&A1&".xls]在庫シート'!B5")
とすれば出来ることはできますが、参照先のブックは開いている必要があります。

単に、沢山の数式を入力するのが面倒だというだけであれば、A1のセル以降に日付部分が入力してある場合、
="='item\zaiko\[zaiko_"&A1&".xls]在庫シート'!B5"
のように入力し、下へ数式をオートフィル等でコピーし、
入力した数式範囲を範囲選択→コピー→形式を選択して貼り付け→値でOKし、
範囲選択したまま、編集→置換で検索する文字列「=」、置換後の文字列「=」で置換します。

Qリンク先のファイルを開かなくても、値が読み込めるようにできますか?(SUMIFSを使ってます)

エクセル2010を使っている者ですが、あるファイルではリンク先のファイルを開いていないと、値が読み込めません。

なお、いろいろと調べて、以下のとおりの設定になっております。
・「外部リンクの値を保存する 」にチェックが入っている。
・「すべてのブックリンクの自動更新を有効にする」にチェックが入っている。
・起動時の確認で「○メッセージを表示しないで、リンクの自動更新を行う」にチェックが入っている。

当該ファイルの中で、値を読み込みたいところでは、SUMIFSの関数を使っているのですが、そのせいなんでしょうか。
そうだとしたら、SUMIFSを使っていても、リンク先のファイルが閉じた状態で値を読み込む方法はないのでしょうか?

Aベストアンサー

No.1の回答者さんが書いているように、ブックを閉じたときの仕様に
なっていますので、SUMIFS関数を使うのならブックを開いておいて、
作業します。
https://support.microsoft.com/ja-jp/kb/260415

どうしてもブックを閉じて作業したいのなら、SUMIFS関数を使わずに
配列数式に変更して回避します。
{=SUM(IF((条件1)*(条件2),範囲))}
http://ameblo.jp/pcroom123/entry-11742483652.html
http://excel-magic.com/post-32/

Qエクセルで開いていないbookのセルの値が欲しい

エクセルが少し使える程度です。
1000個のブック内に同じ名前のシートが1個づつできています。
その1000個のシート毎にK列の最大値を求めたいのですが、
1000個のシートを”全て開くことなしに”できないでしょうか?

シート名は整理表から求めることができます。
シート名="C9&"\"&D9&"\["&A9&".xls]sheet1'"

シートが開いていれば、以下で求めることができるのですが。
=max(シート名!$k$2:$k$1250)

Aベストアンサー

ご質問の内容を取り違えていましたらすみません。
状況・課題の確認も兼ねて冗長な説明になるかと思いますがご容赦ください。

まず、開いているブックへの参照は
A:=max([Sample.xls]Sheet1!$k$2:$k$1250)
といった形になりますよね。

ここでリンク元のブックを閉じると、
数式は自動的に
B:=max('D:\***\[Sample.xls]Sheet1'!$k$2:$k$1250)
といった形に変わります。

この状態であれば、閉じたブックの値を参照することができます。
また、Bの形の数式を直接入力した場合でも
閉じたブックの値を参照できます。

問題は、対象のブックが大量にある場合に
Bの形の数式を順次入力していくのは現実的でない
ということだろうと思います。

対象ブックが開いている場合には、indirectを使用して
C:=max(INDIRECT("'"&A1&":\"&B1&"\["&C1&".xls]Sheet1'!$k$2:$k$1250"))
とすれば参照を動的に生成することができますが、
indirectでは閉じたブックを参照することはできません。

で、ようやく対策ですが、
Bの形の数式自体を文字列として生成し、
D:="=max('"&A1&":\"&B1&"\["&C1&".xls]Sheet1'!$k$2:$k$1250)"
メモ帳等を経由して貼り付けることで、
イの形の数式を一気に入力することができます。
(エクセルからエクセルへ直接の値貼り付けや数式貼り付けでは不可)

ただし、対象のブックが動いた場合には
その都度参照を貼りなおす必要がありますので、
対象のブックが頻繁に動くような場合には、
マクロを利用するほかはなかろうと思います。
1.#1さんの方法で直接参照する。
2.「整理表」の変更をイベントで取得して参照数式を書き換える。
3.リンク元ブックをバックグラウンドで開いてしまう(!)
といったアプローチが考えられます。

ご質問の内容を取り違えていましたらすみません。
状況・課題の確認も兼ねて冗長な説明になるかと思いますがご容赦ください。

まず、開いているブックへの参照は
A:=max([Sample.xls]Sheet1!$k$2:$k$1250)
といった形になりますよね。

ここでリンク元のブックを閉じると、
数式は自動的に
B:=max('D:\***\[Sample.xls]Sheet1'!$k$2:$k$1250)
といった形に変わります。

この状態であれば、閉じたブックの値を参照することができます。
また、Bの形の数式を直接入力した場合でも
閉じたブッ...続きを読む

QExcelでファイルを越えて連携できるのでしょうか

Excel2010なのですが、同じファイルであればシートをまたいであるセルを参照出来ますが、
別ファイルの、あるシートのあるセルを参照するというような事は出来ないのでしょうか?
ほんの初歩的なマクロは学んだのですが、そういうファイルをまたいでの設定は無かったように思いますが、マクロとか使えば出来るのでしょうか?
例えばプログラミングなどであるinclude()などあればファイルを参照出来るのでしょうが。

Aベストアンサー

エクセルの数式では,
='c\test\[book1.xls]Sheet1'!A1
といった数式で多ブックの値を参照し計算に利用できます

参照元ブックを開いておいて
=[book1.xls]sheet1!A1
のように数式を作成し,参照元ブックを保存して閉じると,自動で閉じたブックを参照する式に書き換わります。エクセルの操作になれていないときは,こちらの手順を行った方が間違いがありません。




マクロでは別のブックを「開いて参照する」のが原則です。
sub macro1()
 dim w as workbook
 set w = workbooks.open("c:\test\book1.xls")
 msgbox w.worksheets("シート名").range("セル番地")
 w.close false
end sub


開きたくないご相談はしばしば見かけますが,労多くして功少ないの典型と言えます。

方法1:開いているところを見せない
sub macro2()
 dim w as workbook
 dim x
 application.screenupdating = false
 application.calculation = xlcalculationmanual
 set w = workbooks.open("c:\test\book1.xls")
 x = w.worksheets("Sheet1").range("A1")
 w.close false
 application.calculation = xlcalculationautomatic
 application.screenupdating = true
 msgbox x
end sub

方法2:エクセルに閉じたブックの値を取ってこさせる
sub macro3()
 dim x
 range("A1").formula = "='C\test\[book1.xls]Sheet1'!A1"
 x = range("A1").value
 range("A1").clearcontents
 msgbox x
end sub

方法3:4.0マクロ関数を使う
色々制約があるのでお薦めしませんが,下記など参考に。
http://www.moug.net/tech/exvba/0060037.html

エクセルの数式では,
='c\test\[book1.xls]Sheet1'!A1
といった数式で多ブックの値を参照し計算に利用できます

参照元ブックを開いておいて
=[book1.xls]sheet1!A1
のように数式を作成し,参照元ブックを保存して閉じると,自動で閉じたブックを参照する式に書き換わります。エクセルの操作になれていないときは,こちらの手順を行った方が間違いがありません。




マクロでは別のブックを「開いて参照する」のが原則です。
sub macro1()
 dim w as workbook
 set w = workbooks.open("c:\test\book1.xls")
...続きを読む

Qエクセルで、条件に一致した行を別のセルに抜き出す方法

エクセルで、指定した条件に一致するセルを含む行をすべて抜き出す方法が知りたいです。

たとえば、

<A列> <B列> <C列>
7/1 りんご 100円
7/2 ぶどう 200円
7/2 すいか 300円
7/3 みかん 100円

このような表があって、100円を含む行をそのままの形で、
別のセル(同じシート内)に抜き出したいのですが。

7/1 りんご 100円
7/3 みかん 100円

抽出するだけならオートフィルターでもできますが、
抽出結果を自動的に、別の場所に、常に表示させておきたいのです。

初歩的な質問だと思いますが、検索しても分からなかったので、よろしくお願いします。

Aベストアンサー

同じ質問が結構よく出てますが、そんなに初歩的でもありません
別シートのA1セルに「100円」と入力し、そのシートの任意のセルに以下の式を貼り付けて下さい。後は、下方向、右方向にコピー。
日付のセル書式は「日付」形式に再設定してください

=IF(COUNTIF(Sheet1!$C:$C,$A$1)>=ROW(A1),INDEX(Sheet1!A:A,LARGE(INDEX((Sheet1!$C$1:$C$500=$A$1)*ROW(Sheet1!$C$1:$C$500),),COUNTIF(Sheet1!$C:$C,$A$1)-ROW(A1)+1)),"")

データ範囲は500行までとしていますが、必要に応じて変更して下さい

QExcel VBA:リンクの更新

いつもお世話になっています。

Excelでセルに他のブックのリンクを貼ってある場合、
ブック起動時に『更新しますか?』と聞いてきますよね(メニューバーの編集→リンクの設定→起動時の設定で聞いてこないようにもできますが)。

(1)VBAでリンクの更新をさせるには、どのように書けばよろしいでしょうか?

(2)また、『値の更新』ボタンがグレーアウトされていてクリックできないのですが、理由(原因)は何でしょうか?

教えてください、よろしくお願いします。

Aベストアンサー

こんばんは。

(1) 特定のブックならば、Open メソッドの中の引数の、UpdateLinks を3にすればよいけれども、設定はそのままで、開いた時に操作する方法は、

たぶん、ThisWorkbook のOpenイベントに、以下のようなものを入れておけばよいと思います。
ActiveWorkbook.UpdateLinks = xlUpdateLinksAlways

この方法はやったことがないので、確実にできるか分かりませんが。
というのは、ダイアログが先か、Openイベントが先かは、分かりません。

(2)『値の更新』ボタンがグレーアウト というのは、確か、更新元のファイルがなくなって、値だけが残っている場合だったと思います。

QExel VBA 別ブックから該当データを検索し、必要なデータを取得する方法について

部品表というブックがあります
A列に商品名、B列に商品番号が入力してあります。C列のコードは未入力です。
A列     B列     C列      
商品名  商品番号  コード
モータ  U-1325-L  
ホルダ  R-134256

また、コード一覧表という別のブックには、A列に商品番号と、B列にコードが、何千件も入力されています。

やりたいことは
部品表のC列のコード欄に、コード一覧表ブックから商品番号と一致するコードを貼り付けしたいのです。

部品表は、何百種類もありますので、関数ではなく、マクロで処理を希望します。

自分では、部品表の商品番号をコピーして、コード一覧表で検索し、検索結果の右隣のセル(B列のコード)の値を部品表のC列に貼り付ければよいかと思い、書いてみたんですが…

Sub 別ブックから貼り付ける()
  Dim 検索する As Long
Windows("部品表.xls").Activate
検索する = cells(i,2).Value
Windows("コード一覧表.xls").Activate
ActiveWindow.SmallScroll Down:=-3
Selection.AutoFilter Field:=3, Criteria1:="=検索する", Operator:= xlAnd

と、してみたものの、検索しても、その検索結果の隣のセルのコードをどうやって取得すればいいのかが、わかりませんでした。

基本事項は本で学びましたが、呪文のようなコードはよく理解できません。懸命にネットで検索して、訳して理解する努力をしてはいますが。

どうぞよろしくお願いします。

部品表というブックがあります
A列に商品名、B列に商品番号が入力してあります。C列のコードは未入力です。
A列     B列     C列      
商品名  商品番号  コード
モータ  U-1325-L  
ホルダ  R-134256

また、コード一覧表という別のブックには、A列に商品番号と、B列にコードが、何千件も入力されています。

やりたいことは
部品表のC列のコード欄に、コード一覧表ブックから商品番号と一致するコードを貼り付けしたいのです。

部品表は、何百種類もありますので、関数...続きを読む

Aベストアンサー

こんにちは。
とりあえず実用性も踏まえました。
メインの動作はワークシート関数のVLOOKUPをVBA上で使用していますので理解はしやすいかと思います。
また、質問文から察するに「部品表.xls」と「コード一覧表.xls」の両方を開いて処理されていますが「コード一覧表.xls」はプログラム内で開いて閉じているので実行するときは「コード一覧表.xls」は閉じて置いてください。
Option Explicit
Sub Sample()
 Application.ScreenUpdating = False
 Dim I As Long
 Dim xlBook
 Set xlBook = Workbooks.Open("C:\★★\コード一覧表.xls") '★要変更★
 I = 2
 Do While Range("A" & I).Value <> ""
  ThisWorkbook.Worksheets("Sheet1").Range("C" & I).Value = Application.VLookup(ThisWorkbook.Worksheets("Sheet1").Range("B" & I).Value, xlBook.Worksheets("Sheet1").Range("A2:B65535"), 2, 0)
  I = I + 1
 Loop
 xlBook.Close
 Application.ScreenUpdating = True
 MsgBox ("完了")
End Sub

こんにちは。
とりあえず実用性も踏まえました。
メインの動作はワークシート関数のVLOOKUPをVBA上で使用していますので理解はしやすいかと思います。
また、質問文から察するに「部品表.xls」と「コード一覧表.xls」の両方を開いて処理されていますが「コード一覧表.xls」はプログラム内で開いて閉じているので実行するときは「コード一覧表.xls」は閉じて置いてください。
Option Explicit
Sub Sample()
 Application.ScreenUpdating = False
 Dim I As Long
 Dim xlBook
 Set xlBook = Workbooks....続きを読む

Qエクセルで数式の結果が反映されない(自動計算になっているのに)

すいません、教えてください。

エクセル(XP)で数式が自動計算されなくなって
しまいました。

  ※ツールのオプションはちゃんと自動計算に
   なっているのに全く反映されません。

今まで全く問題なく作業できていたので
原因が分からず困っています。

数式等のエラーだとは考えにくいです。
と言うのも数式のあるセルをダブルクリックして
選択し、そのままEnterキーを押すと計算結果が
反映されます。
ただ、今まで全て自動計算されていたのが
全く動かなくなってしまったんです。

同じようなトラブルを経験された方、又は
詳しい方、どうかよろしくお願いします。

Aベストアンサー

原因は分からずじまいになってしまいましたが
同じことがありました。

「Officeの救急隊」を試してみましょう。
ボタン一発で全ての設定が元に戻ります。
http://www.vector.co.jp/soft/win95/util/se247118.html
(ツールバーなども初期状態に戻ります)

私の場合はコレで直ってしまいました^^

参考URL:http://www.vector.co.jp/soft/win95/util/se247118.html

Qシート全体を他のブックのシートとリンクさせたい

エクセル2010を使っている者です。

(1)Aファイル中のあるシート全体をBファイル中の指定したシート(別ファイルになってますが、フォーマットはほぼ同じです)とリンクさせ、外部参照してデータを取り込めるようにすることは可能ですか?

(2)また、AファイルがBファイルのデータを外部参照するというよりは、Aファイル、Bファイルの当該シートに変更があった場合は、お互いに変更箇所を取り込めるようにするこは可能ですか?
(これは外部参照ではなく、共有というのでしょうか)


どちらか片方であってもありがたいので、ご教授願います。

Aベストアンサー

基本の手順としては
「元」になるAブックの該当シートのセル(セル範囲)をコピー
「先」となるBの該当セル(セル範囲)に形式を選んで貼り付けの「リンク貼り付け」する
ことで、元から先にデータをリンクします。

#その後必要の範囲に応じて、書式を工夫したりもうちょっと数式を作成したりして、見た目を整えます。



エクセルのデータ参照の流れは、常に「元」から「先」への一方向だけです。
双方向にリンク(反映)する方法はありません。

エクセルでは通常、全ての「元」となるマスタデータベース(リスト)を1本(1つのシートに)用意、全ての編集や修正、追加等はすべてマスタのリストに対して行い、帳票(AのシートやBのシート)は、共にマスタから必要なデータを参照して「表示するだけ」という具合に作成するのが上手なエクセルの使い方です。


ご相談のように双方向のデータ反映がどうしても必要であれば、たとえばアクセスのように、そういう事ができるデータベースソフトを利用します。
まぁ出来ると言えばエクセルマクロを駆使して、そういう事ができるようコツコツ手作りする事もやればできますが、大概は苦労ばっかり多くて益はありません。

基本の手順としては
「元」になるAブックの該当シートのセル(セル範囲)をコピー
「先」となるBの該当セル(セル範囲)に形式を選んで貼り付けの「リンク貼り付け」する
ことで、元から先にデータをリンクします。

#その後必要の範囲に応じて、書式を工夫したりもうちょっと数式を作成したりして、見た目を整えます。



エクセルのデータ参照の流れは、常に「元」から「先」への一方向だけです。
双方向にリンク(反映)する方法はありません。

エクセルでは通常、全ての「元」となるマスタデータベース(...続きを読む


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング