• 締切済み

エクセルの関数 INDIRECT中の、CHAR関数

=SLOPE(OFFSET(INDIRECT("A"&CHAR(38+COLUMN())&$AB3-2),0,0,5,1),OFFSET(INDIRECT("AA"&$AB3-2),0,0,5,1)) のようにINDIRECT中ではオートフィルが適用されないので、CHAR(38+COLUMN())を入れてみました。このなかでCHAR関数が動作するかはわかりませんが、これで動くと思ったのですが、動きません。 解決策はありますか?

みんなの回答

  • SI299792
  • ベストアンサー率47% (789/1649)
回答No.5

書き洩らしと間違いがあったので、 どこかにと書きましたが "A"&CHAR(38+COLUMN())&$AB3-2 はAB列に入れないとだめですね。AB3 に3以上の数字を入れておくこと。 後、気になっているのがもう1つ。 AB3 に参照する行を入れていますが、これは各列に全て入れるのでしょうか。 もし、1か所だけ入れるのなら、AA3 に入れると思い、全ての列に入れるとしましたが、これでいいですか。

  • SI299792
  • ベストアンサー率47% (789/1649)
回答No.4

関数が解らない場合はばらせばいいです。特にINDIRECTを使う場合は、中身を確認する必要があります。どこかに ="A"&CHAR(38+COLUMN())&$AB3-2 を入力して、左右にコピペすれば、この関数がどのように動作しているのか解ります。 私は関数を作るとき、必ずばらばらに作って、動作確認をした後、合成します。今回 AB17 =AB3-2 AB18 =AB3+2 AB19 =COLUMN() AB20 =FLOOR(AB19-6,7)+6 AB21 ="R"&AB17&"C"&AB19&":R"&AB18&"C"&AB19 AB22 ="R"&AB17&"C"&AB20&":R"&AB18&"C"&AB20 AB23 =SLOPE(INDIRECT(AB21,FALSE),INDIRECT(AB22,FALSE)) という式を作り、左右にコピペします。すると、間違っていてもどこが悪いかすぐに判ります。その後、合成して、 =SLOPE(INDIRECT("R"&AB3-2&"C"&COLUMN()&":R"&AB3+2&"C"&COLUMN(),FALSE),INDIRECT("R"&AB3-2&"C"&FLOOR(COLUMN()-6,7)+6&":R"&AB3+2&"C"&FLOOR(COLUMN()-6,7)+6,FALSE)) という式を作ったのですが、どうしても#NUM! になったので、ワークエリアを使いました。ここまで複雑だとメンテナンスができないので、ワークエリアを設けてよかったと思っています。 1つ気になっているのですが、20℃の後60℃に飛んでいて40℃が無いのですが、それでいいのすか? 質問履歴が非公開になっています。これでは誰も前の質問がわからず、正しい答えが出せません。 前の質問のアドレスが間違っていました。

参考URL:
https://okwave.jp/qa/q9566492.html
bitamin123456
質問者

お礼

そうですね、バラせば間違っている所が出てきますよね。自分でもワークシートを設ければ出来ました。ありがとうございます。 40℃はないので大丈夫です。お気遣いありがとうございます。 url間違っていましたか。ありがとうございます。

  • imogasi
  • ベストアンサー率27% (4737/17070)
回答No.3

INDIRECの括弧の中は、「セル番地にあたる(表す)文字が来ないとならない。 INDIRECT("A"&CHAR(38+COLUMN()は「A」はよいとしてCHAR(38+COLUMN()は、まず最初は、アルファベットのどの文字を表INDIRECT("A"&CHAR(38+COLUMN()したいのか? A列に式を入れる場合、INDIRECTの中の、"A"&CHAR(38+COLUMN()の部分は、64+COLUMN()で、式をA列に入れた場合は「AA」になり、その直後は行番号に当たる数字が来ないとならない。 それが質問の場合は、$AB3-2で$AB3セルの値から2をひた数値なのだが、文字列を扱う式の中では、引き算結果の数値を、数字文字に扱ってくれる。 =$AB3-2 =INDIRECT("A"&CHAR(64+COLUMN())&($AB1)) のような式を作って使ってないセルに入れて、テストして、結果を見て、思い通りかどうか、チェックすればよい。 64はA列に式を入れてテストしたためで、質問の38ならば、64-38=第26列に式を入れたのかな?  その検証の際に、式の括弧の一番「深い」、部分から、チェックを始めるのがコツ。 そういうチェックを1歩ずつやるべきで、>動きません。>解決策はありますか (という「策」という表現よりも、式を正しく修正することだろう)では安易な態度だ。 それに質問には式だけをぶつけるのではなく、具体的にセルのデータを例示して、文章でも、したいことを説明すべきだ。 そういう訓練をしてこそ、関数やその他の解決策を見つける基礎的訓練になる。 それにCHAR関数と文字コードとの関係の知識も必要。 式を右方向に複写して、COLUMN()で採れる、列番号が27以上の数値に対しては、セル番地の列記号に当たるアルファベット文字を、返さないようになるので注意が必要。

bitamin123456
質問者

お礼

回答ありがとうございます。 深いところから、チェックしていきましたがなかなか、分からず、また今回はほとんど時間が取れなかったため、簡易的な質問になってしまいました。 また詳しい回答もありがとうございます。よく分かりました。自分で色々ためしたいとおもいます。 ご指摘もありがとうございました。 次回からはそのようにしたいと思います。

  • SI299792
  • ベストアンサー率47% (789/1649)
回答No.2

多分、前に質問の続きだと思います。 https://okwave.jp/qa/q9566535.html 前の質問を指定しないと、判りません。 まず、CHARですか、文字には必ずコードが付いていて、それを返します。 COLUMN(AB4) は28なので、38を足すと66です。 CHAR(66)は"B" であり、前の"A" をつなげると"AB"になります。 つまり、この関数は、AB~AG専用で、他の領域には使えません。 多分FとG~L、MとN~S、TとU~Z、AAとAB~AGでやりたいのだと思います。 列、ABに入力した行の上2行から、下2行までを対象にしたいのだと思います。 指定行は、G、N、U、ABに入れるのか、すべての列に入れるのかわかりませんが、すべての列に入れるとしました。 別のシートをワークエリアに使っていいですか? 1つの式にすると、式が複雑になりすぎる為か、#NUM! エラーになります。(理論上は可能なはずですが。) まず、新しいシートを作り、Workという名前にします。 F1 ="R"&Sheet1!F3-2&"C"&COLUMN()&":R"&Sheet1!F3+2&"C"&COLUMN() F2 ="R"&Sheet1!F3-2&"C"&FLOOR(COLUMN()+1,7)-1&":R"&Sheet1!F3+2&"C"&FLOOR(COLUMN()+1,7)-1 AGまでコピペ。 このシート AB4 =SLOPE(INDIRECT(Work!AB1,FALSE),INDIRECT(Work!AB2,FALSE)) 左右へコピペ

参考URL:
https://free.filesend.to/filedn_infoindex?rp=dbb833c04e3fef49f8ad64b9d5bebf6o
bitamin123456
質問者

お礼

引き続き回答ありがとうございます。 理論上は可能でも、エラーになることがあるのですね。存じませんでした。 またワークシートを作っておくテクニックもとても便利だと思いました。いつもなるべく1つのセルに全ての関数を入れたかったのでそうしてしまっていました。別にシートを作ってしまえば邪魔になりませんね。これから使っていきます。

bitamin123456
質問者

補足

前回の質問を指定しておくべきでした。 リンクありがとうございました。

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

>解決策はありますか? 着目点がずれています。 OFFSET関数で基準となる列記号に$マークを付けなければ右にオートフィルコピーしたとき範囲が移動しますので変な小細工(INDIRECT関数)は不要です。 また、CHAR(38)="&"を使っている理由が分かりません。 CHAR(65)="A"との関係をどのように考えていますか?

bitamin123456
質問者

お礼

そうだったのですね。前回それでは動かず、回答ありがとう頂いた関数を利用させて頂いているのですが。 それでもINDIRECTなしでも出来ないか考えてみます。確かにINDIRECTなかったらオートフィルでそのまま使えそうですね。

関連するQ&A