他人の作った関数のネスト地獄から脱出するには?

このQ&Aのポイント
  • 他人が作った「Excelのお化け」を修正するコツがあれば、是非ともご教示いただけると幸いです。
  • 人事異動でExcel関数を多用する部門へ移った者です。関数が複雑にネストしているため、途方に暮れております。
  • 業務の見直しをするにあたり、当該Excelシートも見直すこととなり四苦八苦しております。
回答を見る
  • ベストアンサー

他人の作った関数のネスト地獄から脱出するには?

お世話になります。 人事異動でExcel関数を多用する部門へ移った者です。 とは申しつつも、既に出来上がったExcelシートに数字を 埋め込めば、自動計算されるだけなので、これまでは アタマをそんなに使う必要なかったようです。 しかし、業務の見直しをするにあたり、当該Excelシートも 見直すこととなり四苦八苦しております。と言うのも 前述のExcelシートを作った方はとっくに退社されており 解読するにも、関数が複雑にネストしているため、途方に 暮れております。 そこで、他人が作った「Excelのお化け」を修正するコツが あれば、是非ともご教示いただけると幸いです。 よろしくお願いいたします。

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

  • ベストアンサー
  • msMike
  • ベストアンサー率20% (363/1775)
回答No.1

「関数が複雑にネストしている」と確かに「解読する」のが困難なのは当然のことです。そのために(解読できないから)「Excelのお化け」に見えるのです。 複雑な計算でも作業列を多く設ければ各作業列内の関数は解読容易な簡単なものになるのはご承知のとおり。だから、何等かの理由や事情で作業列を極力少なくすればするほど関数は「複雑にネストしている」肥大なお化け状態になります。 私なら、深い位置にあるネストから1列ずつ作業列に取り出して行くでしょう。そうすると何をやっていたのかが見えてくるはず。修正するのはそれからです。ひょっとしたら、修正する必要のない見事なものかも知れませんよ。 貴方は作業列の多いもののままにしておいた方が、今度は貴方が退社した後の後任者が困らなくて済むかもネ。

retweet
質問者

お礼

アドバイスありがとうございます。 おっしゃる様に深い位置にある関数から徐々に解きほぐすのが 回り道かもしれませんが、お化け退治には最適化もしれませんね。 もちろん、実はお化けどころではなく、大傑作なのかもしませんが。 ありがとうございました。

その他の回答 (2)

  • Nouble
  • ベストアンサー率18% (330/1783)
回答No.3

エクセルの 計算式内では 改行は 無視されます 恐らくは ソフトの知識を お持ち だと、思います ので、 他言語同様に 改行して ネスト構造を 読み易く すれば 各々の関数の範囲 が、解り易くなる ので 大分楽になる と、思います 後は 配列数式 其以外は 他セルの参照で 代用できる ので 内側から順に 他セルに移し 移した部分を 移動先のセル参照にして 整理すれば かなりスッキリします 理解も進みます よ 解ったら 戻せばいい の、ですから 如何でしょうか?

retweet
質問者

お礼

ご回答ありがとうございます。 前担当者が作った関数式をエディタで分析しております。 他セルの参照も考えましたが、かえってスパゲッティ状態に なりそうなので、フローチャートとエディタで地道に 紐解いている最中です。 アドバイスありがとうございました。

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

>他人の作った関数のネスト地獄から脱出するには? >業務の見直しをするにあたり、当該Excelシートも見直すこととなり四苦八苦しております。 結果を得るためにデータをどのように処理する必要があるかを論理的に見直す必要があります。 「業務の見直し」とはExcelシートの数式を組み立てる論理を見直すことなので、数式を組み立てた担当者の論理を解読するまでも無く、元データをどのように処理しなければならないかに着目すれば良いでしょう。 とは言うものの、現在の数式の正当性を評価するには数式の論理を整理する必要があるでしょう。 その手順はネストの外側から順に引数に使われている数式を抜き出して論理を評価すれば良いでしょう。 条件分岐があるときはフローチャートを書いて処理の流れを把握することをお勧めします。 模擬データと実際の数式を提示して頂ければ具体的なアドバイスができると思います。 本来であればあなたにできないことは社内の有識者または外部のコンサルタントに依頼すべきことのように思います。 見直して数式を変更したことにより、重大な欠陥が生じたときはあなたの責任になりますので、慎重に取り組んでください。 修正する前の状態は必ずバックアップするようにしてください。 修正または新規シートに置き換えする前に実証テストを繰り返し実行して目的に合うことを検証してください。

retweet
質問者

お礼

ご回答ありがとうございます。 ご提案いただいた通り、フローチャートを作り始めています。 そもそも、業務の見直し自体に完成形はないとは思っていますので もっとマクロな視点で仕事に向かいたいと考えております。 リスクヘッジのご提案もいただき、あわせて感謝申し上げます。 ありがとうございました。

関連するQ&A

  • excelの関数について

    excelの関数について sheet1、sheet2の二つのシートがあり sheet1のA1セルにsheet2のA1セルのデータを呼び出すために、 次のような式をsheet1のA1セルに入力した =sheet2!A1 通常だと表示が変更されるかと思いますが、表示が変更されず・・・ dataを呼び出すことができません。 四苦八苦して「上書き保存」ボタンを押すことで表示が更新されて呼び出すことが出来ることが 確認できました。 これはexcelファイルの破損でしょうか? もしくは、excelファイルの設定の問題でしょうか? 誰か教えてください

  • EXCEL 関数 不等号のリンク変更はできますか?

    こんにちは。 EXCEL 関数 不等号についての質問です。 =IF(F10>=70,"合格","") という式をシートのセルに設定しました。 この式の中の不等号部分を別のシートのセルから > に変更し、 式自体を機能させるにはどうすればできるのでしょうか? それともそもそもできないのでしょうか? 実際、四苦八苦しながら"&"とか使ってしてみたのですが、 結果が得られません。 お解かりの方いらっしゃいましたら、ご教授お願いします。 よろしくお願いします。

  • 条件付で空白セルの個数を求めるには?

    Excel2003です。 下の表(B3:D10)から、荷姿"A"だけの空白セル(黄色)の個数を求めるには どうしたらいいのでしょうか? 個人的には、COUNTBLANK関数使って求めるのでは?と 四苦八苦しているのですが、良い方法ありましたらアドバイス よろしくお願いします。

  • EXCEL 参照セルを2列ずらしたいです

    関数など調べてみたのですが、うまくできずに投稿しました。 現在WindowsVistaでEXCEL2007を用いています。 シート1枚目には A1・・D1・・G1・・と2列おきにデータが並んでいます。 このデータをシート2枚目の A1 A2 A3 に次々と反映させたいと思っています。 反映させたいデータが途方もない数なので、 関数などで早く処理できる方法がありましたら、 ぜひ教えてください。 よろしくお願いいたします。

  • SUMPRODUCT関数について

    よろしくお願いいたします。EXCEL2013使用です。 上の画像、出張者リスト(名前、出発日、帰国日)から、別のシートに一目でわかる一覧表を作りたいのです。例えば、11/06-11/15まで出張だったとしたら、下の表で6日から15日までを黄色背景にする、等です。 下の表で、日付セルの下の各セルに次のような関数を入力しましたがうまく動作しません。 =SUMPRODUCT((リスト!$B$2:$B$300=$A4)*(INT(リスト!$C$2:$C$300)>=INT(B$2))*(INT(リスト!$D$2:$D$300)<=INT(B$2))) ※下の画像は12月ですが、その上に11月があり、上記関数内のセルのアドレスが間違っている訳ではありません。 SUMPRODUCT関数は大変便利なのでこれまで多用してきましたが、今回は完全に頓挫してしまいました。 どこがいけないのでしょうか。おわかりの方、是非ご教示下さいませ。 どうぞよろしくお願いいたします。

  • 特定のシートだけ関数入力を除外したい

    windows7 Excel2007でマクロ作成中の初心者です。 30枚のシートがあるブックがあります。 以下のコードで処理を行っていました。 Sub 請求書入力() Const EXCEPT_NAME = "表紙 経理 一覧  部門" Application.ScreenUpdating = False ChDrive ThisWorkbook.Path ChDir ThisWorkbook.Path Dim list, SheetName For Each SheetName In ActiveWorkbook.Worksheets If InStr(EXCEPT_NAME, SheetName.Name) = 0 Then Sheets(SheetName.Name).Activate Call 各シートに同じ関数を入れる End If Next End Sub しかし、上のシートの前にある2枚のシートだけ関数を入れないようにしたいです。この2枚だけはシート名が可変のため除外シートに追加できません。 また、それより、前のシートはシート数が可変で15から20枚あります。 そのためには、どういうコードにしたらよろしいでしょうか。

  • Excel関数

    Excel関数 表1 お菓子類販売数  A列  B列   C列  D列  E列・・・・Q列 1 メーカー名 商品名 部門  1月 2月・・・・合計 2 つばめ すっきり ジュース 350 250・・・・4500 3 つばめ まろやか ガム 214 205・・・・2840 4 つばめ げんき ガム 247 198・・・・3120 5 つばめ いちご ジュース 360 380・・・・5240 6 すずめ みかん ジュース 320 215・・・・4162 7 すずめ あまあま ジュース 284 178・・・・3968 8 すずめ しゃき ガム 183 216・・・・2963 9 すずめ グリーン ガム 169 209・・・・2834 10 はと れもん ジュース 217 301・・・・4295 11 はと かるい ガム 238 240・・・・3657 12 はと すうすう ガム 199 236・・・・3102 上記の表がシート1にあります。 そして、シート2に下記の2つの表を作成しなければなりません。 表2 部門別販売数No.1 A列 B列  C列 D列 1部門名 メーカー名 商品名 合計 2ジュース 3ガム 表3 メーカー別販売数ベスト3 A列 B列  C列 D列 1メーカー名 1  2 3 2つばめ 3すずめ 4はと 表2はジュース・ガムの部門別のトップ販売数の商品名とメーカー名、合計(表1のQ列)を表示させます。 表3は部門に関係なくメーカー別に販売数ベスト3商品名を表示させます。 どのように関数式を作ったらいいのでしょう? 両方ともINDEX、MATCH、LARGE関数を使うのかなあと漠然と考えるのですが・・・ 表3はメーカーの検索範囲をどのように指定するのかが特にわかりません。 表2はうまく考えがまとまりません・・・ どなたか教えて下さい!よろしくお願いします。

  • シニア向け 最適資料を教えてください

    いつも的確なアドバイスをありがとうございます 65歳シニア年齢 現役で仕事はしていて 主にパソコンを使ってます このたび XP→7 と機器導入のため 使用ソフトの変更を余儀なくされました 今まではWordExcelともに2003 これからは2007となるため 本人に負担が大きいようです 立場的に自分でこなさないといけない業務もあるようで四苦八苦しています 私(質問者)は常に一緒にいるわけではなく 仕事上内容に触れられないこともあるので 2003経験者にとっての 2007最適テキストを探しています(主にExcel) ※ 2003では 関数やリンクに関しても割りと 自在に使っていたようです 上記の人向けに 参考となる Excelテキストを探しています もし 何かアドバイスがあったら教えてください

  • EXCELで別ブックのセルを参照 シートを替える

    EXCEL初心者です。 毎日四苦八苦しているのですが、行き詰ってしまったのでご教授ください。 使用しているブックをA.xlsとして、 別ブックB.xlsのセル参照を、 ='Z:\[B.xls]Sheet1'!$B$1 のようにしています。 この Sheet1 の部分のシート名をA.xlsの、例えばA1に入力することで、 毎回シート名を変えられるようにしたいのですが、 ='[B.xls]( ココ )'!$B$1  ココの部分をどのようにしてよいかがわかりません。 A.xlsのパス名から書けばよいのかなと思ったのですが、 どうもうまくいきません。 何分必要にせまられてEXCEL勉強し始めたばかりです。 初歩的な質問ですが、すみません、よろしくおねがいします。

  • Excel INDEX関数ズレて抽出される

    INDEX関数で行列番号取得にMATCH関数を使用したときにズレてしまう。 定例のミーティングの参加表を作成しようとしています。 シートの構成は添付画像の通りです。 Sheet1 定例のミーティングの参加表 巡回Aは月ごとに担当者が変わる。 Sheet2 巡回Aの月別の担当表 巡回Aの担当表を用意して、COUNTIF関数で参加表の氏名が巡回Aのリストに含まれていない場合(カウント0)は空欄にし、0以外の場合、INDEX関数で列番号のところにMATCH関数をネスト、MONTH(TODAY())+1とし、ex. 8月なら翌月の9月に該当する列番号を抽出して巡回Aの出席を月が変わると連動するようにしたいです。 =IF(COUNTIF($B$22:$B$29,$B3)=1,IF(INDEX($C$22:$N$29,MATCH($B3,$B$22:$B$29,0),MATCH(MONTH(TODAY())+1,$C$20:$N$20,0))=0,"",INDEX($C$22:$N$29,MATCH($B3,$B$22:$B$29,0),MATCH(MONTH(TODAY())+1,$C$20:$N$20,0))),"") 職場のExcel2016では列がズレてしまい、抽出ができないです。 Excel365では問題なく抽出ができました。 2016でズレるのは何故でしょうか。 詳しい方居ましたらご教授下さい。 よろしくお願い致します。

専門家に質問してみよう