質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.51%

Q&A

解決済

2回答

4849閲覧

Googleスプレッドシートで、固定でないセル情報を、他の関数内で使用する方法

退会済みユーザー

退会済みユーザー

総合スコア0

0グッド

0クリップ

投稿2017/01/20 08:17

編集2017/01/20 08:22

###前提・実現したいこと
こんばんは。
Googleスプレッドシートの関数について質問です。

実現したい事は、セルを固定で指定(下の例だとD4)ではなく、、、

=offset(D4,0,-2)

下記のように、現在のセルを動的に取得したいと思っています。
しかし、エラーが出てしまい、固定でないセルの扱い方がわかりません。

=offset(row()column(),0,-2)

取得情報がStringだからだめなのかな、、と思い
下記のようにStringからReferenceに変換してみましたが、やはりエラーです。

=offset(indirect("row()column()",0,-2))

現在のセルを動的に取得して、その情報を他の関数内で使用したり、四則演算の中に組み込むには、
どうしたら良いでしょうか?

大変初歩的な質問で申し訳ございません。
検索しても、関数の単独の使用の例は沢山あるのですが、合わせ技の関数は見つかりませんでした。

お手数おかけしますが、どなたかお助け頂けると助かります。
よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

Excel 自分自身のセル参照の

=OFFSET(INDIRECT(ADDRESS(ROW(),COLUMN())), 0, 1)

を Google スプレッドシートで試してみたところ、動きました。


投稿2017/01/20 09:44

mit0223

総合スコア3401

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2017/01/20 10:11

さっそく試して見たところ、無事に動きました。ありがとうございます!!
guest

0

ベストアンサー

エラーの原因

今回使用されているOFFSET関数の構文は、
OFFSET(セル参照, オフセット行, オフセット列)
です。

=offset(D4, 0, -2)
はこの構文どおりですが、

=offset(row()column(), 0, -2)
で使用しているROW関数、COLUMN関数ともに行番号・列番号を返す関数です。
まず数値を返す関数というところに認識のずれがあると思われます。

そして2つの関数の間に演算子がないこともエラーの原因です。
=ROW()COLUMN()の式だけでエラーが発生します。

関数を2つただ並べるだけでは、この戻り値同士をどう扱うかが分からないためです。

仮に戻り値として数値ではなく文字列"D"と文字列"4"を受け取れたとしても、関数をただ並べるだけでは連結されません。
"D" & "4"というように戻り値同士を繋げるための演算子を挟む必要があります。

しかし"D" & "4"で"D4"を作ることができたとしても、それはセル参照ではなくただの文字列ですので、やはりOFFSET関数では利用できません(^-^;


次の式、
=offset(indirect("row()column()",0,-2))
は、おしかったです。
INDIRECT関数の第一引数は「セル参照を表す文字列」です。

惜しい点は、先ほども述べたとおり=ROW()COLUMN()で"D4"という文字列は得られないというところ。
そして"row()column()"という表記では、ROW()やCOLUMN()という関数は実行されず、ただ"row()column()"という文字列になってしまうことです。

対応方法

対応方法は先にmit0223さんから回答いただいている通りです。

=ROW()COLUMN()では"D4"という文字列はtくれませんでしたが、これを作成してくれるのがADDRESS関数です。
例えばD4セルに=ADDRESS(ROW(),COLUMN())という式を記載すると"$D$4"という文字列を返してくれます。

この文字列をINDIRECTの第一引数に使えば目的達成です。
=offset(indirect(address(row(), column())),0 ,-2)

ちなみにINDIRECT関数でセル参照した位置からさらにOFFSET関数で参照セルをずらしていますが、ROW関数、COLUMN関数ともに数値ですので、
=indirect(address(row(), column() - 2))
という風にINDIRECT関数の参照セル自体をずらしてしまうこともできます。

参考になれば幸いです。

投稿2017/01/20 11:04

jawa

総合スコア3013

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2017/01/23 14:54

うおおお! さらに詳細な解説ありがとうございます!! 私の至らなかった点としては、 ・引数や戻り値が、文字列なのか参照なのか、型をちゃんと判別してない。 ・文字列を合成する「&」の使い方を知っていなかった。(ただ並べれば合成すると思ってた) ・カンマが足りないなど、引数の確認が甘過ぎ。(もはや言い訳出来ない) 未熟ですみません!精進します!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.51%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問