• 締切済み

1個前の特定セルから値を参照したい

http://okwave.jp/qa/q5535868.html に似ているのですが(かつ、これだとエラーが出た) 以下のような条件です。 シートは複数あり、これらは全部同じ条件でコピペで作られます。 特定の場所は、必ず、1か所、前の同じ場所から参照で作られます(1番最初の部分は直接値が入ります) シート名は不特定の名前が入ります。 このような場合、式はどのように書けばよいでしょうか? Excel2013です。 よろしくお願いします。

みんなの回答

  • kagakusuki
  • ベストアンサー率51% (2610/5101)
回答No.5

 後、VBAを使用して、シートのタブが並んでいる順番で、1つ前のシートの指定したセルを参照するユーザー定義関数(Excelに元々備わっている関数ではなく、Excelの仕様者が新たに作ったオリジナルの関数)というものも存在します。 【参考URL】  インストラクターのネタ帳 > エクセルマクロ・Excel VBAの使い方 > ユーザー定義関数 > 左隣のシートを相対参照   http://www.relief.jp/itnote/archives/003281.php

ymda
質問者

補足

ありがとうございます。 現在、Officeが不安定な状態で、検証できない状態です。

全文を見る
すると、全ての回答が全文表示されます。
  • kagakusuki
  • ベストアンサー率51% (2610/5101)
回答No.4

>これでは仕様を全く満たしません。 >Sheet1でない可能性もあるわけです。  勘違いしないで下さい。回答No.2の関数はSheet1に入力されている値を返すものでは御座いません。  参照すべき元データが入力されているシートはあくまで「あ」シート、「い」シート、「う」シート、「え」シート、「お」シートなどといった、Sheet1のリストにシート名が記載されているシートであり、Sheet1はあくまで「それらの元データが入力されているシートがどれとどれであるのか」という事と「どの順番でセルの値を参照して行くのか」という事を示すためのリストを設けておくために使用しているに過ぎません。  ですから、回答No.2に対する質問者様の補足コメント >[Sheet1] >A2 B2 C2 D2 >-- 1 -- =B2*2 にある様に、Sheet1というシート名のシートを「元データを入力するためのシート」として使用されるのであれば、シート名のリストを設けておくためのシートとしてはSheet1を使う事は出来ませんから、リストは「Sheet6」や「Sheetま」などといった使用していないシートに設けるようにせねばなりません。  その際には当然、各シートに設ける関数も =IF(ISERROR(1/(INDIRECT("'"&INDEX(Sheet6!$A:$A,MATCH(REPLACE(CELL("filename",[この関数を入力するセルの相対参照形式のセル番号]),1,FIND("]",CELL("filename",[この関数を入力するセルの相対参照形式のセル番号]),FIND(".xl",CELL("filename",[この関数を入力するセルの相対参照形式のセル番号]))),),Sheet6!$A:$A,0)-1)&"'![前のシートにおける参照元のセルの(シート名を含まない)セル番号(この場合はD2)]")<>"")),"",INDIRECT("'"&INDEX(Sheet6!$A:$A,MATCH(REPLACE(CELL("filename",[この関数を入力するセルの相対参照形式のセル番号]),1,FIND("]",CELL("filename",[この関数を入力するセルの相対参照形式のセル番号]),FIND(".xl",CELL("filename",[この関数を入力するセルの相対参照形式のセル番号]))),),Sheet6!$A:$A,0)-1)&"'![前のシートにおける参照元のセルの(シート名を含まない)セル番号(この場合はD2)]")) =IFERROR(INDIRECT("'"&INDEX(Sheet6!$A:$A,MATCH(REPLACE(CELL("filename",[この関数を入力するセルの相対参照形式のセル番号]),1,FIND("]",CELL("filename",[この関数を入力するセルの相対参照形式のセル番号]),FIND(".xl",CELL("filename",[この関数を入力するセルの相対参照形式のセル番号]))),),Sheet6!$A:$A,0)-1)&"'![前のシートにおける参照元のセルの(シート名を含まない)セル番号(この場合はD2)]"),"") =IF(ISERROR(1/(INDIRECT("'"&INDEX(Sheetま!$A:$A,MATCH(REPLACE(CELL("filename",[この関数を入力するセルの相対参照形式のセル番号]),1,FIND("]",CELL("filename",[この関数を入力するセルの相対参照形式のセル番号]),FIND(".xl",CELL("filename",[この関数を入力するセルの相対参照形式のセル番号]))),),Sheetま!$A:$A,0)-1)&"'![前のシートにおける参照元のセルの(シート名を含まない)セル番号(この場合はD2)]")<>"")),"",INDIRECT("'"&INDEX(Sheetま!$A:$A,MATCH(REPLACE(CELL("filename",[この関数を入力するセルの相対参照形式のセル番号]),1,FIND("]",CELL("filename",[この関数を入力するセルの相対参照形式のセル番号]),FIND(".xl",CELL("filename",[この関数を入力するセルの相対参照形式のセル番号]))),),Sheetま!$A:$A,0)-1)&"'![前のシートにおける参照元のセルの(シート名を含まない)セル番号(この場合はD2)]")) =IFERROR(INDIRECT("'"&INDEX(Sheetま!$A:$A,MATCH(REPLACE(CELL("filename",[この関数を入力するセルの相対参照形式のセル番号]),1,FIND("]",CELL("filename",[この関数を入力するセルの相対参照形式のセル番号]),FIND(".xl",CELL("filename",[この関数を入力するセルの相対参照形式のセル番号]))),),Sheetま!$A:$A,0)-1)&"'![前のシートにおける参照元のセルの(シート名を含まない)セル番号(この場合はD2)]"),"") などの様に変更せねばなりません。  リストにシート名を並べる順番も参照して行く順番に合わせて、上から順番に並べておかなければなりません。  もし、シート名が変更になった場合には、それに合わせてリストに記載されているシート名も、その都度変更せねばなりません。

ymda
質問者

補足

ありがとうございます。 現在、Officeが不安定な状態で、検証できない状態です。

全文を見る
すると、全ての回答が全文表示されます。
  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.3

直接回答ではないが、下記の理解は必須です。No2回答にも出ているようです。 参考までに記してみます。 参考までに似ているというWEB http://okwave.jp/qa/q5535868.html で、出ている関数の意味は理解できましたか。 ーー 左が関数を入れたセルの値 右は入れる関数を示す。 このブックのシート名をCELL関数で取り出す 私の開いているブックのあるシートSheet1を前提に説明します。 =CELL("filename",A1) C:\Users\XX\Documents\[2セルXX.xlsm]Sheet1 [の位置(先頭からの何文字目か) 22 =FIND("[",CELL("filename",A1)) ]の位置(先頭からの何文字目か) 33 =FIND("]",CELL("filename",A1)) 上記フルパスとシート名からシート名を切り出す 2セル判定.xlsm =MID(D9,22+1,D12-D11-1) シート名部分を取り出す =RIGHT(D9,LEN(d9)-A13) Sheet1 ーーー この質問は ・特定の場所 ・前の同じ場所 ・不特定の名前 のような一般性を持たせようとする表現(実は現実の事項を隠したいのだろう)があります。 何もわかりにくくせず、シート名が、S1、S2,S3 と3つあって=S2!A3のように書くのがなぜ都合が悪いのか理由を書いてある方がありがたい。 >前の同じ場所から 前のシートの同位置セルから、ということか ーー 関数ではシートタブ的に直前とか直後を表すことはできないと思います。 シートが作られた来歴では、前や次があっても、移動されることがあり得る。 ーー しかしVBAでは、やや似たことができます。 しかしシートタブは自由に位置を移動できるので、あまり使い道はないと思います。 VBAでは Sheet1,Sheet2,Sheet3,Sheet4の4つのシートがシートタブ的に左からこの順序であるとします。 Sub test02() Worksheets("Sheet4").Range("A1").Select MsgBox ActiveSheet.Previous.Name Worksheets("Sheet2").Activate MsgBox ActiveSheet.Next.Name End Sub のように.Previousや.Next があります。 またシートのいんでっインデックス番号というのもあります。 Sub test03() MsgBox ActiveSheet.Index MsgBox Sheets("Sheet4").Index End Sub シートタブの位置は固定できないと思います(ブックやシートを保護する方法は別にして)。 すると「前」は不安定になります。 ですから具体的にシート名を使わざるを得ない。 改めてシート名を入力して使うのが嫌なら、回答に出るだろう、複雑な関数を使わないと、ほかに、しかたがないと思う。 VBAではシートの特定は下記の指定で行える。 ・名前 ・インデックス番号 ・Active ・Previous/Next ・その他(多分ないと思う) ふつうは「名前による指定」になるということ。

ymda
質問者

補足

ありがとうございます。 現在、Officeが不安定な状態で、検証できない状態です。

全文を見る
すると、全ての回答が全文表示されます。
  • kagakusuki
  • ベストアンサー率51% (2610/5101)
回答No.2

 今仮に、御質問の件に関わるデータが入力されているシートが5枚あり、1番最初のシートのシート名が「あ」で、2番目のシート名が「い」、3番目のシート名が「う」、4番目のシート名が「え」、5番目のシート名が「お」であるものとします。  そして、2~5番目のシートのB2セルに、「1つ前のシート」のC3セルの値を表示させるものとします。  まず、上記以外のシートで、使用していない適当なシート(ここでは仮にそのシートのシート名がSheet1であるものとします)のA列に A1セル  シート名 A2セル  あ A3セル  い A4セル  う A5セル  え A6セル  お の様に、各シート名を途中に空欄が無い様に順番に入力されているリストを作成して下さい。  尚、A1セルの「シート名」は単に何のリストであるのかを解り易くするために入れた項目名に過ぎませんので、必ずしも入力しておかなければならない訳では御座いません。  その上で、2番目のシートのB2セルに次の様な関数を入力して下さい。 =IF(ISERROR(1/(INDIRECT("'"&INDEX(Sheet1!$A:$A,MATCH(REPLACE(CELL("filename",B2),1,FIND("]",CELL("filename",B2),FIND(".xl",CELL("filename",B2))),),Sheet1!$A:$A,0)-1)&"'!C3")<>"")),"",INDIRECT("'"&INDEX(Sheet1!$A:$A,MATCH(REPLACE(CELL("filename",B2),1,FIND("]",CELL("filename",B2),FIND(".xl",CELL("filename",B2))),),Sheet1!$A:$A,0)-1)&"'!C3"))  尚、もし「1つ前のシート」のC3セルが空欄だった場合において、同様の空欄ではなく、0が表示されてしまっても構わないという場合には、下記の様な関数にしてしまっても構いません。 =IFERROR(INDIRECT("'"&INDEX(Sheet1!$A:$A,MATCH(REPLACE(CELL("filename",B2),1,FIND("]",CELL("filename",B2),FIND(".xl",CELL("filename",B2))),),Sheet1!$A:$A,0)-1)&"'!C3"),"")  次に、2番目のシートのB2セルをコピーした後で、3~5番目のシートを纏めて選択してから、そのまとめて選択したシートのB2セルに対して、貼り付けを行って下さい。  以上です。

ymda
質問者

お礼

お礼欄ですみません。 ファイル名も変更になる可能性もあります。

ymda
質問者

補足

ありがとうございます。 これでは仕様を全く満たしません。 Sheet1でない可能性もあるわけです。 単純に構造的に書くとこのようになります。 ※順番が「ばらばらに書いてあるように見えますが、実際のシートの順番はこのとおりです [Sheet1] A2 B2 C2 D2 -- 1 -- =B2*2 [Sheet2] A2 B2 C2 D2 -- * -- =B2*2 *=Sheet1のD2の内容 [Sheet4] A2 B2 C2 D2 -- * -- =B2*2 *=Sheet1のD2の内容 [Sheet3] A2 B2 C2 D2 -- * -- =B2*2 *=Sheet4のD2の内容 [Sheetは] A2 B2 C2 D2 -- * -- =B2*2 *=Sheet3のD2の内容 [Sheetほ] A2 B2 C2 D2 -- * -- =B2*2 *=SheetはのD2の内容 [Sheet5] A2 B2 C2 D2 -- * -- =B2*2 *=SheetほのD2の内容 以下略・・・

全文を見る
すると、全ての回答が全文表示されます。
  • shintaro-2
  • ベストアンサー率36% (2266/6244)
回答No.1

>1か所、前の同じ場所から 日本語として、意味不明です。 エクセルのセル番号で具体例を複数示してください。

ymda
質問者

お礼

お礼欄ですみません。 ファイル名も変更になる可能性もあります。

ymda
質問者

補足

単純に構造的に書くとこのようになります。 ※順番が「ばらばらに書いてあるように見えますが、実際のシートの順番はこのとおりです [Sheet1] A2 B2 C2 D2 -- 1 -- =B2*2 [Sheet2] A2 B2 C2 D2 -- * -- =B2*2 *=Sheet1のD2の内容 [Sheet4] A2 B2 C2 D2 -- * -- =B2*2 *=Sheet1のD2の内容 [Sheet3] A2 B2 C2 D2 -- * -- =B2*2 *=Sheet4のD2の内容 [Sheetは] A2 B2 C2 D2 -- * -- =B2*2 *=Sheet3のD2の内容 [Sheetほ] A2 B2 C2 D2 -- * -- =B2*2 *=SheetはのD2の内容 [Sheet5] A2 B2 C2 D2 -- * -- =B2*2 *=SheetほのD2の内容 以下略・・・

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • EXCELで特定のセルを参照するには

    EXCELで特定のセルを参照するにはどうすればいいでしょか? たとえば、sheet1の何行目の何列目のセルの値を参照、とか感じでやりたいんですが・・・。 できれば、「ある値 引く ある値」目の列、「ある値 引く ある値」目の行とやりたいです。

  • Excelにて複数条件を満たす行の特定のセルの値を返す関数

    Excelにて複数条件を満たす行の特定のセルの値を返す関数を作りたいのですが、上手く行きません。 <Sheet1>   A列  B列  C列 1 2008/6/1 ★  320 2 2008/6/1 ☆  300 : : : Sheet2のA1に、「A列が2008/6/1で、B列が☆の場合、C列の値を返す」という関数を入れたいのですが、どうも上手く行きません。 良い式がありましたら教えて下さいm(_ _)m

  • セル式、隣の特定セルの値を表示させる

    エクセル初心者のものです シート(9)-1,PPVの隣のシートに シート(9)-1,PPVのF16の値を表示させようとしています セル式を =(9)-1,PPV!F16と記述しました  しかしエラーが出てしまいます シート名+!+セル で違う箇所のものは表示されます 今回式が正しくありませんというエラーメッセージが出てしまうのは どうしてでしょうか?

  • EXCEL マクロの定数にセルの値を参照できますか

    EXCELの複数グラフシートから、PPへグラフの貼り付けを行いたいです。貼り付け形式がグラフにより、xlBitmapとxlPictureを別ける必要があるので、EXCELにグラフシート名と貼り付け形式(xlBitmapとxlPicture)の一覧を作成し参照させたいのですが、うまくFormat形式をセルから参照させることができません。定数は参照できないのでしょうか? Selection.CopyPicture Format:=xlBitmapのxlBitmapの部分にセルの値を参照させたい。

  • 複数のシートのセル参照について

    Excelで複数のsheetのセル参照についてお伺いします。 たとえばsheetが1から50まであるとします。 sheet1のA1のセルには、sheet2のA1のセル参照、 sheet1のA2のセルには、sheet3のA1のセル参照、    ↓ sheet1のA49のセルには、sheet50のA1のセル参照、 といった複数のシートのセル参照を行いたいと思います。 sheet1のA1のセルに、sheet2のA1のセル参照の値を入力して、フィルハンドルでドラッグしても連続したデータができません。 簡単な操作で、複数のシートのセル参照をするにはどうしたらよいでしょうか。 よろしくお願いいたします。

  • エクセルで特定のセルにある関数式を複数の場所で利用できる?

    エクセルで特定のセルにある関数式を複数の場所で利用できる? ある別シートのセルに作った条件式を本シートの複数の場所から式自体を参照して利用することは エクセルで可能でしょうか? 具体的には、シートAのH2セルにH5で入力された番号から自動で分類番号を入れる関数式 =IF(H5="","",IF(COUNTIF(H5,"*42*"),1,IF(COUNTIF(H5,"*LA*"),2,IF(COUNTIF(H5,"*67*"),3・・・ をページ毎に入力してあります。 コピー&ペーストするだけで複製は可能なのですが、分類番号が増えると1箇所で修正を行い それを全ての場所にコピーする必要が出てきます。 そこで、シートBに関数式を入力しておき、その式をH3で読み出してH5の状態から最終的に H3へ分類番号を表示する・・・ こんなことはできるのでしょうか? ちなみに、可能となれば関数式中のH5では2ページ以降に適応できなくなるので (INDIRECT(ADDRESS(ROW()+3,COLUMN())) に置き換えて自分より3つ下のセルという形で参照させる予定です。 よろしくお願いします。

  • エクセル複数シートへ参照。シート移動で参照セル移動

    エクセル(2007または2010)で,複数シート(テンプレートは同じ)が同一シートを参照するようにしたいです。その際,シートが1つ後ろへ(タブが1つ右へ)移るたびに,参照元シート上の参照セルを1つ下の行へずらすようにしたいです。 複数(40枚)の個票を作るために,入力用のシートを作成して個票となる複数のシートが入力用シートを参照するようにしたいのです。 個票用のシートにある十数カ所の数式を手で修正しよう(十数カ所×40枚=数百カ所!!)としていますが,いい方法はないでしょうか。 ご存じの方がいらっしゃいましたら,お知恵をお借りしたいです。よろしくお願いいたします。

  • エクセルのマクロで、セルの値を参照してジャンプ

    エクセルのマクロで、セルの値を参照して、 別シートにジャンプして貼り付けたいと思っています。 <Sheet1>  |  A  B  C ------------------------------------ 1|  A1  あ  100 2|  B5  い  50 3|  C7  う  80 4|  D3  え  20 5|  E9  お  40 <Sheet2>  |  A  B  C  D  E ------------------------------------ 1|  あ 2|  100 3|         え 4|         20 5|    い 6|    50 7|       う 8|       80 9|            お 10|            40 といったイメージです。(お分かり頂けますか?) Sheets1!B1:C1を選択し、A1のセルの値を参照して、Sheets2!A1にジャンプして、 行列入れ替えて貼り付ける、といったマクロを組みたいのですが、 セルの値を参照する部分が分かりません。 実際はSheets2の様なシートは複数あり、1つのリストから複数の形式を変えた表を 作りたいと思っています。 Sheets2以降のシートに見出し行を加え、VLOOK関数を組み込んだ表を作っておき、 結果を貼り付けて見出し行を削除する、といったマクロは組めるのですが、 セルを参照してジャンプして貼り付けてくれると便利だと思い質問させて頂きました。 どなたかお知恵を拝借できましたら嬉しいです。 宜しくお願い致しますm(_ _)m

  • エクセルでセルの値が0になってしまいます

    エクセル2010を97互換モードで使っていますが以下の状況が起こっており原因がわかりません。 シート1のセルの式:='見積書(一般)'!E35:G35 その値:107,700 シート2のセルの式:='見積書(一般)'!E35:G35 その値:0 つまり、見積書(一般)というシートの同じセルの値をシート1、シート2に引いてくるだけなのにシート2の方はなぜか0になってしまうのです。どちらも表示形式は通貨です。 試しに見積書(一般)の別のセルに値を入れ、そのセルを参照させるとシート2でも正常に値が表示されます。 参照元(見積書(一般))のセルは連結されています。 原因と解決方法を教えてください。

  • エクセルのセル参照、一つずつ参照セルをずらしていきたい

    エクセルのセル参照の方法について教えてください。 2つのシートがあって、 ひとつのシートにはC4,D5,E6…というように行と列がひとつずつ増えていくところに値が入力されています。 このシートから、C4,D5,E6…のセルの値を取り出して 別のシートのA1,A2,A3…に縦に並んで表示させたいのですが、どのようにセルを参照させればC4,D5,E6…という 行と列がひとつずつ増えていくセルを参照できるでしょうか? よろしくお願いいたします。

専門家に質問してみよう