• ベストアンサー

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つずつ増やして いくにはどうしたらいいのでしょうか?

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

  • ベストアンサー
  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.5

No.2です。 >参照元のセルの文字に、色をつけているのですが、 >参照したほう側では、それが反映されないのでしょうか? 数式によって返ってくる結果は「値」だけだと思います。 すなわち参照先の書式までは表示することはできないはずです。 他の方の補足の >7行ずつ、参照して次にまた残りの行列から、別の表を繰り返し作りたのですが とあり新たに画像をアップされていますが、 元データの書式も別Sheetに7行・2列のデータにしたい!という場合は VBAになってしまいますが一例です。 元データはSheet1のA2セル以降にあり、Sheet2に表示させるとします。 Alt+F11キー → メニュー → 挿入 → 標準モジュール → VBE画面のカーソルが点滅しているところに ↓のコードをコピー&ペースト → Excel画面に戻りマクロを実行してみてください。 (Alt+F8キー → マクロ → マクロ実行です) Sub Sample1() 'この行から Dim i As Long, cnt As Long, wS As Worksheet Set wS = Worksheets("Sheet2") Application.ScreenUpdating = False wS.Cells.Clear With Worksheets("Sheet1") For i = 2 To .Cells(Rows.Count, "A").End(xlUp).Row Step 14 .Cells(i, "A").Resize(7).Copy wS.Cells(Rows.Count, "A").End(xlUp).Offset(2) .Cells(i + 7, "A").Resize(7).Copy wS.Cells(Rows.Count, "B").End(xlUp).Offset(2) Next i End With wS.Rows(1).Delete For i = 1 To wS.Cells(Rows.Count, "A").End(xlUp).Row If wS.Cells(i, "A") = "" Then cnt = cnt + 1 wS.Cells(i, "A") = "表" & cnt End If Next i Application.ScreenUpdating = True End Sub 'この行まで ※ 関数でないのでデータ変更があるたびにマクロを実行する必要があります。 書式もSheet1の書式をコピー&ペーストしています。m(_ _)m

kevinsan
質問者

お礼

ありがとうございました。 さっそく試してみましたが、とても便利です。 セルの位置など変更しながら、自分なりに応用してみたいと思います。 いろいろ勉強になりました。ありがとうございました。

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

その他の回答 (4)

  • bunjii
  • ベストアンサー率43% (3589/8248)
回答No.4

>今回の関数を応用して行7,列2の表を繰り返し作成したのですが7行ずつ、参照して次にまた残りの行列から、別の表を繰り返し作りたのですが、2つ目の表を作るところは、どのしたらいいのでしょうか? 元データがA2から下へ入力されているものとして、C2:D8に1つ目の表を作成すし、C10:D16へ2つ目の表を作成する場合は次のようにすれば良いでしょう。 C2=OFFSET($A$1,MOD(ROW(A1),8)+INT(ROW(A1)/8)*14+(COLUMN(A1)-1)*7,0) C2セルをC2:D8へコピー&ペーストで複写します。 次にC2:D8を選択してコピーし、C10へ貼り付けます。 更にC18へ貼り付ければ3つの表ができます。 縦に4つ目以降を貼り付けるときはC26、C32、・・・・のように等間隔で貼り付ければ目的の表になるでしょう。 別のシートに作成する場合は元データの位置はSheet1!$A$1のように変更します。 また、行番号の算出をSHEET関数を応用します。 Sheet2のC2セルは次の数式になります。 =OFFSET(Sheet1!$A$1,MOD(ROW(A1),8)+(SHEET()-2)*14+(COLUMN(A1)-1)*7,0) SHEET()の戻り値はタブの位置で左から1、2、3、・・・・のようになります。 貼付画像はExcel 2013で元データの中に表1~表3を作成したものです。

kevinsan
質問者

お礼

bunji様 さっそく、ありがとうございました。 なかなか高度な内容で、まだ自分自身関数の意味を理解しきれていませんが 大変勉強になります。 これで、なんとか作成してみます。どうもありがとうございました。

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

>セルをコピーしてマウスで下にドラッグしても連続して数字が増えていきません。 >OFFSET(Sheet5!$C$1,この部分,0) →ここの部分の数字を1つずつ増やして いくにはどうしたらいいのでしょうか? OFFSET関数の引数で行番号や列番号に実数を使うと定数なのでオートフィルでコピーしても変化しません。 変化させるにはセルの属性を利用しないといけません。 例えば提示の =OFFSET(Sheet5!$C$1,0,0) で行番号の0の代わりに ROW(A1)-1 とすれば下へコピーしたときA1がA2に変化しますので結果として ROW(A2)-1 → 2-1 → 1 となります。 尚、文字列に数字が付加されたデータをオートフィルでコピーすると最も右側の数字が繰り上がります。 提言の数式を文字列に置き換えても列番号は変化しますが行番号は左側の数字なので繰り上がりません。 理由は追求せずにそのような動作になっていることを認識してください。

kevinsan
質問者

お礼

詳しい解説ありがとうございました。いろいろ勉強したいです。 連続した文字が入っている行を参照して、きまったサイズの表を作りたいのですが、 今回の関数を応用して行7,列2の表を繰り返し作成したのですが 7行ずつ、参照して次にまた残りの行列から、別の表を繰り返し 作りたのですが、2つ目の表を作るところは、どのしたらいいのでしょうか? (質問のページに写真をアップしました。)

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

こんにちは! OFFSET関数に関しては すでに的確な回答が出ていますので、余計なお世話かもしれませんが・・・ =INDEX(Sheet5!C:C,ROW(A1)) とか =INDIRECT("Sheet5!C"&ROW(A1)) でも同じ結果が得られると思います。m(_ _)m

kevinsan
質問者

お礼

ありがとうございます!

kevinsan
質問者

補足

またまた教えて下さい。 参照元のセルの文字に、色をつけているのですが、 参照したほう側では、それが反映されないのでしょうか? 参照元の文字の一部をボールドにした場合、 別のワークシートで参照した場合、そちらに書式も同じように 参照する方法はありますか?

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

以下の様な感じでどうでしょうか。 最初のセルに「ROW(A1)-1」と答えが0になる式を入れておけばいいです。 =OFFSET(Sheet5!$C$1,ROW(A1)-1,0)

kevinsan
質問者

お礼

ありがとうございました。うまくいきました!

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

関連するQ&A

  • エクセル OFFSET関数について

    エクセル OFFSET関数について 以下のようなシートを2枚作成し、照合したいと考えています。 上段がシート1で、下段がシート2です。 2枚のシートの内容は同じようなものですが、セルの位置が 2枚ともバラバラで、できればROWS COLUMS関数を使って 照合したいと思いますが、二つの関数の使い方がよくわかりません。 照合の仕方は、シート1のデータをシート2をコピーした3枚目のシート(セルはすべて空欄) を作成して、そこにコピーしていきたいです。 一番左端の喫茶店の行番号、列番号を関数の中でどう設定すれば、3枚目のシートができて、 簡単に下までオートフィルできるのでしょうか。 1月31日までデータが入っているので、一つ一つ数式を入れていくのは大変です。 お願いします。

  • OFFSET関数に関して

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

  • エクセル2007:セルを参照する関数

    Sheet1とSheet2があり、 Sheet2のC1=Sheet1!B3 Sheet2のC2にSheet1のB6の値を入れたいです。 Sheet2のC3にSheet1のB9の値を入れたいです。 C2=OFFSET(Sheet1!B3,0,3) でできましたが、 C3を、C2の式を使って表したいです。 気持ち的には、 C3=OFFSET(C2,0,3) としたいのですが、当然ながらエラーです^^; このように入れられれば C4から下は、コピー&ペーストで行けるのになぁ…と思います。 C3=OFFSET(C2,0,3)としたときに、 関数中のC2が、C2の値ではなく参照しているセルの数式(OFFSET(Sheet1!B3,0,3) )を表すようにはできないものでしょうか???

  • 関数の連続コピーのしかた

     初めまして、よろしくお願いします。  関数式 =IF(Sheet1!H1=Sheet1!C1,Sheet1!D1,"") をINDEX またはINDIRECT で指定位置がセルの挿入されてもH1、C1、D1の位置を変更しないように変え、ROW(この関数か?)で変えた関数式をマウスでドラックして下に連続してコピーされていくようになおしたいのですが、どなたかよろしくお願いします。

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

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

  • ROW関数について

    先日質問をしたのですが、理解が足りないようなので質問させて頂きます。 ROW関数はセルを入力したそのセルの行番号を返すものだと思うのですが、例えば =INDEX(シート1!C2:シート1!HR2,(ROW()-3)*3+1,) このような数式をワークシート2のD3のセルに入れると、ROW()は3と解釈されるので、 ・範囲はData!のワークシートのC2からHR2まで、 ・(3-3)*1+1となるので、その範囲内の1番であるData!D2セルを参照するのだと思うのですが、何か間違っているでしょうか? この際に、ROW()に参照されるセルは、もしかしてシート1のものなのでしょうか? 宜しくお願いしますm(_ _)m

  • Excel OFFSET関数とCOUNTA関数

       A     B     C      D      E      F      G      H     I 1                                        ABC商会   合計   9,200 2 3 4 連番  出荷日   型     部品代   製品代   合計 5    1     10    aaa     1,000    1,850     2,850 6  2      12    bbb      650     900     1,550 7  3      18    ccc      800    2,000     2,800 8  4      30    ddd      500    1,500     2,000 9       10             合計     2,950   6,250     9,200   契約者毎にA1:F10ような集計表を作成しており、5行目以降行は追加されていくので、 可変の表になります。 各契約者集計シートのPrint Areaをコピーし、A1セルに貼るとG1、H1、I1に契約者名と 合計がABC商会 合計9,200と表示できる上記のような表になるようにしたいと思っています。 関数で対応したいのですがうまくいきません。 =VLOOKUP(H1,OFFSET(C4,0,0,COUNTA(C:C)-4,4),2)ではエラーにはなりませんが、合計を 表示できませんでした。 また、他の契約者集計シートのPrint AreaをA1セルに貼ると エラーになります。 どうかご教示お願いいたします。

  • 【エクセル関数】参照するセル

    エクセル関数で教えていただきたいです。 セル参照で、参照するセルを、ある法則道理に参照していきたいのです。 例えば、シートA,シートB、とあったときに、 シートBのC3に → シートAのC3を参照、 シートBのC6に → シートAのC4を参照、 シートBのC9に → シートAのC5を参照、 シートBのC12に → シートAのC6を参照・・・・ ・・・・・・・・・・・ という風に、参照元の列は1行づつ増やしていきたいのですが、 それをシートBでは、3行ごとに表示したいのです。 自分でいろいろ試してみましたが、うまくできません。 こういったことは、関数でできるのでしょうか? もし、あれば、教えていただけると助かります。 よろしくお願いします。

  • エクセル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)ほかにいい方法はありますか ということを質問します。 よろしくお願いします。

  • エクセルのフィルタモード中の連続数字について

    よろしくお願い致します。 OS:Windows2000、Excel2002です。 オートフィルタのフィルタモード中に連続数字を出す方法があればご教授ください。 例えば、通常セルに「1」「2」といれ、セルの右下をドラッグすると、「3」「4」「5」「6」・・・と続きますが、フィルタモード中ですと「1」「2」、「1」「2」の繰り返しになってしまうのです。 他のシートで、連続数字を作ってコピーし、フィルタモード中の方に貼付けすると、隠れている行にもコピーするので連続した数字になりません。 良いやり方を教えて頂きたく、よろしくお願いいたします。

専門家に質問してみよう