Q&A
解決済み

【Excel INDIRECT関数】オートフィルができない

Excelについて質問です。
他の方が同じ質問をされていたのですが、
私は少し違ったパターンでIndirect関数を使用しています。

=INDIRECT($A$1&"!A1:C1")と範囲指定し、
その下のセルに
=INDIRECT($A$1&"!A2:C2")となるように
オートフィルで数式をコピーしていきたいです。


ROWを使用するなどして、可能でしょうか。
何か他に方法がありましたら、教えていただきたいです。
よろしくお願いします。


5 件の回答

medal ベストアンサー獲得数 157 件

たぶんINDIRECT関数の使い方自体が間違っています。
INDIRECT関数は「指定したセルの値(数値や文字列)を返す関数」なので、範囲指定は出来ません。

範囲指定して何をするのでしょうか?

ここからエスパー回答
範囲指定内の合計なら単純に
=SUM(INDIRECT($A$1)&"!A"&ROW(A1)&":C"&ROW(C1))
または
=SUM(OFFSET(INDIRECT($A$1)&"!A1",ROW(A1)-1,ROW(C1)-1,1,3))
となります(合ってるかな?)
  • 1
あいだの1件を表示
ベストアンサー
ベストアンサー

medal ベストアンサー獲得数 157 件

>>2 さやさにさん

SUM内ならINDIRECT内も範囲指定でも良いですね。

これでどうですか?
=SUM(INDIRECT($A$1&"!A"&ROW(A1)&":C"&ROW(C1)),INDIRECT($A$1&"!F"&ROW(F1)&":G"&ROW(G1)),INDIRECT($A$1&"!J"&ROW(J1)&":L"&ROW(L1)))

ちなみにD,E,H,I,…が文字列もしくは空白なら
=SUM(INDIRECT($A$1&"!A"&ROW(A1)&":L"&ROW(L1))
でも大丈夫だと思います。
ベストアンサー この回答はベストアンサーに選ばれました。
  • 3
さやさに
さやさにさん・質問者
ルーキー

>>3 blue777さん
ありがとうございます!!
本日試してみて、エラー発生も発生せず、
オートフィルもできました!!
非常に助かりました。ありがとうございます😭

今回初めてROW関数を使用するのと、
INDIRECT関数の" ! & の入れる位置があまり理解し切れていないのとで、
もう少し勉強が必要だなと、自分で感じました……。

もっと勉強します!
  • 6

iPhone XR(mineo(au)) medal ベストアンサー獲得数 34 件

こんにちは。

=INDIRECT($A$1&"!A" &ROW(D1) & ":C" &ROW(D1))

D1に入れてみるとき、こんな感じです。ROW使って良いと思います。他の方法は考えればたくさんありそうですが、ROWですっきり出来ますね。
  • 4
さやさに
さやさにさん・質問者
ルーキー

>>4 Y. Daemon@ポリアモラスさん
教えていただき、ありがとうございます!
  • 7
公坊
公坊さん
Gマスター

medal ベストアンサー獲得数 266 件

さやさにさんの

Excel、$A$1の文字列と同じ名前の別シートから
A1〜C1、F1〜G1、J1〜L1、、、(まだ足したいものがあります)をSUMで合計した数値を抽出したいと思っています。

=SUM(INDIRECT($A$1&"!A1:C1"),INDIRECT($A$1&"!F1:G1"),INDIRECT($A$1&"J1:L1"))
このように数式を入力すると、エラーは発生せず、成功したのですが、
オートフィルで下の行に数式コピーをして
A2:C2....となっていくようにしたい

で、Microsoft Copilot(Bing) Chat GPT への回答です

Excelでのご質問、承知しました。`INDIRECT`関数を使用して、$A$1の文字列と同じ名前の別シートから特定の範囲を合計する方法をご案内します。オートフィルを使用して、下の行に数式をコピーする際には、セル参照を相対参照に変更する必要があります。以下のように数式を修正してみてください。

```excel
=SUM(INDIRECT($A$1&"!A"&ROW()&":C"&ROW()), INDIRECT($A$1&"!F"&ROW()&":G"&ROW()), INDIRECT($A$1&"!J"&ROW()&":L"&ROW()))
```

この数式では、`ROW()`関数を使用して、現在の行番号を取得し、それを範囲の一部として組み込んでいます。これにより、オートフィルを使って数式を下にドラッグすると、`A1:C1`が`A2:C2`、`A3:C3`と自動的に更新されます。

さらに範囲を追加したい場合は、同じパターンで`INDIRECT`関数を追加していけば大丈夫です。例えば、次の範囲`O1:Q1`を追加する場合は、以下のようになります。

```excel
=SUM(INDIRECT($A$1&"!A"&ROW()&":C"&ROW()), INDIRECT($A$1&"!F"&ROW()&":G"&ROW()), INDIRECT($A$1&"!J"&ROW()&":L"&ROW()), INDIRECT($A$1&"!O"&ROW()&":Q"&ROW()))
```

この方法で、必要な範囲をすべて合計することができます。試してみてください。何か他にもお手伝いできることがあれば、お知らせください。🙂
  • 5
さやさに
さやさにさん・質問者
ルーキー

>>5 公坊さん
教えていただき、ありがとうございます!
  • 8

medal ベストアンサー獲得数 157 件

ベストアンサーの選定ありがとうございます。
  • 9

medal ベストアンサー獲得数 157 件

>INDIRECT関数の" ! & の入れる位置があまり理解し切れていない

INDIRECT内を少し解説すると
通常は
①"シート1!A1:C1"
となります。

A1に"シート1"と入力し、それを参照するので
②$A$1 & "!A1:C1"
となります。

オートフィルを使うので
A1 の 1 と C1 の 1 を変化させたいので
まずはC1 の 1を
③$A$1 & "!A1:C" & 1
のように"で閉じて1を&で繋げます。

さらにA1 の 1を
④$A$1 & "!A" & 1 & ":C" & 1
と途中を分断し、両端を"で塞ぎ1との間を&で繋げます。
②と③と④は同じものです。
分断した両端を"で閉じて&で繋げます。
"から"までが文字列扱いです。

分かりやすい様に表示すると
⑤$A$1 & " " & 1 & " " & 1
→セル & " " & 数字 & " " & 数字
となり、分断したところが
⑥" & 1 & "
となっているのが分かると思います。

そしてこの「1」をオートフィルによって変化させたいのでROW関数に変えます。
⑦$A$1 & "!A" & ROW(A1) & ":C" & ROW(C1)
→セル & 文字列 & 関数 & 文字列 & 関数
セルと関数は文字列では無いので
" "の外に出して&で繋げるイメージ
  • 10
さやさに
さやさにさん・質問者
ルーキー

>>10 blue777さん
返信遅くなりました…教えていただいたのに、すみません。

すごくすごく腑に落ちました…‼︎
とても分かりやすく教えていただいて、ありがとうございます‼︎
  • 11

medal ベストアンサー獲得数 157 件

>>11 さやさにさん

私も最初はこのあたりの認識が不明だったので理解するまで苦労しました。
このあたりを詳しく解説しているものも無かった様に思いますので、自分で理解した内容で解説しました。

ROW関数については、
ROW(A1)でもROW(C1)でも同じ答えですが、分かりやすい様に敢えて区別しました。

(ご理解しているとは思いますが)ROW関数のカッコ内は省略可能ですが、入力する「セルの行数」に依存するので、どのセルに入力しても同じ答えになるように省略しませんでした。
  • 12