みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

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

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メガぐらいとなっておりますが、それも原因の一つでしょうか。よろしくお願いします。

投稿日時 - 2005-10-28 22:21:48

QNo.1742303

暇なときに回答ください

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

こんにちは~

回答ではありませんが、ちょっと気になったので‥

=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/

投稿日時 - 2005-10-29 02:43:28

お礼

 ご投稿ありがとうございます。
 実は最初ご掲示同様の式を「{」「}」も手入力し、そのまま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列のデータが変わった場合、それに対応して答も変化するので、ベターのような気がしますが、いずれにしても、可能なことが分かったことは私にとって大きな収穫でした。
 ありがとうございました。深く感謝いたします。

投稿日時 - 2005-10-29 05:06:57

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.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,"")

投稿日時 - 2005-10-28 23:17:00

お礼

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

投稿日時 - 2005-10-29 02:57:42

ANo.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,"")

投稿日時 - 2005-10-28 23:01:27

お礼

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

投稿日時 - 2005-10-29 02:32:58

あなたにオススメの質問