• ベストアンサー

配列数式をプルダウンコピーすると、ファイルの保存ができません。

WinME→Excel2000Proです。  今M列に電話番号があります。行数は1000行程度です。  この電話番号を固定電話と携帯電話に分けるため、N3及びO3にそれぞれ ={IF(OR(LEFT($M3,3)={"070","080","090"}),"",$M3)} ={IF(OR(LEFT($M3,3)={"070","080","090"}),$M3,"")} と配列数式で入力しました。答は正しく出ました。  しかし、これを下行にCopy&pasteしようとすると「配列の一部を変更できません」の画面が出てコピーできないので、プルダウンコピーで一挙に最下行までプルダウンしたら、 ※「Excelが原因でExcelEXEにエラーが発生しました。Excelは終了します。問題が解決しない場合はコンピューターを再起動してください。」 の画面が出ましたので仕方なく再起動、今度はプルダウンコピーを恐る恐る少しずつ行い、その都度上書き保存のボタンをクリックし、途中何回か前記※の画面が出ては再起動と、かれこれ10数回繰り返した挙げ句、やっとB列だけは式のコピーが完了しました。  次にC列でも同じ作業を繰り返し、何とか200行目ぐらいまではコピーできたのですが、それから下行は上書き保存ボタンをクリックする途端に※の画面でダウン、それ以上は全くコピーできなくなりました。仕方なく、O3の計算式を =IF(OR(LEFT($M3,3)="070",LEFT($M3,3)="080",LEFT($M3,3)="090"),$M3,"") と改めて最下行までコピーしたら、今度は難なくできました。  そこでお尋ねですが、一体配列数式というのは、こんなにシステムの不安定を招くのでしょうか。  因みにファイルには郵政公社からダウンローどした関東地方の郵便番号表があり、郵便番号ウイザードの非現行をVloolupでチェックするため使っていてファイルサイズは5メガぐらいとなっておりますが、それも原因の一つでしょうか。よろしくお願いします。

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

  • ベストアンサー
  • shiotan99
  • ベストアンサー率68% (140/203)
回答No.3

こんにちは~ 回答ではありませんが、ちょっと気になったので‥ =IF(OR(LEFT($M3,3)={"070","080","090"}),"",$M3) =IF(OR(LEFT($M3,3)={"070","080","090"}),$M3,"") ↑の数式を入力後、もしかして Ctrl+Shift+Enter で確定していませんか? この式ならフツーに Enterで確定、でいいと思うのですが‥。 ◆ それと、見覚えのあるお名前だと思ったのですが、 《配列数式の答を計算式入力セルに出す方法は?》を質問された方ですよね? http://oshiete1.goo.ne.jp/kotaeru.php3?q=1684731 この質問のやりとりを見る限り、FREQUENCY を使った配列数式は断念されたように思えるのですが、結局どうなったのでしょうか? 上記質問に即して説明しますと、C2セルに =FREQUENCY($A$2:$A$8,$B$2:$B$6) と入れて、Ctrl+Shift+Enterで確定後、下にフィルコピーすると、結果はすべて 0 になりますよ。これだと C2:C6まですべて 20点以下の人数が返るからです。 ★ FREQUENCY を使った配列数式の場合 C2:C6をマウスでドラッグして選択した上で、 =FREQUENCY(A2:A8,B2:B6) と入力し( 絶対参照にする必要はありません )、Ctrl+Shift+Enterで確定すれば、0、2、3、1、1 と正しい結果が返ります。 または、C2に =FREQUENCY(A2:A8,B2:B6) と入れて、フツーにEnterで確定後、C6までフィルコピー そのままの状態( C2:C6が選択された状態 )で、F2キーを押したあと、Ctrl+Shift+Enterで確定してもかまいません。 数式を削除する場合も、C2:C6を選択してから DELETEキーでまとめて削除となります。( ←1つのセルだけ削除しようとしてもエラーになります ) そんなことはわかっとるっ!‥ということでしたらゴメンナサイ。 それと、《配列数式》に関しては参考URLに詳しく解説されていますのでよろしければご一読ください。 FREQUENCY を使った配列数式は、《第6回 配列を扱う関数の利用》に説明があります。 そんなものはとっくに読んでおるわいっ!‥ということでしたらまたまたゴメンナサイ。

参考URL:
http://pc21.nikkeibp.co.jp/special/hr/
doubt34
質問者

お礼

 ご投稿ありがとうございます。  実は最初ご掲示同様の式を「{」「}」も手入力し、そのままEnterしてみました。  ところがその式を下行にCopy&paste、又はプルダウンしてみると、N列はM列のデータがそのまま全部入り、O列は全部空白になって求める答が出なかったのです。  それでやはりShift,Ctrl,Enterしなけれればならないのかなと思ってやった結果が質問のとおりでした。  今回ご投稿を拝見してまさかと思い、ご掲示の式をCopy&pasteして見たところ、何とちゃんとできるじゃありませんか。何か狐につままれたような気がして不思議でなりません。  最初何かが間違っていたのでしょう。ともあれありがとうございました。  FREQUENCYについては、最終的に =INDEX(FREQUENCY($A$2:$A$8,$B$2:$B$7),ROW(A1),1) の式で答を出しておりますが、なるほど仰るとおりにすれば答が出ることが分かりました。  尤も、前段の >C2:C6をマウスでドラッグして選択した上で、「=FREQUENCY(A2:A8,B2:B6)」と入力し、Ctrl+Shift+Enterで確定する方法よりも、後段の >C2に「=FREQUENCY(A2:A8,B2:B6) 」と入れて、Enterで確定後、C6までフィルコピーそのままの状態で、F2キーを押したあと、Ctrl+Shift+Enterで確定する方法が、C3:C6に式がそのまま残り、A列のデータが変わった場合、それに対応して答も変化するので、ベターのような気がしますが、いずれにしても、可能なことが分かったことは私にとって大きな収穫でした。  ありがとうございました。深く感謝いたします。

その他の回答 (2)

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

少数行の例では正しく結果が出るようです。行数が増えるとメモリが沢山必要になり、その影響がシステム全体に影響するのだと考えざるを得ないと思います。メモリとのスワップのディスク読み書きが頻繁に行われて、タイムアウトエラーなどが起こるのかもしれません(推測)。 あるエクセルの本に、「配列は、個々のデータを入力する場合に比べてメモリを多く消費しますが・・」とありました。 3つ(070,080,090)ぐらいならIF文とORをネストして通常の関数式にできませんでしょうか。その場合は改善されませんでしょうか。 =IF(OR(MID(M3,1,3)="070",MID(M3,1,3)="080",MID(M3,1,3)="090"),M3,"")

doubt34
質問者

お礼

いつもながら早速のご回答、ありがとうございます。 >少数行の例では正しく結果が出るようです。  そうです。2列合計約2,000行中、1,200行はプルダウンコピーができたわけで、そこから先バタッとでエラーになるという、極めて不可解な現象が現れたため、その原因と回避策を知りたいというのが本音でした。  作業自体は、質問に書いていたように(お示しの数式にほぼ似た) =IF(OR(LEFT($M3,3)="070",LEFT($M3,3)="080",LEFT($M3,3)="090"),$M3,"") で済んでいたのですが、配列数式の勉強のため試用した数式の結果が何ともはや、ということでした。  やはり何らかのメモリーエラーでしょうね。  それに前回も質問したように私のパソコンもハングアップなどエラー頻発で、そろそろ買い換え時かな、という気がしております。  ともあれご回答心から感謝申し上げます。 

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.1

こんばんは。 [XL2000]元のセルに配列数式を貼り付けられない http://support.microsoft.com/default.aspx?scid=kb;ja;213568 >こんなにシステムの不安定を招くのでしょうか。 全ての配列数式ではありませんが、配列数式の一部で、配列の確定(Ctrl+Shift+Enter)で、式を貼り付けてあるワークシート上にメモリ枠を取得しているので、配列数式だけを取り出して、そのまま別のシートに入れようすとる、メモリエラーを起こすのではないか、と思います。 なお、配列確定をしない場合、このような式が考えられます。 =IF(ISERROR(MATCH(LEFT($M3,3),{"","070","080","090"},0)),$M3,"")

doubt34
質問者

お礼

 いつもながら懇切なご即答、誠にありがとうございます。  早速ですが、末尾の「=IF(ISERROR(MATCH………」の方はエラーも出なくてコピー&保存も可能でした。  しかし、URLで示されていた回避策の方は試してみましたが、行の相対参照が成立せず、うまくいきませんでした。いずれにしても途中までは式のコピーができるということは、やはりメモリの問題かな、という気がします。  そもそもこの程度の課題で配列数式を使うまでもないことは当然で、答え自体は私の質問中にも書いていたように「=IF(OR(LEFT………」でOKだった訳ですが、先般来教えて頂いた配列数式の応用の意味もあって試しに使ってみたところ、途中まではできるのに後がエラーになるという、極めて不可思議な現象が現れたため、もしかするとWendy02さんのご教示がいただけるのではないかと思い、質問したところです。  メモリーエラーというのは、単純にファイル容量の大小で起こるのではないというご示唆をいただき、勉強になりました。  ご回答心から感謝申し上げます。ありがとうございました。

関連するQ&A

  • 配列数式って何ですか??

    きのうは、ある列において偶数行だけの合計を求めたいときの計算式を教えてもらいました。 数式は以下のようになるそうです。 {=SUM(IF(MOD(ROW(A1:A10),2)=0,A1:A10,""))} (ありがとうございました。) しかし、そこで出てきた「配列数式」というものが何なのか分かりません。上では{}でくくられた部分だという事はわかるのですが、どうして一番初めと終わりに{}があるのか、たとえば比較として、上において{}がない数式ではどのような計算がされてしまうのでしょうか。 また、{}の位置がSUMの後にあるとき、 =SUM{(IF(MOD(ROW(A1:A10),2)=0,A1:A10,""))} なんかはどんな計算をしていることになるのでしょうか。 配列数式の計算手順がイメージできないのです。 どなたか教えて下さい。

  • 配列数式での平均値

    こんにちは。 今、エクセルで配列数式を使って平均値を出す作業をしています。 列Aには男女別を示す1、2が入力されており、 列B以降にはいろいろなデータが入っています。 それらデータにおける男女別の平均値を出したいので 配列数式を使って求めるまでは良かったのですが、 どうやら、列B以降の空欄になっているセルも 0として計算されてしまっているようなのです。 (普通のaverageと同様に)空欄を数に入れないで計算させるには どのようにしたらよいのでしょうか? ちなみに今使っている配列数式は、 {=average(if(A1:A10=1,B:B10,""))} です。

  • 配列数式がうまくいきません

    現在、部品の管理をする為に配列数式をたてて行っています。 集計表にのセルに以下のような式が入っています。 {=SUM(IF($M$10:$M$500=200711,IF($S$10:$S$500={10,11},$T$10:$T$500,0)))} M列:客先の希望納期(2007年11月) S列:こちらの納品月(10月、11月) T列:納入数量 今は自分で行っておりますので年が改まった場合などに式(希望納期月)を書き換えておりますが、担当者が変わると配列数式を知らない方が行うこともありえるので、あるセル(A1)を参照する形で式を以下のように変更してみました。 このようにすればA1のセルの部分を変更するだけでいけると考えました。 {=SUM(IF($M$10:$M$500=VALUE(A1)&11,IF($S$10:$S$500={10,11},$T$10:$T$500,0)))} しかしながら、この式ではうまく行きません。 この計算式のどこがまずいのでしょうか。 よろしくお願いいたします。

  • 配列数式のコピーが、うまくできません

    配列数式で、式のコピーができなくなりました。 同じ形式で以前はできていたのに、今回やってみたところ どうしてもできません。どこがおかしいのか?以前できたと思っていたのは勘違いだったのか?ご存知の方いらっしゃいましたら、ご教授くださいm(_ _)m Aの列に1月4日を5つ、1月5日を4つ、1月6日を3つ表示し、1月4日の個数が何個であるかを、 SUM(I($A$1:$A$12=C1,1,""))の式で表示させ、5の回答を得ました。1月5日・1月6日の欄に、上記の式をコピー・ペーストしたところ、どちらも5の回答になってしまいました。 それぞれコピーされた式に対して、「SHIFT+CTRL+ENTER」の処理をすれば、正しい答えである、4・3の回答を出してきます。 以前は同様のやりかたをして、コピー・ペーストを行っただけで正しい数値がでたと思うのですが、何がおかしいのでしょうか?それとも、個々に再度入力しなければいけないのでしょうか?

  • 配列数式について教えてください

    ここでエクセルでの文字列の検索方法をさがしていたらさきほど、ちょうど良くこのような配列数式をみつけました。 =IF(A1="","",MIN(IF(ISNA(MATCH("*"&$H$1:$H$9,A1,0)),10,$I$1:$I$9))) A1セルに、H1からH9の表にあるどれかの文字列を含んだ文字列をいれると対応するI1からI9の表の値を表示するものです。 使われているMINやISNAやMATCH関数はわかるつもりですが、組み合わせるとなんでこんなことができるのか、ぜんぜんわかりません。どなたか解説していただけないでしょうか? http://oshiete1.goo.ne.jp/kotaeru.php3?q=653775

  • 3千行以上あるExcel表の一つの列を配列数式に

    3千全行以上あるExcel表の一つの列を配列数式にしたいです。 {=SUM(IF(A:A="みかん",B:B,))}のようなやつ。 色々試しましたが、配列数式を使わないと出したい値を出せませんでした。 3千行あるのですが、めちゃくちゃ重くなります。 重くならずに済む方法はありますでしょうか。 やはり配列数式を使うとしょうがないのでしょうか。

  • excelの、ある数式内の{}の意味合いが知りたい

    あるexcelの文字列関数の練習問題として、住所内の都道府県名のみを抽出して表示させる問題がありました。 式はいろいろあると思いますが、いくつかある答えの中のどんな住所でも都道府県名を抽出できる数式として、こんな数式がありました。 次の通りです。 答え 「=IF(OR(MID(A1,3,1)={"都","道","府","県"}),LEFT(A1,3),LEFT(A1,4))」 ↓ 結果 セルA1「(北海道札幌市X-X-X)」であれば「北海道」を表示 ここで気になったのがOR関数内の{}(中括弧)の意味合いです。 OR関数のヘルプには書いてませんでしたし、()で代用もできない、配列定数・数式のようにも見えません。 自分でも色々調べてみたのですが、結局よくわかりませんでした。 一番キレイに見えた数式でしたので使いこなせればと思うのですが、{}の意味合いだけいまいちわからず。特に()で代用できない理由がよく分からずすっきりしませんでしたので、教えていただければ助かります。 ついでといってはなんですが、もっとキレイ?な式がありましたら、教えていただけると参考になります。 よろしくお願いいたします。

  • 配列数式の怪

    お世話になります。 配列数式の入力方法にて解せない部分がありましたのでご教示願います。 ソフトウェア開発の工数見積をしようと思って、Excel2003で添付の様な WBSを作りました。 ここで、機能1~3を実装するか否かをD2~F2に○で指定し、 各機能毎に必要な作業項目をD3~F6でマッピングしました。 ※5は作業対象の工数合計で、 =SUMIF(C3:C6,"○",B3:B6) になっています。 (実際には、機能、作業項目共に数十項目のマトリクスになってます) 各作業項目1~4が見積対象になるかどうかを実装する機能に従って 表示しようと思って、C3~C6に配列数式を使って ※1:{=IF(SUM(($D$2:$F$2="○")*(D3:F3="○"))>0,"○","")} ※2:{=IF(SUM(($D$2:$F$2="○")*(D4:F4="○"))>0,"○","")} ※3:{=IF(SUM(($D$2:$F$2="○")*(D5:F5="○"))>0,"○","")} ※4:{=IF(SUM(($D$2:$F$2="○")*(D6:F6="○"))>0,"○","")} と入力しようと思いましたが、どう入力しても下記の様に行番号を可変に したいところが全て同じ行番号になってしまいます。(D3:F3) ※1:{=IF(SUM(($D$2:$F$2="○")*(D3:F3="○"))>0,"○","")} ※2:{=IF(SUM(($D$2:$F$2="○")*(D3:F3="○"))>0,"○","")} ※3:{=IF(SUM(($D$2:$F$2="○")*(D3:F3="○"))>0,"○","")} ※4:{=IF(SUM(($D$2:$F$2="○")*(D3:F3="○"))>0,"○","")} ここで、例えば※2のD3:F3だけをD4:F4に変えても他の行も全てD4:F4に 変わってしまいます。 いろいろと試行錯誤した結果、一旦全て削除してまっさらな状態から ※1に{=IF(SUM(($D$2:$F$2="○")*(D3:F3="○"))>0,"○","")} を入力した後に1行開けて※3にコピーしたところ、無事に D3:F3がD5:F5に変わりました。 そこで、その後に ※2に{=IF(SUM(($D$2:$F$2="○")*(D4:F4="○"))>0,"○","")} を入力した後に※4にコピーして目的を達成できました。 (実際には、奇数行、偶数行でそれぞれ数十行ずつのコピーをしました) これは、配列数式入力時の仕様なのでしょうか? また、本来はどの様に入力するのが正解なのでしょうか?

  • 3回別々にする、数式コピーを 1回で済ましたい。

    3回別々にする、数式コピーを 1回で済ましたい。  お世話になります。 マイクロソフト エクセル2010で、  平均して 126列の列。行が平均30行の、表を作成しています。  単純な、算数の式を <数式コピー>を応用してで使いたいのですが、 例えば、A4/A5を数式コピーの絶対参照にして、 (小数点以下2桁の正の数字を打ち込まれた)行の 126列全部を書き直したい。 数値に、第5行目に、(1) 0や、(2)Tr;Trace超微量と (3)-;測定していない or 測定不可の列が 散在して混じっています。-は 負ではありません。 (他の 行・列の数値も、似通ったものです。)そんな別々の表が 幾つもあり、 A4/A5の値は、表によって異なります。例えば100/126等です。 その際、F4で/F5を 絶対参照にしたり、 (2)を IF(AB5="Tr","Tr",F4/F5) にし、 (3)をIF(AB5="-","-",F4/F5)と、3回、1行に計算し直し1行が完成します。  それを、1つのまとまった式にする事は可能と思いますが、どうしたら良いかご教示を。 2012/4/25

  • 配列関数を教えてください

    セル"O1"(オー列1行目)に =IF(OR(LEFT(C1,4)="0004",LEFT(C1,4)="0010",LEFT(C1,4)="0044",LEFT(C1,4)="0061"),"OK","") と入れています。 C列の先頭4バイトが 0004、0010、0044、0061 の時に「OK」を返したいのです。 今後、この判定数字が増えたり減ったりするので どこかに置いておいてそこを参照する形式に変えたいです。 配列を使えば何とかなると思うのですが、 どうすればよいのですか? 置く場所は P2以降の2行目です。 P2に0004 Q2に0010 R2に0044 S2に0061 ・ ・ ・ Z2 といった具合です Z2 まで入ることを前提に教えてください。

専門家に質問してみよう