• ベストアンサー

OFFSET関数に関して

今仕事で作業中のエクセルファイルに関して質問です。 複数のシートをもとに作業しています。 シートAの中のひとつのセルでは、シートBのあるセルが指定されています。 シートBのセルの一つ上と、二つ上のセルの数字をシートAに引用したいのですが、 OFFSETはあくまで同じシート上のものしか指定できないようです。 上記を解決する方法があれば御教授願えないでしょうか? 宜しくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
noname#204879
noname#204879
回答No.6

[No.2補足]へのコメント、 添付図参照 シート「Document 2013」のH、I、Jの各列のデータには重複がないとすればハナシは簡単です。 シート「SheetA」のセル F12 に式 ='Document 2013'!H9008 を入力して、此れを右2列にドラッグ&ペーストしています。 セル F14 に次式を入力して、此れを右2列にドラッグ&ペーストすれば、夫々1行上のデータが得られます。 =INDEX('Document 2013'!H:H,MATCH(F12,'Document 2013'!H:H,0)-1) 末尾の数値 1 を 2、3 に変更すれば、夫々2行上の、3行上のデータが得られるという次第です。

yagyusan
質問者

お礼

ご回答有難うございます。 また添付図も頂き恐縮です。 まだ少しINDEXとMATCHを組み合わせた関数の理屈が把握し切れていないのですが、問題なく活用できているので取り急ぎこちらを使用させていただきます。 ありがとうございました。

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

その他の回答 (6)

回答No.7

ANo.3 補足です。 'Document 2013'!H9008の2行上から 'Document 2013'!J9008の1行上に 固定できるのでしたら、A1セルに'Document 2013'!$H$9006:$J$9007 'Document 2013'!H9008の2行上は、=index(INDIRECT($A$1),1,1) 'Document 2013'!H9008の1行上は、=index(INDIRECT($A$1),2,1) 'Document 2013'!I9008の2行上は、=index(INDIRECT($A$1),1,2) 'Document 2013'!I9008の1行上は、=index(INDIRECT($A$1),2,2) 'Document 2013'!J9008の2行上は、=index(INDIRECT($A$1),1,3) 'Document 2013'!J9008の1行上は、=index(INDIRECT($A$1),2,3) という方法もあります。

yagyusan
質問者

お礼

補足有難うございます。 INDEXとINDIRECTを組み合わせる方法もあるのですね。 今後のためにも最初に頂いた回答と併せて参考にさせていただきます。 ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。
  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.5

シートAのA1セルに =Sheet2!F10 のように記入されていた時に、この「数式を直接編集して」 =OFFSET(Sheet2!F10,-1,0) のような数式を新たに書き起こせば、問題なく1つ上を取ってくることもできます。 しかし、 =Sheet2!F10 と書かれている「このセル」を利用して、その一つ上を取ってくるといった方法はありません。 #参考 敢えて言うと、Sheet2!F10と一致する内容がシート2に「F10セルただ一つだけ」しか絶対に無ければ、シート2からその値を検索して一つ上を取ってくることは可能です。 =INDEX(Sheet2!F:F,MATCH(A1,Sheet2!F:F,0)-1) でも通常はそういう事が保証できる理由は何もないので、こういう方法もつかえません。

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

回答NO2の補足(1)(2)を見る限り、 ごくふつーに相対参照させてフィルやコピー貼り付けで解決できる問題だと思いますが・・・ まぁ、とりあえず、例を元に。 > F12:='Document 2013'!H9008 > G12:='Document 2013'!I9008 > H12:='Document 2013'!J9008 例えば、H12セルを基準として考えます。 別セル(今回はI12とさせて下さい)に、文字列で基点を指定します。 「J9008」ですかね。 で、INDIRECTと言う関数を使ってみます。関数の詳細はヘルプなりご覧ください。 H12セル⇒=INDIRECT("'Document 2013'!"&I12) これで、'Document 2013'!J9008セルの中身を参照してきます。 続いて、G12セル⇒=OFFSET(INDIRECT("'Document 2013'!"&I12),0,-1) および、F12セル⇒=OFFSET(INDIRECT("'Document 2013'!"&I12),0,-2) これでなんとなくご希望の動きをするのではないかと。 最初に参照するI12セルに元のシート名まで入れれば、INDIRECTの中身は短くできます。 でも、こちらのほうが手間じゃないです? 単純にフィルやコピーで片が付くなら、そちらを採用すべきだと思いますが・・ こればかりは好みの問題ですから、他人は何も言えませんけどね。 そんなわけで、 > OFFSETはあくまで同じシート上のものしか指定できないようです。 これは勘違いですので、この考えは捨ててやってくださいね。

yagyusan
質問者

お礼

ご回答有難うございます。 小生の知識不足を補っていただき有難うございます。 頂いた情報参考にさせていただきます。

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

>シートAの中のひとつのセルでは、シートBのあるセルが指定されています。 >シートBのセルの一つ上と、二つ上のセルの数字をシートAに引用したいのですが、 シートBの範囲が分かってい(特定でき)て、 ある値でシートAからシートBに検索できるようでしたら、 INDEX関数とMATCH関数を使用してもできます。 >OFFSETはあくまで同じシート上のものしか指定できないようです。 そんなことはありません。OFFSETは他シートも参照できます。 <<ANo.1の方での補足より>> >シート1の例えばB3に=Sheet2!A1と入力されている場合、 >そのシート1のB3を使って(経由して)シート2のA1を引用することは出来ないでしょうか? それでしたらシート1のセルから =INDIRECT(B3) 同じくシート1のセルから =INDIRECT("Sheet2!A1")でも参照できます。 ですので=OFFSET(INDIRECT(B3),・・・・・・・・・・・・とか試してみて下さい。

yagyusan
質問者

お礼

ご回答有難うございました。 OFFSETに関しては誤解しておりました。 勉強不足で、INDIRECTの存在を初めて知りました、色々と試してみます。

全文を見る
すると、全ての回答が全文表示されます。
noname#204879
noname#204879
回答No.2

》 シートAの中のひとつのセルでは、シートBのあるセルが指定されています 「シートBのあるセルが指定され」るために、「シートAの中のひとつのセル」には何が書かれているのですか?つまり、「指定」の方法をお尋ねしています。 》 シートBのセルの一つ上と、二つ上のセルの数字をシートAに引用したい… 「シートAの中の」その式は、上で述べた「シートAの中のひとつのセル」を参照しなければならないのですか? 》 OFFSETはあくまで同じシート上のものしか指定できないようです その根拠は何ですか?

yagyusan
質問者

補足

早速のご回答有難うございます。 (1)例を挙げると、 シートA F12:='Document 2013'!H9008 G12:='Document 2013'!I9008 H12:='Document 2013'!J9008 とかかれています(シートB=Document 2013) (2)シートAはシートBの必要な情報のみを抜粋、或いはその情報をもとに利 益率等を換算するシートです、そしてシートBは関連する情報が全て掲載されたマスタシートです。今引用したい情報をシートBから一つ一つ引っ張ってくることは可能ですが、規則性無くシートBに記載されていて、またかなりの数を引用する必要があるため時間がかかります。引用したい情報は、上記の例で行くと、シートBのH9007やI9007といった、シートAで既に紐付けられているセルの一つ上であることがわかりました。そのためOFFSETが使えないかと考えた次第です。 (3)根拠はありません、この質問を出す前に色々と検索してみたのですが解決できずそのように述べた次第です。 状況はまだ把握頂けないようであれば再度ご指摘いただけますでしょうか? お手数ですが何卒宜しくお願いいたします。

全文を見る
すると、全ての回答が全文表示されます。
  • KURUMITO
  • ベストアンサー率42% (1835/4283)
回答No.1

例えばシート2のA1セルからA3セルまでに1,2,3の数値が入力されているとします。 シート1のセルで例えば =OFFSET(Sheet2!A3,-1,0) と入力すれば2が表示されます。 また、 =OFFSET(Sheet2!A3,-2,0) と入力すれば1が表示されます。 OFFSET関数は引数として基準、行数、列数を入力することになりますが、基準より1行上の場合には-1を、1行下の場合には1を、同じ列の場合には0を、右横列になる場合には1を、左横列の場合には-1のようにして使います。 OFFSET関数は別のシートを参照する場合でも問題なく使うことができますね。

yagyusan
質問者

補足

早速のご回答有難うございます。 シート1の例えばB3に=Sheet2!A1と入力されている場合、そのシート1のB3を使って(経由して)シート2のA1を引用することは出来ないでしょうか? お手数ですがご回答いただければ幸いです。 宜しくお願いいたします。

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

関連するQ&A

  • OFFSET関数の使い方

    EXCELで、文字が入った行を別のワークシートで参照したいのですが、 =OFFSET(Sheet5!$C$1,0,0) として、 その下の行は =OFFSET(Sheet5!$C$1,1,0) さらにその下は =OFFSET(Sheet5!$C$1,2,0) さらにその下は =OFFSET(Sheet5!$C$1,3,0) というふうに数字を1つずつ増やしたのですが、セルをコピーしてマウスで下にドラッグしても 連続して数字が増えていきません。 =OFFSET(Sheet5!$C$1,この部分,0) →ここの部分の数字を1つずつ増やして いくにはどうしたらいいのでしょうか?

  • エクセルのOffset関数に詳しい方

    エクセルのOffsetでのセル移動についてですが、Offsetで移動した後、セルが画面の 範囲を超えた場合、エラーになってしまいます。 1行目より上には行けないですし、A列より左には行けないといった具合です。 このエラーを回避して、「行けるところまで行く」、つまり、1行目より上が指定されてしまった場合は1行目にセルが移動するような動きはできませんでしょうか? ご存知の方、お願いします。

  • エクセル2007 OFFSET関数 INDIRECT関数

    エクセル2007でOFFSET関数とINDIRECT関数を用いてセルの入力規則をして、リスト表示したいと思っています。 入力規則のリストは動的な値を設定したいと思っています。  ABCDE 1あいうえお 2かきくけこ 3さしすせそ 4たちつてと 5なにぬねの というシートA列に”データベース1”B列に”データベース2”・・・といった具合に名前を定義します。このデータベースは行がどんどん増えていく可能性があるため、名前の定義の参照範囲欄に (1)=OFFSET($A$1,0,0,COUNTA(A:A),1)  としました。 別シートに 表示したいセルで入力規則→設定タブ→入力値の種類→リストを選択。 元の値の欄に (2)=INDIRECT(A2&"1",FALSE)  としました。  ※A2は”データベース”と入力してあるセルです。 ここからがわからないのですが 上記式(1)、(2)の両方とも単独で使用した場合は欲しい値が得られるのですが、組み合わせて使用した場合はリストが出てこなくなってしまいます。 1)組み合わせて使うことはできないのですか 2)ほかにいい方法はありますか ということを質問します。 よろしくお願いします。

  • OFFSET関数のオートフィルについて

    A1セルに「=OFFSET(Sheet2!$A$1,0,1)」と入力します。 横方向へオートフィルした際に「=OFFSET(Sheet2!$A$1,0,2)」と列のみひとつ加算された状態て貼り付けていきたいのですがどのようにすればよろしいでしょうか。 A1を参照するのは固定です。

  • エクセル関数 OFFSET

    A表を元に、「OFFSET関数」で金額を入力するB表があります。 この場合の数式「=OFFSET($B$3,ROW()-3,3)」にある -3 の意味が分かりません。 どなたかご教授ください。 よろしくお願いします。

  • VBA:Offsetから値が貼付けれない

    はじめまして。 VBAを利用してマクロを作っているのですが、 Range("a6:l6").Copy Worksheets("結果シート").Range("A65536").End(xlUp).Offset(1) というのは動くのですが、結果シートへの貼付けを「値」で行いたいと思い、 以下の通りValueを指定しても動きません。 Range("a6:l6").Copy Worksheets("結果シート") .Range("A65536").End(xlUp).Offset(1).value PasteSpecialを使うと良いのかと思い、 Range("a6:l6").Copy Worksheets("結果シート") .Range("A65536").End(xlUp).Offset(1).PasteSpecial Paste:=xlPasteValues としてもエラーが出ます。 数式の結果を取得して、別のシートの空白セルを探し、「値」として張付ける。 というのがしたいのですが、なにか上手い方法があれば、ご教授お願いします。

  • OFFSET関数の基準セルの指定の仕方を工夫したい

    OFFSET関数を上手く使いこなすテクニックを教えて下さい。画像を添付します。 OFFSET関数を使って別のExcelファイルからデータを取ってくる方法を教えて下さい。 【前置き】 この添付ファイルとは別に「Aマンション家賃データ.xlsx」というファイルが存在し、その中に各個人に割り当てたID(H1,H2,H3,・・・)の名前のシートがある。 添付ファイルのセルE7を見ていただければ分かるように、「Aマンション家賃データ」ファイルのSheet H4からデータを取ってきているのがわかりますが、この数式の基準値を指定している部分の「H4」をその行の一番左側のセルA7の値から取ってくることはできないでしょうか?  なんか上手くいきません。どうか教えて下さい。よろしくお願いします。OFFSET関数でなくても構いません。

  • Excel(エクセル) 名前定義をしたリストから、indirect関数を利用して選択入力できるようにしたいのですが… 

     次のようなことができず困っています。  Sheet1とSheet2があり、Sheet2には"数字"、"英語"と名前定義された2つのリストがあります。Sheet1のセルA1には"数字"か"英語"どちらかの文字列を選択入力し、B1には、もしA1に"数字"を入力していればリスト"数字"から、もし"英語"を入力していればリスト"英語"から選択入力できるようにしたいのです。つまり、Sheet1のセルA1、B1の入力規則の種類をリストとして、元の値をそれぞれ、    ・Sheet1!A1には=数字,英語    ・Sheet1!B1には=indirect($A1) としています。 質問(1)) ここまでなら何の問題もないようですが、問題はSheet2の"数字"と"英語"の参照範囲です。    ・"数字"の参照範囲は=Sheet2!$A$1:$A$10,Sheet2!$C$1:$C$10    ・"英語"の参照範囲は=Sheet2!$B$1:$B$10,Sheet2!$D$1:$E$10 と複数範囲におよんでいる場合、Sheet1!B1にはうまくリストが表示されません。解決法、およびなぜ表示されないのか、どなたかご教示お願いいたします。 質問(2)) Sheet2の"数字"と"英語"の参照範囲を    ・=OFFSET(Sheet2!$A$1,,,COUNTA(Sheet2!$A:$A))    ・=OFFSET(Sheet2!$B$1,,,COUNTA(Sheet2!$B:$B)) とした場合も同様にSheet1!B1にはうまくリストが表示されません。こちらの方も解決法と表示されない理由をお願いいたします。

  • OFFSET 基準値 可変できないですか?

    初めてお世話になります。私なりにやりたいことをネットで検索して作ってますが行き詰まり悩んでいます。 その日のシフト勤務で早番の人はこの人、遅番の人はこの人と検索したいです。 SHEET1には勤務表が記載されています。 _A    B     C    D    1     1日   2日   3日 2名前A 早番  早番   ・・・・ 3名前B 遅番  早番   ・・・・ 4名前C 早番  遅番   ・・・・ SHEET2には、その日勤務する人で早番がこの人とこの人(例えば、上記でいえば2日に勤務する 早番は名前A、名前Bの2名と検索できるようにしたいです。 (A1の2日はSHEET1の日付と紐付けされていて、3日、4日と変わればC列の名前は変わっていく) SHEET2 _ A    B    C 1 2日  早番 名前A 2      早番 名前B 3 4 自分なりに調べて、C1のセルには、 =INDEX('SHEET1'A列の名前人数分,MATCH("早番",OFFSET('SHEET1'B2,0,SHEET2!A1-1,A列の名前人数分,1),0),1)とし、名前Aは抽出できましたが、C2セルの2番目の名前Bは検索できません。 matchの抽出は複数検索値がある場合、2番目、3番目は検索できないとあったので、それではと C2セルにOFFSETの基準値をC1で出たMATCHの結果+B2セルという風(C1で出た1番目の早番と出たセルを基準値とし、そこから下の行へ次の早番を探す)に考えましたが出た結果はセルではなく行数になってしまい無理でした。 2番目の検索までは、OFFSETの基準値を下にずらし、高さ調節でやりようはできるのですが(早番男1名、女1名はSHEET1のA列の名前欄は男性、女性である行で明確にわかれている為検索可)、ある日によっては早番が男2名だったりする場合は破綻してしまいます。 LARGEやSMALLとかも駄目もとで試しましたが、数値じゃないのか駄目駄目でした。 ちなみにSHEET1で記載される名前順は順番を変えたくないです。 柔軟にその日のシフトを検索できる方法はありますでしょうか? 宜しければご指導宜しくお願い致します。

  • エクセルの関数について。

    エクセルの関数。 Sheet1の作業列1のA2セルに =IF(COUNTA(Sheet2!2:2)=0,"",IF(Sheet2!A2="",A1,Sheet2!A2)) →数式1とする 作業列2のB2セルに =IF(A2=$D$2,ROW(),"") →数式2とする という数式を入れA2・B2セルを範囲指定 → B2セルのフィルハンドルで下へコピーしておきます。 (Sheet2の行数以上コピーしておく) そしてE2セルに =IF(COUNT($B:$B)<ROW(A1),"",INDEX(Sheet2!B:B,SMALL($B:$B,ROW(A1)))&"") →数式3とする という数式を入れオートフィルで列方向・行方向にコピーする。 教えて頂きたいことは、数式1、数式2、数式3が何を意味しているのか。 と、この数式を使って、表を作成したのですが、ある特定の数字(コード、D2セルに入力)を入力しても反応してくれない。 (E2~H2まで、空白セルの状態になります。) (sheet2は約1200行あります。) 教えて頂けないでしょうか?

専門家に質問してみよう