• 締切済み

別bookのセルを参照するにはどうしたらよいでしょうか

Next Forを使用したマクロで、そのNext For構文内で、別ブックのセルを参照したいのですが、どうしたらよいでしょうか。 下記のように作成してみたのですが、テストしてみると、同ブック同シートの該当セルを参照しているようで、機能しません。下記の書き方では間違っているのでしょうね・・・。 マクロ初心者で、とても初歩的な質問で申し訳ないのですが、教えていただきたく質問させていただきました。よろしくお願いします。 必要なブックは開いている状態です。 Cells(i,_)はbook1・シート"AAA"のi行・_列目を参照し、 Cells(n,_)はbook2・シート"BBB"のn行・_列目を参照し、 Cells(s,_)はbook2・シート"BBB"のセルを参照してほしいのですが・・・。 (1) book1・シート"AAA"のi行18列目のセルとbook2・シート"BBB"のn行・1列目の値が同じであれば (2) (book2・シート"BBB"のn行・1列目)の1行下をs行目としてs行・4列目のセルとbook1・シート"AAA"のi行28列目のセルが同値であれば (3) s行4列目からs行9列目を”ClearContents”するという内容です。下記のマクロは全て記述しておりませんが、ここが間違っているのは確実だと思います。今後の勉強にも是非生かしていきたいと思っておりますので、どうぞよろしくお願いいたします。 Sub test01() Dim n As Long Dim i As Long Dim s As Long For i = 6 To Workbooks("book1.xlsx").Worksheets("AAA").Cells(Rows.Count, 16).End(xlUp).Row If Cells(i, 16) = "" Then Exit For Else For n = 4 To Workbooks("book2.xlsx").Worksheets("BBB").Cells(Rows.Count, 1).End(xlUp).Row If Cells(i, 16) <> "" And Cells(i, 18).Value = Cells(n, 1).Value Then For s = n + 1 To Workbooks("book2.xlsx").Worksheets("BBB").Cells(Rows.Count, 4).End(xlUp).Row If Cells(s, 1) <> "" Then Exit For ElseIf ..............

みんなの回答

  • Sinogi
  • ベストアンサー率27% (72/260)
回答No.3

参考になれば Sub test() Dim SH1 As Worksheet Dim SH2 As Worksheet Dim i As Integer Set SH1 = Workbooks("Book1.xls").Worksheets("Sheet1") Set SH2 = Workbooks("Book2.xls").Worksheets("Sheet2") For i = 1 To 5    If SH1.Cells(i, 1) = SH2.Cells(i, 1) Then      SH1.Cells(i, 2).Value = "同じ"    Else      SH1.Cells(i, 2).Value = "×"    End If Next i End Sub

  • Sinogi
  • ベストアンサー率27% (72/260)
回答No.2

>別ブックを参照しなくてはならないセルが多数ありまして、始めになにか定義をして、省略できないかと思ったのですが・・・。 コード内でアクティブにしたいシートをActivate で明示的にアクティブにし、参照する別ブックをWith宣言すれば、ちょっと見やすくなるかな? 定数宣言して代入しておくのが簡単とも思う

milktea06
質問者

補足

何度もお手数をおかけしてすみません。 >定数宣言して代入しておく とはiとnとsの参照先ブックをあらかじめ宣言するということでしょうか。

  • Sinogi
  • ベストアンサー率27% (72/260)
回答No.1

>下記のように作成してみたのですが、テストしてみると、同ブック同シートの該当セルを参照しているようで、機能しません。 >If Cells(i, 16) <> "" And Cells(i, 18).Value = Cells(n, 1).Value Then どうみてもセルしか指定していないのでアクティブシートでの比較だと思います。 For文でしているように Workbooks("book2.xlsx"). から指定してはいかがですか?

milktea06
質問者

お礼

迅速なご回答ありがとうございます。 確かにご指摘のとおりだとおもいます。別ブックを参照しなくてはならないセルが多数ありまして、始めになにか定義をして、省略できないかと思ったのですが・・・。 ご指摘いただいた通り、やり直してみようと思います。 ありがとうございました。

関連するQ&A

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

    こんにちはよろしくお願いいたします。 エクセルのブックファイル(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つのファイルはすべて同一ファイルに入っています。 何が,参照を阻んでいるのでしょうか?教えてください。よろしくお願いします。

  • Excel セル参照で参照ブック指定

    指定したセルに拡張子を抜いたブック名を入力し、そのセルを参照してブック参照することは可能でしょか? 「INDIRECT」では参照ブックを開かないと表示されないため目的が達成されません。 (例) Book1.xlsx A1=test Book2.xlsx A1=Book1 A2=["&(A1)&".xlsx]Sheet1'!A1 何か良い解決策をご存知の方、ご教授願います。

  • EXCEL 参照のリンクのコピペ を別のBookに

    Book1のSheet1のA1セルに 「=Sheet2!A1」 とシートをまたがったリンクがあります。 このような参照セルがA100セルまであり、参照先は無秩序です。 この縦100個のセルをコピーして Book2のSheet1のA1セルに貼り付けると 「=[Book1]Sheet2!A1」などのように [Book1]がくっついてきてしまいますが、実際に参照させたいのは同じBook内のSheet2!A1です [Book1]をはずして一気に100個の無秩序な参照先をBook2のSheet1に貼付けをする方法はありますか? もしなければ、マクロを使って、 "[" から "]" までを削除する方法でもかまいません。 宜しくお願いします。

  • データを別BOOKの指定セルに流し込む方法

    エクセル2003のVBAを使用し、データを別BOOKの指定セルに流し込む方法を教えて下さい。 シート名「流し込み用」の中のデータは4行目から1000行目まで入っていて、列はAとBが結合、DEFが結合されていてGまで4つのデータが入っています。 このデータを10行ずつ、BOOK2のシート名(QW-1)~(QW-100)の指定セル(行は16~25の間、列の並びはBOOK1と同じ)に流し込みたいと思っています。BOOK1のデータもBOOK2のシートも今後増えていきます。 どなたか詳しい方、ご教示いただけないでしょうか?

  • エクセルで別ブックのシートを参照したいとき

    宜しくお願いします ブックを1つしか開いていない場合に そのブックのシート2に値を記入する場合は Sheets("Sheet2").Cells(2, Sheets("Sheet1").Cells(i,4)+1) = "欠" こんな具合ですが ブックが2個あって ブック1のシート1を参照して それをブックのシート2に記入したいのですが Sheets("Sheet2") この前にどういう記述をしたら うまくいきますか? よろしかったら教えていただけないでしょうか?

  • シート名をセルに入力しこれを使って別ブックを参照

    Excel2010を使用しています。 別のブックのあるシート内にある表からデータを取ってくる方法を教えて下さい。 ****前置き**** 例えば YYY.xlsx と ZZZ.xlsx という2つのブックがあるとします。 YYY.xlsxの内容 H1、H2、・・・、H9という名前の9つのシートがあるとします。 各シートには同じフォーマットの表があり、セルD10:P12に値が入っています。 ZZZ.xlsxの内容 1月 という名前のシートがあるとします。 シート1月の中に セルA1には H1 セルA2には H2  : セルA9には H9 という値が入っています。 ********本題******** ブック ZZZ.xlsx 内のシート 1月 のセルE1 に ブック YYY.xlsx 内のシートH1のセルD10の値を表示させる方法を教えて下さい。 ただし、シートの指定は、シート 1月 のセルA1内の値と一致するのシート名のセルD10の値を表示させたいと考えています。 ですので、例えば、セル A1 に H5 という値が入っていれば、セルE1には YYY.xlsx内のシートH5のセルD10を表示させるようにしたいです。 VLOOKUP関数とINDIRECT関数を使えばできるのでは?と思っていろいろ試しているのですが、上手くいかないのが現状です。 どうかよろしくお願いします。

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

    他ブックのセル参照するのに名前をセルで指定して参照させたい。 題名が適当でないかもしれませんが、よろしくお願いします。 オフィス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(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を使うやり方も考えましたが、参照先のブックを開いていないと値が表示されないようなので、却下されました。 (参照先のブックは開かなくても値を参照させたいです) どなたかご存知の方がいらっしゃったら、教えてください。 よろしくお願いします。

  • こんにちは。

    こんにちは。 Excel VBA で別シートの特定列をセル参照させて、あたらしいシートを作成しています。 以下の方法で実現できてはいるのですが、行数が多く且つ20回以上(20列というべき?)も 同じ処理をさせているため、処理が3分近くかかって遅いことを気にしています。 (やりたいこと) ・参照元シート「AAA」の値を変更すれば、参照先シート「BBB」の表も自動的に書き換わるようにしたい。 ・AAAシートのデータ行数は各列とも同じだが、何行あるかは不定。 ・参照元、参照先の列関係(下の例で言えばAAAシートB列をBBBシートC列に、AAAシートY列をBBBシートD列に対応させる)は固定。 (現在のコード) 参照元シート「AAA」のB3~B5003のセル番地を、参照先シート「BBB」のC11~C5011に設定。 同様に、参照元シート「AAA」のY3~Y5003のセル番地を、参照先シート「BBB」のD11~D5011に設定。 同様に…(これを約20列分行なう) Dim maxRow As Long, n as Long maxRow = 5003 ' 実際には関数を使って取得します。 For n = 3 To maxRow ' AAAシートB3~B5003 → BBBシートC11~C5011 Cells(8 + n, 3).Formula = "=AAA!B" + n ' AAAシートY3~Y5003 → BBBシートD11~D5011 Cells(8 + n, 4).Formula = "=AAA!Y" + n '  : '  以下同様の処理がおよそ20列続きます。 Next n 値コピーではなく参照式を一括で埋め込む方法や、別の手段で参照式の設定を高速化させる うまい方法をご存知の方、ご教授いただけませんでしょうか。

  • エクセルのセルを参照して別シートに張り付ける2

    こんにちは。 エクセルのsheet1とsheet2があり、sheet1のセルに入力されている文字や数値をsheet2にコピーしたいと思っています。(sheet2には値として張り付けたい) <条件> sheet1の3行目から下(3000行目まで)をコピーしてsheet2の2行目から下(3000行目まで)に張り付けたい。 しかし、下記のように列も入れ替えたい。下記以外はコピーしない。 sheet1   sheet2  A  →  A  G  →  B  H  →  I  M  →  G  Q  →  K R+S  →  L  (sheet1のR列とS列の文字を結合したもをsheet2のL列に)  T  →  M  U  →  N このような作業を1回で行うことはできるのでしょうか? よろしくお願いします。

専門家に質問してみよう