• ベストアンサー

数式中の範囲指定がうまく引き渡させれません

xpで2007のエクセルを使っています 今日久しぶりに配列数式でフォームを作ろうとしたのですが 一部の範囲指定が上手く引き渡されません 引き渡しに障害か出て 正しく配列定数(?)として認識されない部分を indexでくくっても改善されません どうしたものでしょうか?

  • Nouble
  • お礼率91% (1698/1856)

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

  • ベストアンサー
  • end-u
  • ベストアンサー率79% (496/625)
回答No.7

あ、書き忘れました。 >マイクロソフトが理不尽な非公開仕様変更を頻繁に重ねる中で、 >現時点の短い間では、OFFSET内にcolumn を含ませることに問題があると知ることが出来ました、 『現時点の短い間では』というのが何を指しているのか定かでないですが、 『OFFSET内にcolumn を含ませることに問題がある』のは前からじゃないですかね。 少なくともExcel97でも同じ現象ですから。 >【配列数式において、OFFSET関数の引数にROW関数やCOLUMN関数は使えない。】 これはちょっと訂正。強調し過ぎです。 『OFFSET関数の引数にROW関数やCOLUMN関数を使った場合、  配列数式で正しい答えを出してくれないケースもある』...な感じでいいでしょうか。

その他の回答 (6)

  • end-u
  • ベストアンサー率79% (496/625)
回答No.6

私の事は愚者と思って笑い飛ばして頂いて結構ですよ。 あなたがどれほどの回答スキルをお持ちかわかりませんが 700件を超える回答歴をお持ちの方だとは、回答前にプロフィールを確認して知っていました。 最初はあえて断言を避けて、少しのヒントを提示すれば ご自分で解決できるレベルの方かなと思いました。 回答者の立場で参加した事がある方なら、 質問者の方には回答した内容を試してみたのかどうか、試した結果どうだったのか、 質疑の流れの中で応答していく事によって解決につながっていくのは経験済みでしょう? 私の回答に対するあなたの応答にはそれがありません。 最初から本スレッドの流れを何回も読んでみてください。 「鱗」って言ってみれば先入観ですよね。 スキルが高くても、他人の意見を受け容れる素直さや謙虚さが無ければ、 それ以上の成長は難しくなります。 相手がスキルが低かろうが、年少者だろうが、ある1点において自分が学ぶべきものがあれば 真摯に対応すべきではないですか。 ましてあなたは質問者の立場だったんですし。 別に「無知」と決めつけたわけではなく、ただ単に噛み合わなかっただけです。 回答#5のように掻い摘んで記述しなければ、結局理解頂けなかったわけでしょう? まあ、『他人の意見を受け容れる素直さや謙虚さ』 これは私自身にも言える事なので >余りにもこちらを無知と決めつけているかのように伺えましたので、 というあなたが感じた事実は覆らないでしょうから、今後は気をつけるようにします。 >それを見抜けないことこそ最も愚かしい愚者の表れと存じます。 これも見抜けませんでしたので、愚者の称号を謙虚に受け容れます。 なんでそんな爪の話になるのか自体、理解できませんのでやっぱり愚者なんでしょうねえ。 最後に。 >OFFSETもINDEXも揮発性関数なのですね。 昔はそうだったらしいですけど、INDEXは今は違うようですよ。 確認してみてください。 この点は別に結果を教えて頂かなくても結構ですから、これで締め切って頂いて構いません。 返信も要りません。

  • end-u
  • ベストアンサー率79% (496/625)
回答No.5

『参照の引き渡し不具合の解消であること』が目的ですよね? 【配列数式において、OFFSET関数の引数にROW関数やCOLUMN関数は使えない。】 使えないから手法を変えないといけません。 揮発性関数である、重たいOFFSETをそんなに使いたいのであれば COLUMNS関数を使った代案も提示していますから使えば良いでしょう。 >試したりはなさらないのでしょうか? と再度問いかけしたのに結果報告もないとは。 『PF9で局部的に結果を検証した場合意図した答えが得られる』 ここの検証が足りません。 >但し >「PF9での検証時は検証順序を違えてない」 >と しての話で御願いします。 そんな仮定は成り立ちません。 新規シート A1セル:a B1セル:a B2セル:b B3セル:c C1セル:=OFFSET($A$1,COLUMN()-3,0)=$B$1:$B$3 C2セル:=OFFSET($A$1,COLUMNS($A1:C1)-3,0)=$B$1:$B$3 (C2セルに関しては検証の結果の代替式。比較のために提示) C1式[F9]の結果 {#VALUE!;#VALUE!;#VALUE!} C2式[F9]の結果 {TRUE;FALSE;FALSE} 望む結果は{TRUE;FALSE;FALSE}のはず。 C1式 OFFSET($A$1,COLUMN()-3,0) [F9]の結果 {"a"} {}つきの配列が返っている。 C1式 COLUMN()-3 [F9]の結果 {0} {}つきの配列が返っている。 C1式 =OFFSET($A$1,COLUMN()-3,0)=$B$1:$B$3 の COLUMN()-3 を直値に変えてみる。 =OFFSET($A$1,{0},0)=$B$1:$B$3 結果 {#VALUE!;#VALUE!;#VALUE!} =OFFSET($A$1,0,0)=$B$1:$B$3 結果 {TRUE;FALSE;FALSE} どうやらOFFSET関数の引数に配列を渡している事が不具合の原因らしい。 A列で =COLUMN() の式を[F9]確認すると {1} {}つきの配列が返っている。 【配列数式において、OFFSET関数の引数にROW関数やCOLUMN関数は使えない。】 バグなのか仕様なのかはわからないが、 OFFSET($A$1,COLUMN()-3,0) と同じ結果を返す別の関数を使えば良い。 ...が検証の結論。

Nouble
質問者

お礼

以下はいうべき事ではないと思っていたので割愛していました、 申し訳在りません。 実は私は数年前にはこちらでトップクラスの回答者をしておりました、 恐らく他者の方に解答をされるような、 貴方ほどのレベルの方からの質問に対し 更に指南・解答する役割をしていたと思います。 で、 その際には全く問題なく動作していたと記憶している書き方が 今回ブランクを経て、動かなかった為、動揺し、 非公開内部仕様変更の情報を欲し スレを起こしたという経緯があります。 INDEXは敢えてわざと使わなかったとお見知りおき下さい。 使えることは火を見るより明らかと知っていたので 検証しませんでした。 申し訳在りません。 ただこういうことは もう御分かりの通り表すと角を立てるので 書くことを避けたかったのですが、 余りにもこちらを無知と決めつけているかのように伺えましたので、 御心を砕いて頂いた恩に報いたく、 御身のこれからの助けとなればと敢えて申し上げることを 踏み切りました。 人は爪を隠します、 見えている様が全ての能力とは限りませんし、 それを見抜けないことこそ最も愚かしい愚者の表れと存じます。 本当に「お気を害さねば良い」と気が気でならないのですが、… 真摯に他者の苦言を受けて糧と出来る方かが心配でならないのですが、… 貴方がそうでない愚者だった場合は平に御容赦下さい。 あと、 2点感謝を述べさせて頂ければと思います、 1つ目は マイクロソフトが理不尽な非公開仕様変更を頻繁に重ねる中で、 現時点の短い間では、OFFSET内にcolumn を含ませることに問題があると知ることが出来ました、 INDEXを掛けることで対処できるかと思いますが、 全く視点の外に放置していましたので物凄く「目から鱗」感を感じました。 ご指摘感謝致します。 もう1つは 揮発性関数という観念を知らなかったので これについても学ぶことが出来、感激しました。 OFFSETもINDEXも揮発性関数なのですね。 実行スピードを気にしてプログラミングするのは 以前よりしてはいましたが、 揮発性関数と言う新たな開拓すべき余地を見いだせた気がして、 本当に少しではありますが心躍る思いです。 感謝致します。

  • end-u
  • ベストアンサー率79% (496/625)
回答No.4

繰り返しになりますが。 配列数式がうまく結果を返さない場合に、検証して調べる方法として。 ■[数式の検証]では単独の結果しか返さないので使えない。 ■元々の配列数式をいくつかのかたまりに分解して別セルに入力し、それぞれが望む結果を返すか確かめる。 もしくは ■数式バーでいくつかのかたまりごとに選択して[F9]キーで結果を検証する。  (※目視で確認したら[Esc]キーです。[F9]キー結果の配列を確定しろという意味ではありません) 実際の関数の提示があれば、他の回答者の方も検証できるはずです。 提示がなければ自分で調べるしかないです。 >どうしたものやら… だ か ら OFFSET(データシート!$A$1,INT((COLUMN()-1)/2),0,1,1) ここのOFFSETとCOLUMNの組み合わせが問題なので、 INDEX(データシート!$A$1:$A$100,INT((COLUMN()-1)/2)+1) を使えば良いです。 って書いてるんですが、試したりはなさらないのでしょうか? OFFSET(データシート!$A$1,INT((COLUMNS($A1:B1)-1)/2),0,1,1) とか OFFSET(データシート!$A$1,INT((INDEX(COLUMN(),1)-1)/2),0,1,1) でもいいんですけど。 ROW関数やCOLUMN関数は結果が配列になるためOFFSET関数の引数としてその結果である配列を渡すと不具合。

Nouble
質問者

お礼

度重なる来訪 有り難う御座います。 OFFSETはただの参照なのに対して INDEXは別テーブルを内部的に別途作成、保持するので 高負荷が予想されます。 私はペンティアム3を未だに使っていることもあって 極力避けたく思うのです。 また、 このスレの趣旨が参照の引き渡し不具合の解消であることも考えると… 申し訳在りません。 尚、 PF9で局部的に結果を検証した場合 意図した答えが得られるにも関わらず 全てをExcelに任せると意に反する答えを吐く場合は どうすれば宜しいでしょうか? 但し 「PF9での検証時は検証順序を違えてない」 と しての話で御願いします。

  • end-u
  • ベストアンサー率79% (496/625)
回答No.3

>エラーになるので数式の検証を施行させてみたのですが >それによるとSheet1!$B$2:$B$110の部分が >本来は{"現金";"現金";0;0;0;0;0;0;0;0;0;0;0;0…}と為るべきところが >{"現金"}と、要素が1つしか引き渡されていませんでした [数式の検証]では単独の結果しか返さないのではないかと思いますが、違うのでしょうか。 単純な配列数式で試してみてください。 もっとも、Sheet1!$B$2:$B$110 だけ選択して[F9]なら配列が返るはずです。 実際の関数の提示ができないなら、ご自分で各ステップごとに分割して、段階を追ってチェックしていくしかないと思いますが。 全体が見えない中、可能性としては OFFSET(データシート!$A$1,INT((COLUMN()-1)/2),0,1,1)<>INDEX(仕訳入力フォーム!$B$2:$D$110,,3-2*ISODD(COLUMN())) これを INDEX(データシート!$A$1:$A$100,INT((COLUMN()-1)/2)+1)<>INDEX(仕訳入力フォーム!$B$2:$D$110,,3-2*ISODD(COLUMN())) こんな感じで、OFFSETではなくINDEXを使えば良いような。 (..$A$100 は適当です)

Nouble
質問者

お礼

早々におこし頂いていたのも関わらず 連絡が遅れ申し訳在りません 有り難う御座います。 確かに仰るように 配列定数の部分 仕訳入力フォーム!$B$2:$D$110 と、 可変部分 OFFSET(データシート!$A$1,INT((COLUMN()-1)/2) を、各々先にPF9で再計算させてやると {"現金";"現金";0;0;0;0;0;0;0;0;0;0;0;0…} と {"現金"} と、言った風になります。 そこで更に 全体を再計算させると ちゃんとした思惑通りの結果が得られるのですが、 いちいちPF9で再計算させてやらないと 誤った評価がされて 要素が正しく引き渡されなくなるのです。 で、通常の計算結果も これに準じたものになってしまします。 どうしたものやら…

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

No.1です! たびたびごめんなさい。 私の認識不足かもしれませんが・・・ 配列数式にするのであれば、 =IF(OFFSET(Sheet3!$A$1,INT((ROW()-1)/2),0,1,1)<>Sheet1!$B$2:$B$110,ROW($1:$109)) としてみて、Shift+Ctrl+Enterキーで確定でもやはりエラーになるでしょうか? 根本的な解決法にはならないかもしれませんが、 この程度でごめんなさいね。m(__)m

Nouble
質問者

お礼

再度の御来訪に感謝します、 こちらの苦境を察した御心遣いがこの身に染みる思いです 有り難う御座います。 ところで、 先の配列は =if(… … …SMALL((OFFSET(データシート!$A$1,INT((COLUMN()-1)/2),0,1,1)<>INDEX(仕訳入力フォーム!$B$2:$D$110,,3-2*ISODD(COLUMN())))*1000+ROW($A$1:$A$109),ROW(B1))… … …) と言ったような長文関数プログラミングのコアを為す部分で この部位の正常出力ありきなものなので 配列数式として確定させてどうと為るものではないように思えるのです 後ろ足で砂を掛けるようで心苦しいのですが、 どうぞ御容赦下さい

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

こんばんは! 実際にどのような数式になっているのか判らないので あくまで憶測ですが・・・ 配列数式の場合 INDEX等の範囲指定の行数と他の数式の行数が一致しないとエラーになることが多いと思います。 通常1行目を見出し行としていることがほとんどだと思いますので、 INDEX等の範囲指定の領域は2行目からになると思います。 (列に関しても同様のことが言えます) 仮に ={INDEX(A2:A100,SMALL(IF($A$2:$A$100=○○,ROW($A$1:$A$99),ROW(A1)))} のような数式ですと、 ROW($A$1:$A$99) の部分を ROW($A$1:$A$100) にしてしまうと、 エラーになったり、ROW($A$2:$A$100) にすると1行ずれてします。 他の原因の可能性もありますので、 ちゃんとした回答になっていないかもしれません。 この程度でごめんなさいね。m(__)m

Nouble
質問者

お礼

早速の御来訪に感謝致します 実際の式ですが =(OFFSET(Sheet3!$A$1,INT((COLUMN()-1)/2),0,1,1)<>Sheet1!$B$2:$B$110) と言う単純なものです エラーになるので数式の検証を施行させてみたのですが それによるとSheet1!$B$2:$B$110の部分が 本来は{"現金";"現金";0;0;0;0;0;0;0;0;0;0;0;0…}と為るべきところが {"現金"}と、要素が1つしか引き渡されていませんでした PF9でOFFSETの部分を確定して定数化してやれば上手く行くのですが… なにもしないとVALUE!の配列が帰ってきます とほほ

関連するQ&A

  • 数式を使ったセルの範囲指定について(excel 2003)

    数式を使ったセルの範囲指定について(excel 2003)  こんにちは     タイトルの意味が解りづらく申し訳ありません。 excelで数式の結果を用いてセルの範囲指定を行いたいのですが、 範囲指定方法についてご存知の方いらっしゃれば、ご教授頂ければ と思います。  例) =C(E14+15)   (←実際にはうまくいきませんでした。) のようにセルの指定をする際、数式の結果を反映させたいと 考えています。  よろしくお願い致します。

  • エクセル 数式から推測して範囲指定方法を教えて下さい

    エクセル 数式から推測して範囲指定方法を教えて下さい SERIES(Sheet1!$AJ$17,Sheet1!$A$18:$A$1205,Sheet1!$AJ$18:$AJ$1205,1) どこをどのような順序でどのように範囲指定すれば上記数式のグラフが書けるでしょうか? エクセル初心者です。2007です。

  • EXCELの呼び方範囲指定・数式・・・

    EXCEL入門を人様に講義することになりました。 用語も出来るだけ正しいものにしたいと思いますので、下記のことお尋ねします。 1)リボンの中にあるアイコンは  ツールアイコン? コマンドアイコン? 2)セルに入力する=で始まる文字列は 計算式? 数式? 3)処理の対象を 範囲指定? 範囲選択? 

  • Excelのマクロを使わず、数式内のセル指定範囲をダイナミックにすることはできますか?

    Excelで数式内に範囲を指定するときに、先頭と最後尾のセル番地を指定しますが、他のセルで指定した数値を指定したセル番地の行数に指定することはできますか? 例えば、以下のようなサンプルにおいて A B C D 1 10 2 4 2 32 3 42 4 20 5 17 6 =sum(A2:A4) C1番地に2、D1番地に4を入力すると自動的に A6番地でA2~A4の範囲を指定して足し算してくれるようなことをマクロを使わずに実現できるでしょうか?

  • 範囲指定した文字の大きさ

    「ウインドウズXP」「プリンター エプソンPM-A700」を使用しております インタ-ネット上の文章の一部を範囲指定して 用紙のサイズに合わせるべく文字を大きくして 印刷したいのですが思うようにいきません 以前は ツールーバーにパーセンテージが出て 自由に文字の大きさの変更が出来たのですが・・・ プレビューで 範囲指定を 確認したいのですが 画面そのままが出て 指定した部分が出ません エクセル ワードの時も同様です   よろしくお願いいたします

  • エクセルでセルの値を数式の範囲として使うには?

    タイトル通りなのですが、エクセルでセルの値を数式中で範囲として使うにはどうすればよいのでしょうか? 例えばA1セルに「1」という値が入っており、B2セルに「10」という値が入っているとします。この時、数式中で、「A1」と「B2」を用いて、「E1からE10まで」を指定することは可能でしょうか。可能でしたらどのような数式を組めば良いのでしょうか? よろしくお願いします。

  • エクセルの範囲指定を規則的にずらしたいのですが良い方法はありますか?

    エクセルの範囲指定を規則的にずらしたいのですが良い方法はありますか? 今、悩んでいるのはこんな感じです。=max(60;100)の次の範囲が(160;200)、(260;300)となるように100ずつずらして範囲指定がなされるにはどのような方法がありますか?最初の数式に条件を加えてコピーで作成したいのですが・・・・。どなたかご教授お願いします!

  • エクセル 範囲指定ができない

    お世話になります。 WINDOWS XP(SP2)/エクセル2002(SP3)を利用しております。範囲指定をする場合、通常は始点をクリック/指定してSHIFTを押して終点をクリック/指定して範囲指定をしております。最近、始点の指定後、マウスを動かす方向へ勝手に範囲が広がり、その後、何の動作もできなくなります。その都度、PCを再起動してエクセルで作業しなければなりません。 どうしたら、そのような状況を解除できるのでしょうか。

  • 配列数式で行を増やすためには

    シート1の一覧表からシート2の配列数式の入った表へある条件のものを抽出する作業を行っています。 シート2で行を増やそうと思い、配列数式の入ったセルを選択→解除→行を増やす→再度配列数式へ、という作業を行いました。 しかし、#N/Aというエラー表示がでます。シート1の表と指定範囲は変わっていないのにエラー表示はなぜ出るのでしょうか。

  • 印刷範囲指定の点線について

    助けてください。 印刷範囲指定の点線の位置が変なんです。 (プレビューの後にホームに戻ると表示されている点線) というのも、会社で使用するエクセルには、あらかじめ数式などが入れてあり、入力すれば自動で答えが出るようになっています。 更に1枚に41行となっています。 今日、同じように処理をして出力したところ、2枚目の先頭が1枚目に入っていたりと、体裁が崩れていました。 そこで、行数を確認したところ、47行になっていました。 変なところを押したつもりはないのですが、誤ってボタンを押したかもしれません。 (エンターを押すつもりが、バックスペースというように) 範囲指定の点線を元通り(最初の設定の41行)に戻すには、どうしたらいいのでしょうか。 分からないままいじって、更に変なことにしたくありません。 もう一つ付け加えるなら、職場でエクセルが分かるのは私一人ですので、聞くこともできません。 助けてほしいです。

専門家に質問してみよう