INDIRECTの関数を使って,他のエクセルファイル(以下Bファイル)を参照すると,
Bファイルを開いているときは正しく数値を表示しますが,
Bファイルを閉じるとエラー表示になります。

回避する方法は無いでしょうか?

(元ファイルと,Bファイルの両方から参照先に関する情報を得ているので,INDIRECT関数は,必須かと思っています)

参考までに3種類試したソースを示します。
できれば3は避けたいと考えています。
ご意見よろしくお願いします。


1:=INDIRECT("'[★★★Bファイル.xlsx]"&$A27&"'!o$7")
エラー表示になります。

2:=INDIRECT("'"&MID(CELL("filename",$A$1),1,FIND("[",CELL("filename",$A$1))-1)&"[★★★Bファイル.xlsx]"&$A26&"'!o$7")
エラー表示になります。(パスまで含めて参照)

3:='C:\Users\test\[★★★Bファイル.xlsx]213旅費'!O$7
正常(常に数値を表示します)

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

A 回答 (2件)

>回避する方法は無いでしょうか?


INDIRECT関数を使っている限り、回避できません。

外部データの取り込み機能で一時的にデータをすべて持ってくれば、同一ブック内になるので参照できます。
(閉じるときに取り込んだデータを破棄できます)
手間が状況に左右されるので、マクロで3のようにしてしまう方が簡単かもしれません。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
INDIRECT関数を使っている限り無理ということがわかっただけでも,めっけもんです。
3の方法で実施します。

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

お礼日時:2011/12/14 11:01

>回避する方法は無いでしょうか?


 ⇒ヘルプにも記載している通り、INDIRECT関数を利用での他ブック参照は
  参照先ブックが閉じられている限り、不可能です、
  唯一、3番の方法が可能になっています。

>元ファイルと,Bファイルの両方から参照先に関する情報を得ている・・
 ⇒ご質問者の問題点が不明、この辺りについてもう少し具体例などを補足しては
  如何でしょうか。    
    • good
    • 2
この回答へのお礼

回答ありがとうございます。
INDIRECT関数を使っている限り無理ということがわかっただけでも,めっけもんです。

コピペで簡単に作成するために,
元ファイルの中に,Bファイルのシート名称を用意してあるということです。
(甚だ簡単な説明ですが・・・)

3の方法で実施します。

またよろしくお願いします

お礼日時:2011/12/14 11:09

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

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

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

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

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

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エクセルで開いていない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の形の数式を直接入力した場合でも
閉じたブッ...続きを読む

Qエクセル関数>参照ファイル名をセルから呼び出す

別ファイル(ブック)のセルを表示させたいのですが、例えば
=[あいうえお.xls]かきくけこ!$A$5
とせずに、
ファイル名は A1セル の文字列を充てる、というようなことは出来ないでしょうか?

関数が分からない人でも、簡単に参照したいファイル名を変えられるようにしたいのです。

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

Aベストアンサー

A1に「あいうえお.xls」があるとき
 =INDIRECT("[" & A1 & "]かきくけこ!$A$5")
でよいでしょう。
ただし「あいうえお.xls」が開いている必要があります。(#REF!エラーになるため)

A1に入力されたブック名が開いていないなら、ブックを開くようにするのであればマクロが必要です。ブック名を入力しているのがSheet1だとしたら以下のマクロをALT+F11でVBE画面を開き、左上のVBA Projectでシート名を右クリックし「挿入」→「標準モジュール」で表示される画面に貼り付けて保存して下さい。
するとINDIRECT関数を入力したブックを開くときに、A1セルのブックも開くようになります。ただし下から3行目のファイルパスは修正が必要です。

Sub Auto_open()
Dim wb, mybk As Workbook
Set mybk = ThisWorkbook
For Each wb In Workbooks
  If wb.Name = Sheets("Sheet1").Range("A1").Value Then
    Exit Sub
  End If
Next wb
Workbooks.Open "C:\Temp\" & Sheets("Sheet1").Range("A1").Value
mybk.Activate
End Sub

A1に「あいうえお.xls」があるとき
 =INDIRECT("[" & A1 & "]かきくけこ!$A$5")
でよいでしょう。
ただし「あいうえお.xls」が開いている必要があります。(#REF!エラーになるため)

A1に入力されたブック名が開いていないなら、ブックを開くようにするのであればマクロが必要です。ブック名を入力しているのがSheet1だとしたら以下のマクロをALT+F11でVBE画面を開き、左上のVBA Projectでシート名を右クリックし「挿入」→「標準モジュール」で表示される画面に貼り付けて保存して下さい。
するとINDIREC...続きを読む

QExcel 相対パス

Excelでvlookup関数を使っていますが
参照範囲が別ファイルです。

参照先が絶対パスになってしまいますが
これでは他人にこのファイルを提供した場合つかえません。

そこで相対パスにしたいのですができません。

どうしたら良いのでしょうか?

=VLOOKUP(C2,'C:\Documents and Settings\user1\管理\[20130000.xls]Sheet1'!$D$6:$E$634,2,FALSE)
これを
=VLOOKUP(C2,'./[20130000.xls]Sheet1'!$D$6:$E$634,2,FALSE)
にしたい。

Aベストアンサー

>相対パスで入力しても絶対パスになってしまいます。
ソフトの設計思想でそうなっていると思います。
参照対象のファイルを開いているときに直接指定した時は[ファイル名]で良いのですが、参照対象のファイルを閉じると自動的に絶対パスが自動的に付加されますので、閉じたファイルを指定するときは絶対パスが必須という仕様になっているようです。

QINDIRECT関数 エラーになる

Sheet1とSheet2があり、
Sheet1のA1には「tset」という値が入っています。

そこで、Sheet2の任意のセルに
Sheet1のA1の値を入れたいのですが
「=Sheet1!A1」なら可能なのに
Sheet2のA1に「Sheet1」と入力し
Sheet2のA2に「=INDIRECT(A1)!A1」とするとエラーになります。

このような場合は、INDIRECT関数を使えばいいと知ったのですが
何が間違っていますか?

Aベストアンサー

INDIRECT 関数の仕様では、参考 URL にあるとおり、文字列を引数とします。「セル参照」あるいは「セル範囲に付けられている名前」を表す文字列(参照文字列)を引数として指定しますが、代わりにセル参照を指定した場合は、参照元の文字列を関数が受け取ってきます。シート名のみを引数とする方法は、ありません。


○ =a1
○ =sheet1!a1

○ =indirect(a1)       …… A1 セルに「a2」などの有効な参照文字列が記入されている場合のみ
○ =indirect("a1")      ……「=a1」と同じ意味
× =indirect(sheet1)     ……エラー「#NAME?」
× =indirect("sheet1")    ……シート名を含む参照文字列が未完成のため、エラー「#REF!」
○ =indirect("sheet1!"&a1)  …… Sheet2 の A1 セルに「a2」などの有効な参照文字列が記入されている場合のみ
○ =indirect("sheet1!"&"a1") ……「=sheet1!a1」と同じ意味
○ =indirect("sheet1!a1")   ……「=sheet1!a1」と同じ意味

○ =a1!a1           …… Excel のサービス機能により「a1」が「'a1'」に自動変換されるため、「a1」という名前のシートが存在する場合のみオッケー
△ =a1&"!"&a1         ……一応エラーにはならないが、期待とは全く異なる結果(結合された文字列)を返す
△ =INDIRECT(A1)&"!"&A1    …… A1 セルに「a2」などの有効な参照文字列が記入されている場合のみ一応エラーにはならないが、期待とは全く異なる結果(結合された文字列)を返す
△ =INDIRECT("A1")&"!"&A1   ……一応エラーにはならないが、期待とは全く異なる結果(結合された文字列)を返す
× =INDIRECT("A1!")&A1    ……シート名を含む参照文字列が未完成のため、エラー「#REF!」
× =INDIRECT(A1)!A1      ……「&」と「"」がないため、数式の入力がそもそも受け付けられない
× =sheet1!indirect("a1")   ……数式の入力がそもそも受け付けられない

○ =indirect(a1&"!"&a1)    …… A1 セルに「a2」などの有効な参照文字列が記入されており、かつ、「a2」などの名前のシートが存在する場合のみ
○ =indirect(b1&"!"&a1)    …… B1 セルに「sheet1」など、A1 セルに「a2」などの有効な参照文字列が記入されている場合のみ
○ =indirect(a1&"!a1")    …… A1 セルに「sheet1」などの有効な参照文字列が記入されている場合のみ

× =indirect(合計)     ……エラー「#NAME?」または「#REF!」
○ =indirect("合計")     ……「合計」という名前が付けられたセルが存在する場合のみ


INDIRECT では、正しいセル参照になる文字列でありさえすれば、自由に文字列をつなげて作ることができます。

●=indirect(c1&d1)
●=indirect("sheet1!"&c1&d1)
●=indirect(a1&b1&"!e1")
●=indirect(a1&"!"&c1)
●=indirect("合計")

参考URL:http://office.microsoft.com/ja-jp/excel-help/HP005209139.aspx

INDIRECT 関数の仕様では、参考 URL にあるとおり、文字列を引数とします。「セル参照」あるいは「セル範囲に付けられている名前」を表す文字列(参照文字列)を引数として指定しますが、代わりにセル参照を指定した場合は、参照元の文字列を関数が受け取ってきます。シート名のみを引数とする方法は、ありません。


○ =a1
○ =sheet1!a1

○ =indirect(a1)       …… A1 セルに「a2」などの有効な参照文字列が記入されている場合のみ
○ =indirect("a1")      ……「=a1」と同じ意味
× =indirect(sh...続きを読む

Q別ファイルを参照しながらシート名を動的に

Excelにて、VLOOKUP関数を使用し別ファイルを参照してます。
(こちらをAファイルとします)
別ファイル(こちらをBファイルとします)にはいくつかシートがあり、Aファイルに入力された値によって、Bファイルを参照するシートを変更したいのですが、うまくいきません。

AファイルはC:\workに
BファイルはC:\work\workにそれぞれ配置してあります。

AファイルのセルA1には任意の値を入力可能で、その値によって参照するBファイルのシートを変更できます。
VLOOKUP(B1,INDIRECT("'C:\work\work\[Bファイル.xls]"&A1&"シート'!$A$1:$B$100")
Aファイルに上記のような関数を書いても、#REFと表示されてしまいます。
どこがおかしいのでしょうか?

#AファイルとBファイルを同時に開いている状態だとうまく表示されました。

Aベストアンサー

VLOOKUPの問題というよりもINDIRECTの問題ですね。
INDIRECT関数は閉じているブックへの参照を作ることはできません。

代替案としては…

A案 
 各シート別の参照をそれぞれ用意しておいて、CHOOSEで選ぶ。

 1.Aファイル上で、Bファイルへの参照をそれぞれ名前定義する
  挿入>名前>定義
  甲:='C:\work\work\[Bファイル.xls]甲シート'!$A$1:$B$100"
  乙:='C:\work\work\[Bファイル.xls]乙シート'!$A$1:$B$100"
  丙:='C:\work\work\[Bファイル.xls]丙シート'!$A$1:$B$100"
  丁:='C:\work\work\[Bファイル.xls]丁シート'!$A$1:$B$100"

 2.数式を下記のように設定
  =VLOOKUP(B1,CHOOSE(MATCH(A1,{"甲","乙","丙","丁"},0),甲,乙,丙,丁),2,0)

B案 
 Bファイルのデータを、同一シートの単一の範囲として取得できる形に整形し、
 INDEX,MATCH等を使って引く。
 ※VLOOKUPでは検索列を指定できないことに注意
 ※OFFSETでは閉じたブックを参照できないことに注意

 =INDEX(INDEX(【データ範囲】,,【戻値列】),MATCH(B1,INDEX(【データ範囲】,,【検索列】),0))

 【戻値列】,【検索列】はA列の値とMATCHを使って数値で指定する

C案
 Bファイルのデータを、
 Aファイルの非表示のシートにまるまる引っ張っておいて、
 そこから選ぶ。 

D案
 VBAを使う

VLOOKUPの問題というよりもINDIRECTの問題ですね。
INDIRECT関数は閉じているブックへの参照を作ることはできません。

代替案としては…

A案 
 各シート別の参照をそれぞれ用意しておいて、CHOOSEで選ぶ。

 1.Aファイル上で、Bファイルへの参照をそれぞれ名前定義する
  挿入>名前>定義
  甲:='C:\work\work\[Bファイル.xls]甲シート'!$A$1:$B$100"
  乙:='C:\work\work\[Bファイル.xls]乙シート'!$A$1:$B$100"
  丙:='C:\work\work\[Bファイル.xls]丙シート'!$A$1:$B$100"
...続きを読む

Q外部ブック参照が#REF!になってしまう

二つのブックがあり、一つには参照するデータが入っています。それをもう一つのブックから
=INDIRECT(ADDRESS(5+C4,13,,,"[A.xls]"&$A2))
と参照しています。

このとき、A.xlsを開いていれば正しく値を参照するのですが、A.xlsを閉じた状態だと#REF!になり値を参照してくれません。
A.xlsを開かずに、自動的に外部ブックの値を参照することはできないのでしょうか。

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

Aベストアンサー

コンピュター外部保存ファイルのデータは、一旦内部メモリに読み込まないと、絶対内容は読めません。
ーーー
今のところ関数式参照では質問のようなことは出来ません。
(また読み込む(Open)ことと、画面に表示する(Visible=True)こととは別なので、内部メモリに読み込むことはするが、裏で処理し、という時代が来るかもしれませんが。)
ーーー
ハイパーリンクを挿入したときは、元のセルをクリックしたときには指定したブック等は開いてしまいます。
ーー
リンク張り付けの場合は、Aブックと連動する用意ができていて、更新するを選択すると、Aブックの指定箇所を見に行って、リンクしたセルを更新しますが、Aブックを開くタスクは起動しないようです。しかし内部メモリにAブックを読み込んでいるでしょう。

Qシート参照で変数を使いたい(EXCEL)

通常、Excelで別シートのセルを参照する時は「'シート名'!B3」といった数式になりますが、この「シート名」をユーザーに入力してもらうような仕組みを作りたいと考えています。

・あるシートのA3(例)にシート名を入力すると、B4セルに入力されたシートのB3セルの内容が表示される

このようなこと、可能でしょうか?

Aベストアンサー

INDIRECT関数を使うといいでしょう。

セルA1に入力されたシート名の、セルB3を参照する場合

   =INDIRECT(A1& "!B3")


また上記ではセルB3が固定になってますが、
セルA1 に参照したい【シート名】をいれ
セルA2 に参照したい【セル番地】まで入れておくと
なお、使い勝手がよくなるかも知れませんね。

   =INDIRECT(A1& "!" & A2)
 
 
 

QEXCEL VBAマクロ作成で、他のEXCELからデータを取り込みたい

メインプログラム(EXCEL VBA)より、
他のフォルダーにあるEXCELの項目の内容を取り込みたいです。
たとえば他のフォルダーのEXCELのRange("A2:A3").ValueをメインプログラムのRange("C2:C3").Valueにセットしたい時です。

・コマンドボタン押したら、どこのEXCELから取り込むかのポップアップ(?)は、表示はできてます。
・作業者が選んだパスとブックもMsgBoxで表示できてるので、もらう相手の場所も取得できてます。

・となると次はOPEN,INPUTですか?
テキストデータの取り込みですと、Inputでそのバッファを定義してるのですが、なんか違うような。。。

よろしくお願いします!

Aベストアンサー

私がやる方法です。

Dim writeSheet As Worksheet ' 自分自身の書き出し先シート
Set writeSheet = ThisWorkbook.Worksheets(1) ' Sheet1 を参照

Dim readBook As Workbook ' 相手ブック
Set readBook = Workbooks.Open(filename) ' 相手ブックを開いて参照
Dim readSheet As WorkSheet ' 相手シート
Set readSheet = readBook.Worksheets("sheetName") ' 相手シートを参照
' または Set readSheet = readBook.Worksheets(sheetIndex)

' 例えば
writeSheet.Cells(1, 1).Value = readSheet.Cells(2, 2).Value ' 相手シートの B2 の値を自分自身の A1 に書き込む

readBook.Close False ' 相手ブックを閉じる
Set readSheet = Nothing
Set readBook = Nothing

私がやる方法です。

Dim writeSheet As Worksheet ' 自分自身の書き出し先シート
Set writeSheet = ThisWorkbook.Worksheets(1) ' Sheet1 を参照

Dim readBook As Workbook ' 相手ブック
Set readBook = Workbooks.Open(filename) ' 相手ブックを開いて参照
Dim readSheet As WorkSheet ' 相手シート
Set readSheet = readBook.Worksheets("sheetName") ' 相手シートを参照
' または Set readSheet = readBook.Worksheets(sheetIndex)

' 例えば
writeSheet.Cells(1, 1).Value = readSheet.Ce...続きを読む

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&Aを見た人がよく見るQ&A

人気Q&Aランキング

おすすめ情報