Excelの関数のIF文で、”IF”省略?? [Microsoft Office Excel]
それが構文てことでしょうに!」と叱られそう。
そのまま計算式に利用でき、更に"IF"という文字列を省略できるのです。
分りにくいかと思いますので、次に例題を示して説明します。
A1セルの値が「3」の時は「3」、それ以外の数値の時は「0」を返す計算式を考えます。
=IF(A1=3,A1,0) または =IF(A1=3,3,0)? 〔余計なコメント〕”0”は省略できるのは有名
=(A1=3)*A1 または =(A1=3)*3
知らない人が見ると「なんじゃこりゃ~!」間違いなしです。
EXCELでオーバーバー(オーバーライン、上バー)を入力する。 [Microsoft Office Excel]
使うのは、下線(Ctrl+U)ボタン、Alt+Enter(セル内改行)そして下揃えボタンの3つです。要するにスペースにアンダーバーを付けて、上下表示させるだけです。既にどこかのページで紹介されているとは思いますが、とりあえず手順を説明しておきます。
【手順1】下線ボタンを押す。
【手順5】任意のセルの高さに調整します。標準フォントなら15まで縮小できます。
EXCELの計算結果が合わない。 [Microsoft Office Excel]
文字列の計算式をセルに入力し、計算結果を返すTextcalcのような機能を持たせたマクロを使用しています。
実際に使用しているものは、任意のセル名を自動定義・削除したり、通常の計算式ではエラーとなる「//」や「()」などの記号が付いた変数を使用可能としたりしているので、少し複雑なものです。
例えば、「ABC(D1//5)」という変数を取り扱ったりできるものです。こちらは特殊システム用に作成したものなので、今回は一般的な課題について触れることにします。
【例題】
文字列式「’2/60*0.6」を「=TRUNC(2/60*0.6,6)」に自動変換して別のセルに代入する。
文字列式前後に"=TRUNC("と",6)"を追加するだけですので、簡単ですね。
関数電卓でも同じ答えなので何の問題もないと思われたのですが、この計算式で計算結果が異なる事象が発生しました。
【計算結果1】0.02 【計算結果2】0.019999
EXCELや関数電卓では前者となりますが、社内システム(詳細には言えません)は後者となってしまいます。
これはEXCELは「倍精度関数(Double)」で、社内システム内部の方は「10進型(Decimal)」の計算になっていることによる差ではないかと踏んでいます。因みに四則演算の電卓では後者となります。
VBA(EXCEL)では、Decimalで変数宣言はできず、各々の数値をCDec関数で変換するも、これをマクロで実現するには複雑になってしまいます。
【対策】
切り捨て(TRUNCやROUNDDOWN)を前提とした場合、計算式の答えが、「0.99999...」などとなるケースについてのみ発生するので、必ず割り算が存在します。そこで、割り算を優先的に先に計算し先に切り捨て処理を行ってから他の計算をするという方法をとりました。
=TRUNC(TRUNC(2/60,12)*0.6,6) ---- 【計算結果2】となる計算式
上式少数桁指定の"12"は、"15"までは同じ答えを得ることが出来ます。"16"にすると【計算結果1】になってしまいます。
マクロ上では、四則演算記号を”,”付の文字列に変換(Replace)して分解し、Arrayとして変数(Variant)に代入。ループ処理で"/"を挟む数値である"2"を"TRUNC("+"2"、"60"を"60"+",12)"に編集する処理をしました。
固い頭で考えています。他に良い方法があるかもしれません。以上、参考まで。
改ページすると罫線が表示されない件 [Microsoft Office Excel]
Excelのマクロから入り、VBAを始めてからもう20年近くになります。もう良い年なので、ひらめきも遅く、どう効率よく処理していくかWeb情報が頼りです。案外このカテゴリーも向いているんじゃないかと始めました。とりあえず最近気になった解決方法について記述します。
項目数により下線(xlEdgeBottom)を増減、改ページは自動挿入する処理をしていますが、このままだと2ページ目の最上部外枠が表示(印刷)されません。私は、改ページの挿入に次の処理を加えて解決しました。
上線(xlEdgeTop)では、前ページの最下段で同様の現象が生じます。
解決方法: ページをまたがる2行をSelectして、中間線(xlInsideHorizontal)を引く。
これで解決です。心配な人は、まずマニュアル操作で確認してみてください。
因みにマニュアル操作なら、上線もしくは下線を引き直すと表示されるようにはなりますが、何故かマクロ処理では無理でした。