• 締切済み

複数シートに跨る数式参照について

現在、1つのファイルにAシート、Bシートが存在します。 Aシートは、Bシートから値を参照し、数式、条件付き書式、 VBAにて作成されているシートになります。 Bシートにはデータが格納されています。 今回、新しくシートが4つ増えます。(C,D,E,Fとします) 新シートの役割としては、Bシートと同じくデータが登録されます。 そこで質問なのですが、Aシートで全てのシート(B,C,D,E,F)の データを参照をするにあたり、数式を簡単に設定する方法があるか知りたいです。 B,C,D,E,Fシートは、フォーマットが違うため、同じ項目を参照するのでも Bシートでは、H列を参照。Cシートでは、I列を参照など条件が変わるため シート名を覚えておく方法では、うまくいかず、結局数式でIF ELSEIF と 数式を作成する必要があり、参照数も多いためとても手間になります。 【条件】 ・始めにB~Fのどのシートを使用するか選択をします。 選択をしたシート名等は格納しておけます。 ・VBAは使用可能です。 ・参照数は500~1000セル程度。 ・できるだけ後からメンテしやすい形にしたい。 ・条件付き書式はAシートのみで完結しているため、影響はないと思います。 最悪、Aシートを5ケース分作成し、使用シートを選択時にシートの表示・非表示を 切り替えるしかないと今は、考えています。 知恵をお貸し頂ければと思います。

みんなの回答

回答No.4

No1、2のコードでVBAが読めていないのではと 思われますので関数をお勧めしています。 また、VBAで組む方が後々メンテが面倒ですよ。 あと分からないのがシートAのリストから1つを選択して参照するのか Aのリスト全部を参照するのかが分かりません。 いずれにしてもVLOOKUPやINDEXでいけるのでは? (INDEXは更にMATCHと合わせる) どちらの関数も範囲のところはINDIRECT関数を使えばいいと思います。 例えば、セルA2でシート名を入力(ドロップダウンリストとか)するとして INDIRECT(A2&”商品名”)とすれば、 シート名商品名(!マークは付けない)のセル群を選択してくれます。

回答No.3

まず、質問を読み違えていました。謝ります。 質問者さんがやりたいことはVLOOKUP関数でいいsのではと考えます。 シートAにミカンという商品名があって、 シートBからミカンを引っ張ることはないかと思います。 (同じ名前をひっぱても意味がない) たぶん、ミカンの産地、値段、入荷日などのデータを引っ張ると考えます。 そうなるとVLOOKUP関数じゃないでしょうか。 ついでに追加の質問についてですが、 範囲という意味ですよ。

LilyBell1
質問者

お礼

回答ありがとうございました。 恐らくですが、No.1のほうが私の望む回答として近いです。 私の説明が分かり難いのが問題だと思いますが下記例を参考して下さい。 ・Aシートを作成するのに対し、参照するシートが5シート(B,C,D,E,F)存在します。 ・始めに5シートからどのシートを参照するか選択させます。  例:商品名は、BシートではH6~H206まであります。    Cシートでは、I10~I210まであります。    Dシートでは、J50~J250まであります。 この場合に、AシートのA5~A205までを商品名の参照としたいときに どのように値を参照するのが効率の良い方法かを教えていただきたいです。 AシートのA5セルに下記のようにIf文を駆使すればできるのはわかりますが、 今後のメンテ等考えて、下記のようにはしたくありません。 If(選択シート=B,Bシート!H6,If(選択シート=C,Cシート!I10,If(選択シート=D,Dシート!J50・・・ 上記から、No.1の回答にあった、セル範囲に名前を付けて BシートのH6~H206、CシートのI10~I210に「商品名」という名前を付けて Aシートに「商品名」という名前で値が参照できる方法があるのであれば 教えて頂きたいです。

  • TAKA_R
  • ベストアンサー率32% (26/79)
回答No.2

コンピュータに自動的に探させてはどうでしょう。 (配列を使って全指定という手もありますが。) 今マイブームがfor each なので、私なら←これを使って検索させますけど・・・。 bにワークシート名が、全シート1行目にデータラベルが入っているとして。 dim a as range for each a in worksheets(b).range("1:1") if a.value="商品名"then exit for next a これから先、列番号を利用したくなったら、「a.column」で使用可能。

回答No.1

多分エクセルの話なんですよね。 セル範囲に名前を付けてはどうでしょう。 でも、同じ名前はシートが違っても同じ部分になるので シート名&セル範囲として名前を付けます。 設定は各シートで手作業かな。 例えば Rname=Activesheet.name & "セルの名前” Activesheet.Range(Rname).Select Selection.Find("探しもの").Select 最後に、”セルの名前”はメリット・デメリットも勉強して下さいね。

LilyBell1
質問者

お礼

回答ありがとうございます。 すいません、EXCELのお話です。書き忘れてました。。。 1点、質問があります。回答頂けると助かります。 例えばですが、 Bシートに商品名という列がH列にあると仮定します。 Cシートの商品名は、I列にあるとします。 なお、商品名は最大200個あるとします。 この場合に、Aシートは、商品名をただ単に参照表示させるだけだとすると、 BシートのH列の1行目に「Bシート!商品名1」という名前で定義し、2行目に「Bシート!商品名2」 CシートのI列の1行目に「Cシート!商品名1」という名前で定義し、2行目に「Cシート!商品名2」 などと名前の定義が必要になるのでしょうか? それとも範囲指定で一括設定ができるのでしょうか? ※定義が範囲指定できるのは分かりますが、参照の際にどうすればよいかわかりません。 名前定義となるとリストや、SUMなどの集計用に使うイメージが 強いため、ただ単に参照させるなどの場合に簡単に設定する方法があるのか お伺いしたいです。

関連するQ&A

  • シートの違うセルを参照したいのですが・・・

    Sheet1 A1  B1  C1  D1 Sheet2 F1 F2 F3 F4 Sheet1 A1 のセルには Sheet2 F1 のセルを Sheet1 B1 のセルには Sheet2 F2 のセルを 参照するような数式を作成したいと思っています。 お教えくださいますよう、お願いいたします。

  • VBA 他シートを参照しているセルのコピー

    お世話になります。 以下のシートがあります。 [sheet a]    A     B        C      D     E 1 2004 2005 2006 2007 2008 2 =b!A2 =b!C2 =b!E2 =b!G2 =b!I2 3 10 15 16 4 11 4 12 30 20 9 2 5 =SUM(A3:A4) =SUM(B3:B4) =SUM(C3:C4) =SUM(D3:D4) =SUM(E3:E4) [sheet b] A B C D E  F G H I J 2004 2005 2006 2007 2008 1 あ1 い1 う1 え1 お1 か1 き1 く1 け1 こ1 2 あ2 い2 う2 え2 お2 か2 き2 く2 け2 こ2 ・・・・・・・・・ [sheet a]F列以降に入れるデータは、VBA(マクロ)を使って、別のブックから取り出しています。 (例) F1…=E1+1(E1の数式をコピー) F3,F4…任意の値(別のブックからコピー) F5…=SUM(F3:F4)(E5の数式をコピー) 1行目,5行目の場合は左のセルをコピーして数式を貼り付けると、列が自動的に列が変わりますが、2行目の場合は元のシートを1行おきに参照しているので、単純にコピーしただけでは正しい数式が入りません。 2行目の参照をVBAで作るには、どのようにしたらいいでしょうか。 よろしくお願いします。

  • Excelの数式の自動変更について

    excelの数式で困っています。 以下のようなシート1があります。 シート1 │A B C ─┼──── 1│a b c 2│d e f 3│g h i シート2で、以下の数式でシート1の値"e"を参照しているセルがあります。 =シート1!B2 この式では、シート1に行や列を挿入しても、"e"の値があるセルを参照したままになるように、数式が自動的に変更されます。 そうではなく、以下の条件を満たすような数式に変更したいと思っています。 ・1行と2行の間に行を挿入  →数式が自動変更され、"e"を参照したままにする ・A列とB列の間に列を挿入  →数式は変更されず、元々"e"があった場所を参照する 何かよい方法はないでしょうか? 回答よろしくお願いいたします。

  • シートごとに参照先セルを変更するには

    エクセルで請求書を作成している初心者です。 請求元データシートには請求先顧客名、商品名、数量、金額が一覧で入力してあります。 そのシートを元データとして、各請求先別シートが70シートあります(70件の請求書を作成)。 元データのA2~A71に顧客名、B2~B71に商品名、C2~C71に数量、D2~D71に金額が入力されており、A社請求シートには下データA2、B2、C2、D2を参照し、B社請求シートにはA3、B3、C3、D3と参照のセルを変えていきたいのですが、シートをコピーすると数式もコピーされてしまい、参照元を手入力で変更していて気が遠くなります。 検索してもよくわからなかったのですが、このシートにはこの行を参照、というように自動で変える数式か方法はありませんでしょうか? 初歩の質問でしたら申し訳ありません・・・。

  • SUMPRODUCTにて別シートのデータを参照する方法

    Excelの関数について質問です。 SUMPRODUCTにてAシートのデータを列ごと参照し、 Bシートの特定の場所に出力する方法を探しています。 自分で調べ、以下の方法でデータを参照しようとしましたが、 うまくいきませんでした。 【試した内容】 = S U M P R O D U C T ( ( A ! E : E = B ! B : 2 ) * ( A ! F : F = B ! B : 3 ) ) 【やりたい事】 AシートのE列全ての中でBシートのB列2行目と一致する条件で、 且つAシートのF列全ての中でBシートのB列3行目と一致する条件のものを参照したい。 どこが悪いか、又こうすればいいのでは等アドバイスがございましたら 宜しくお願い致します。 出来れば具体例があると助かります。

  • Excelで 循環参照とでないようにするにはどうしたらよいですか?

    在庫表を作ったのですが     A  B C残 D E残  F 1入庫 1 0  3 2 2 2出庫 1   1 上記の表を作成しました C1=A1+B1-B2 E1=C1+D1-D2 F1=E1 のように 数式を入れ F1に数字がはいったとき F1の数字をA1=F1に数式を入れると 循環参照のエラーがでてしまいます このような時 自動でF1の数字をA1に入れることができますか? 関数での式は 可能ですか? 教えて下さい。

  • 【Excel】数式のコピー

    Excel2003を使用しています。 他人が作成した表の行数を増やして、数式もコピーしたいのですが、その数式は別シートを参照していて、行・列が連続していないので、単純にコピー → 貼り付けでは、正しい数式を貼り付けることができません。 現在は、とりあえず、コピー&貼り付けした後に、数式を修正しているのですが、規則性があるので、手作業で数式を修正する以外に何か良い方法はないでしょうか? Sheet1…参照するシート Sheet2…数式が入力されているシート Sheet2に入力されている数式は  C7 = Sheet1!B7  D7 = Sheet1!C7  E7 = Sheet1!D7  F7 = Sheet1!E7  G7 = Sheet1!F7  H7 = Sheet1!G7  I7 = Sheet1!B8  J7 = Sheet1!C8  K7 = Sheet1!D8     :     :  C16 = Sheet1!B25  D16 = Sheet1!C25  E16 = Sheet1!D25  F16 = Sheet1!E25  G16 = Sheet1!F25  H16 = Sheet1!G25  I16 = Sheet1!B26  J16 = Sheet1!C26  K16 = Sheet1!D26 以上が1ページ分で、C列~H列、I列~K列はそれぞれ参照する行が1行おきになっています。 Sheet1の1ページは26行ありますので、2ページ目のSheet2の数式は  C17 = Sheet1!B33  から始まり  D17 = Sheet1!C33     :     :  H17 = Sheet1!G33  I17 = Sheet1!B34  J17 = Sheet1!C34  K17 = Sheet1!D34     :     :  K26 = Sheet1!D52  までが、2ページ目となり、これが下方向へ続いています。 これらの数式を変更することなどで、コピー&貼り付けができないかと思い、質問させていただきました。 説明がわかりづらくて、申し訳ありませんが、よろしくお願いします。

  • エクセル 複数条件で検索する数式を教えてください。

    社員の作業時間入力シートが2つあり、それぞれに入力しているため、入力ミスによる誤差が生じます。それをチェックしています。 検索条件が複数になる場合の計算式を教えてください。 [sheet1]   A   B   C   D  E 1 社員CD 日付  作業時間1 作業時間2  誤差 2 1000 2008/1/1   3.5  ここに数式   =C2-D2 3 1000 2008/1/2  2.5    数式    =C3-D3 4 1001 2008/1/1   5.0    数式    =C4-D4 [sheet2]   A   B   C    1 社員CD 日付  作業時間2 2 1000 2008/1/1  3.0 3 1000 2008/1/3   1.5 4 1001 2008/1/1  5.5 sheet1のD列にsheet2のC列を表示させたいのですが、 条件はA列とB列が一致するものになります。 A・B列が文字列ではないため、1列挿入して=A2&B2列を作成することができませんでした。 D列に数式をいれる事で一発で表示させる方法を教えてください。

  • 複数のシートを参照する数式について

    複数のシートを参照する数式について Sheet1   A  … 1  3 . . Sheet2   A  … 1  4 2  7 3  8 ←この値(8)をShett3に入れたい . . 上記値が入力されている場合 Sheet3の任意のセルに、Sheet2・A列のSheet1のA1に指定されている値の行を入力したいです。 (Sheet1・A1が1のときは、Sheet3に4、2のときは7、3のときは8を入力したい) この場合、Sheet3にはどのような数式を記載すればよろしいでしょうか?

  • Excelでファイル参照を数式で表現したい

    Excel上で数式でファイル参照を表現し、 参照先のセルの値を表示させたいのですが、文字列として表示されてしまいます。 どのように記述すれば解決できますでしょうか。 現在、以下の方法を試みていますがうまくいきません。 ・A1セルに参照先のフォルダパスを記入 (例: D:\Application\ ) ・B1セルに参照先のファイル名を記入 (例: A.xlsx ) ・C1セルに参照先のシート名、セル番地を記入 (例 : Sheet1'!$A$1 ) ・D1セルにA1~C1セルを組み合わせた数式を記述 ="='" & A1 & "[" & B1 & "]" & $C$1 ※ 数式として次のようになります。 ='D:\Application\[A.xlsx]Sheet1'!$A$1 D:\Application\A.xlsx のSheet1のA1セルに test と記述されいる場合、 ここでD1セルに test と表示されてほしいのですが、 上記の数式が、そのまま文字列として表示されてしまいます。 A1~D1の書式は全て「標準」に設定しています。 また、このD1の値を他のセルに値として貼り付けて、Enterを押せば、test と表示されます。 数式に誤りはないはずなのですが、D1セルで直接 test と表示する方法はあるのでしょうか。

専門家に質問してみよう