アカウント名:
パスワード:
>何十もある小さなセルにコードが隠れているため、もし慎重にコードを査読
単純な計算だけなら追うのも楽なんだけど、一つのセルの中にif()関数を入れ子にして、さらに別のシートを表引きしたりするものになると、見るのもイヤになる。 単純な計算ならシートの機能だけで作ればいいけど、複雑な条件判断が絡んでくるならマクロを使うべきだし、表引きだとかが絡んでくるならデータベースで作った方が構造がスッキリしてわかりやすくなるんだけど。 で、そういうのを作ってる人に言わせると、Excelなら誰でもいじれてメンテナンスできるとのこと。 私は絶対手をつ
えっと、私自身は今はExcelのワークシート関数積極的利用派です。
マクロウィルスが流行ったせいで、今時のExcelはマクロを自動実行させない設定なのが普通でしょう。「このファイルはマクロを動かしても大丈夫かどうか」を一体どうやって確認するのか、そういう点で、私は「ワークシート関数で実現出来る処理には、マクロは使うべきではない」と思ってます。今はもう、積極的にできるだけマクロは使わないようにしています。
> 表計算ソフトって、セルの保護機能が弱いから、うっかりデータを書き換えても気がつかないのが怖い。
それは制作者がちゃんと保護設定してないだけ。Excelにはそれなりな保護機能があります。必要最小限の「手入力するセル」だけ変更可能にして、残りのセルは全て変更不可にすれば、「うっかりデータを書き換え」るなんてことはありません。
Excelの保護設定での最大の問題は、保護されていないセルに対して、「カットアンドペースト」すると、そのセルに対する参照まで移動してしまうこと。(例えば、保護されていないセルA1とB1があった場合、A1もB1も書き換え可能なので、A1をカットしてB1にペーストなんてこともできます。ですが、それをやっちゃうと、別のセルがA1を参照していた場合、たとえ保護していたセルであっても、カットアンドペーストに追従してB1への参照に書き換わってしまうし、B1への参照があったとしたら、参照先が消失したので#REFになっちゃう)これについては、ちょっと泥臭いですが、INDIRECT とか OFFSET とかを使って解消可能です。
まあ、そうやって安全なシートを作ってると、どんどんコードとしての可読性は悪くなっていきますし、コードの一覧表示が出来ないから保守性が悪いという点についてはもう確かにその通りなのですが、とりあえず、セル内のコード記述レベルでは、改行を多用しインデントすることで、できるだけ可読性を高めるようにしています。例えば
=IF( LEFT( OFFSET($H2, 0, -3), LEN(N$1 & "→") ) = N$1 & "→", -OFFSET($H2, 0, -2), 0 )+IF( RIGHT( OFFSET($H2, 0, -3), LEN("→" & N$1) ) = "→" & N$1, OFFSET($H2, 0, -2), 0 )
って感じ。これを全部一行にまとめて
=IF(LEFT(OFFSET($H2,0,-3),LEN(N$1&"→"))=N$1&"→",OFFSET($H2,0,-2),0)+IF(RIGHT(OFFSET($H2,0,-3),LEN("→"&N$1))="→"&N$1,-OFFSET($H2,0,-2),0)
って書くより格段に読みやすいと思います。#これは、「A→B 100」って入力があったら、Aを-100、Bを+100するための処理の一部。#OFFSET($H2,0,-3)・OFFSET($H2,0,-2)は、E2・F2への参照です。E2・F2は保護されていないセルなので、上述のカットアンドペースト問題から守るため、「H2の3つ左」「H2の2つ左」という指定にしてます。
マクロが安全かどうかは普通に証明書をすればよいのでは。特定の人だけに配るなら自己署名で問題ないし。
ああ、そうか。改行してしまえばいいのか。今初めて知りました。実際長い関数処理は可読性が最悪ですがこれでだいぶマシになりますね
私も半年くらい前に改行すれば読みやすいことに気がついて実践してます。でも、「そのままコピーしてもエラーしか出ないぞ」と言われた。orz
「関数は一行に戻して入力してください。実は改行にも目に見えない文字が使われているのです。」という一文を付け加えてます。
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
「毎々お世話になっております。仕様書を頂きたく。」「拝承」 -- ある会社の日常
全く同意 (スコア:4, 興味深い)
>何十もある小さなセルにコードが隠れているため、もし慎重にコードを査読
単純な計算だけなら追うのも楽なんだけど、一つのセルの中にif()関数を入れ子にして、さらに別のシートを表引きしたりするものになると、見るのもイヤになる。
単純な計算ならシートの機能だけで作ればいいけど、複雑な条件判断が絡んでくるならマクロを使うべきだし、表引きだとかが絡んでくるならデータベースで作った方が構造がスッキリしてわかりやすくなるんだけど。
で、そういうのを作ってる人に言わせると、Excelなら誰でもいじれてメンテナンスできるとのこと。
私は絶対手をつ
Re:全く同意 (スコア:4, 参考になる)
えっと、私自身は今はExcelのワークシート関数積極的利用派です。
マクロウィルスが流行ったせいで、今時のExcelはマクロを自動実行させない設定なのが普通でしょう。「このファイルはマクロを動かしても大丈夫かどうか」を一体どうやって確認するのか、そういう点で、私は「ワークシート関数で実現出来る処理には、マクロは使うべきではない」と思ってます。今はもう、積極的にできるだけマクロは使わないようにしています。
> 表計算ソフトって、セルの保護機能が弱いから、うっかりデータを書き換えても気がつかないのが怖い。
それは制作者がちゃんと保護設定してないだけ。Excelにはそれなりな保護機能があります。必要最小限の「手入力するセル」だけ変更可能にして、残りのセルは全て変更不可にすれば、「うっかりデータを書き換え」るなんてことはありません。
Excelの保護設定での最大の問題は、保護されていないセルに対して、「カットアンドペースト」すると、そのセルに対する参照まで移動してしまうこと。
(例えば、保護されていないセルA1とB1があった場合、A1もB1も書き換え可能なので、A1をカットしてB1にペーストなんてこともできます。ですが、それをやっちゃうと、別のセルがA1を参照していた場合、たとえ保護していたセルであっても、カットアンドペーストに追従してB1への参照に書き換わってしまうし、B1への参照があったとしたら、参照先が消失したので#REFになっちゃう)
これについては、ちょっと泥臭いですが、INDIRECT とか OFFSET とかを使って解消可能です。
まあ、そうやって安全なシートを作ってると、どんどんコードとしての可読性は悪くなっていきますし、コードの一覧表示が出来ないから保守性が悪いという点についてはもう確かにその通りなのですが、
とりあえず、セル内のコード記述レベルでは、改行を多用しインデントすることで、できるだけ可読性を高めるようにしています。例えば
って感じ。
これを全部一行にまとめて
って書くより格段に読みやすいと思います。
#これは、「A→B 100」って入力があったら、Aを-100、Bを+100するための処理の一部。
#OFFSET($H2,0,-3)・OFFSET($H2,0,-2)は、E2・F2への参照です。E2・F2は保護されていないセルなので、上述のカットアンドペースト問題から守るため、「H2の3つ左」「H2の2つ左」という指定にしてます。
Re: (スコア:0)
マクロが安全かどうかは普通に証明書をすればよいのでは。
特定の人だけに配るなら自己署名で問題ないし。
Re: (スコア:0)
ああ、そうか。改行してしまえばいいのか。今初めて知りました。
実際長い関数処理は可読性が最悪ですがこれでだいぶマシになりますね
Re: (スコア:0)
私も半年くらい前に改行すれば読みやすいことに気がついて実践してます。
でも、「そのままコピーしてもエラーしか出ないぞ」と言われた。orz
「関数は一行に戻して入力してください。実は改行にも目に見えない文字が使われているのです。」
という一文を付け加えてます。