アプリ版:「スタンプのみでお礼する」機能のリリースについて

お世話になります。
Excelにて外部のExcelファイルのデータを参照する方法を教えていただけませんでしょうか。

具体的には、

1.Excelファイルa.xls b.xls c.xls・・・ があります。
2.a.xlsの a1 に b.xls の a1 の値を入力し、続けて
a.xls の a2 に c.xls のa1・・・を繰り返していきます。上手く説明できないので、下を参照願います。
------------------------------------------------
<a.xls>
|a |b |c
-+-------
1|a1|b1|c1 ←b.xls ないのa1-c1のデータ
2|a1|b1|c1 ←c.xls ないのa1-c1のデータ
3|a1|b1|c1 ←d.xls ないのa1-c1のデータ
------------------------------------------------

上記を数百のファイル分行いたいのですが、外部ファイルを開いて該当のセルをコピーしていると非常に時間がかかります(といいますか無理でしょう)そこで、これらを数式から指定して、セルにコピーする事により、作業を効率化したいというわけです。

そのような方法がございましたら、教えていただけませんでしょうか。

よろしくお願い致します。

A 回答 (6件)

VBA以外のご解答を良く理解できていませんが


[Book1.xls]Sheet1!A1のBookの1とかSheet1の1の部分
は複写した時、相対的に変化してくれません。(当たり前と思っておられる方も多いでしょうが)。
それで複数ブックや複数シート参照型の本問などは算術式
(関数式)ではやりにくいですね。
Workbooks(n)(n=1-4とか)(worksheets(m)のmは1だけとして)で表せるようにして、簡単化できないかと思いました。テスト未。
dim s(5)
s1=1:s(2)=1:s(3)=1:s(4)=1
p01:
For j=2 to 4
For i=1 to 3
Cells(s1,i)=WorkBooks(j).Workshees(1).Cells(s(j),i)
Next i
s1=s1+1
Next j
s(j)=s(j)+1
goto p01
    • good
    • 3

算式だけでもできますが、説明が長くなりそうなのと数百のファイルということで、マクロにしてみます。




a.xls のSheet1のE列、F列に、参照するブックの、ドライブフォルダ名とBook名を登録します。

  E列がドライブフォルダ名
  F列がBook名です。

  A B C D     E             F
1         C:\My Documents\・・・\・・・  test_Book1.xls
2         C:\My Documents\・・・\・・・  test_Book2.xls
3         C:\My Documents\・・・\・・・  test_Book3.xls
:               :
N         C:\My Documents\・・・\・・・  test_BookN.xls


ファイル名の一覧は書き出しできるものとしています。
他Bookの対象シートは、Sheet1としています。

a.xls のSheet1のVBEのコードウインドウに下記マクロを貼り付けます。
(ツール→マクロ→Visual Basic Editor でVBE画面に移り、 表示→プロジェクトエクスプローラでプロジェクトエクスプローラを表示します。
プロジェクトエクスプローラのSheet1をダブルクリック。出てきたコードウインドウに下記マクロをコピーして貼り付けます。)

マクロを実行すると、a.xls のSheet1のA、B、C列に参照結果を書き出します。ご参考に。(当方、Excel97です)


Sub TEST()
  Dim myFormula As String '他Bookの参照式
  Dim rw As Long '行カウンタ

  'E列にドライブとフォルダ、F列にBook名があると想定!
  For rw = 1 To Range("E65536").End(xlUp).Row
    myFormula = "'" & Cells(rw, 5) & "\[" & Cells(rw, 6) & "]Sheet1'!"
    Cells(rw, 1).Formula = "=" & myFormula & "A1"
    Cells(rw, 2).Formula = "=" & myFormula & "B1"
    Cells(rw, 3).Formula = "=" & myFormula & "C1"
  Next
End Sub
    • good
    • 1

 『=[Book1.xls]Sheet1!$B$4』式を入れておけば、参照先ファイルを探します。

    • good
    • 10

#2です。



> 次に、b.xlsファイルでセルA1の内容を見てみましょう。
ごめんなさい、あわてました。(^^;)
これは 「a.xlsファイルでセルA1の内容を見てみましょう。」の誤りです。

あと、この方法だと、b.xlsの内容を変えると、a.xlsの内容も変わっちゃいます。
値だけ参照したい場合は、いったん、#2の作業を行った後、シート全体をコピーし、別のシートに、形式を選択して貼り付け-値を選択、で貼り付けます。
最後に、最初のシートをシート毎削除してください。
    • good
    • 1

・b.xlsファイルでセルA1をコピー


・a.xlsファイルを開き、編集-形式を選択して貼り付け を選択
・リンク貼り付けをクリック

まずここまでしてみてください。
次に、b.xlsファイルでセルA1の内容を見てみましょう。
数式バーに
=[a.xls]Sheet1!$A$1

って出てませんか?
[ ] 内がファイル名
Sheet1 の部分がシート名
$A$1 がセルですね。($は絶対参照の記号です)

ご質問内容の場合、
A列のみ上記を繰り返して元を作り、(直接、上記のように入力してもOK)
$A$1 となっている部分の先頭の$を削除します。(つまり、A$1にするということ)
=[a.xls]Sheet1!A$1
となったら、あとはこれを必要な列数分コピーすればOKです。

ただし、a.xls,b.xls,c.xls,…が、同じフォルダ内にあることが必要です。
別のフォルダにある場合は、[ ]内のファイル名にフルパスを記入する必要があります。

※フルパスを記入というのは
C:\Documents and Settings\Administrator\My Documents\a.xls
みたいに書くことです。
    • good
    • 0

挿入、オブジェクト、ファイルからで、他のエクセルファイルを読み込んで


貼り付けて、参照しながら コピーさせたらいいんじゃないでしょうか?
    • good
    • 1

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