2010年1月23日
これで、2桁→3桁、3桁→2桁に変換するときは、それぞれ、
significantCancel→significantFigure3
significantCancel→significantFigure2
と実行すればいい。
・・・・
地味に面倒くさいぞ!
これを面倒くさいと感じるかどうかは、個々人による部分が大きいかもしれないが、
もし、2桁→3桁や3桁→2桁に直接変換できれば、それはそれで便利そうな気がする。
便利そうな気がしたら仕様に加えるしかない。
なぜそうなるのかは聞いてはいけない。便利そうだから、それ以上の理由なんてない。
さぁやる事が決まったら、あとはヘルプとのにらめっこ。
significantFigure2やsignificantFigure3を実行した時に、
significantCancelというサブルーチンを実行すれば全てが解決する。
ヘルプを眺めて見つけたのが、
|
むむむ。今はプロシージャと言うのか?まぁいいや、サブルーチンでもどっちでも。
とりあえず、これで呼び出せそうだ。
で、ここでちょっと気にしたいのが、宣言した変数がどこまで有効なのか、という事。
グローバルなのかローカルなのか、と書いた方が分かる人がいるかもしれない。
つまり、significantCancelとsignificantFigure2では同じ名前の変数を使っているのだ。
それぞれのところで代入しなおしているから問題は起こさないだろうが、ちょっと気になる。
変な値が変数に残っていてエラーが出ても困るし。
そこでヘルプでDimを見てみると
|
Sub significantFigure2() Call significantCancel 'roundの重複を避ける為に一度呼び出す。 '有効数字を2桁に '変数の定義 Dim myRange As Range Dim myCellFormula As String '式として変換する為の変数 Dim myCellValue 'variantで数字と文字列の判定 Dim startFrom 'variantで1文字目を取得 Set myRange = Application.Selection For Each c In myRange.Cells '個々のセルを抽出 myCellFormula = c.Formula myCellValue = c.Value If Len(myCellFormula) > 0 Then '空白セルをエスケープ If IsNumeric(myCellValue) Then '文字列セルをエスケープ 'セルの先頭文字を取得して式か数かを判定。 '式なら=を除去 startFrom = Left(myCellFormula, 1) If startFrom = "=" Then myCellFormula = Mid(myCellFormula, 2) End If 'ここで丸めを実行 c.Formula = "=ROUND(" & myCellFormula & ",1-int(LOG10(" & myCellFormula & ")))" End If End If Next End Sub Sub significantFigure3() Call significantCancel 'roundの重複を避ける為に一度呼び出す。 '有効数字を2桁に '変数の定義 Dim myRange As Range Dim myCellFormula As String '式として変換する為の変数 Dim myCellValue 'variantで数字と文字列の判定 Dim startFrom 'variantで1文字目を取得 Set myRange = Application.Selection For Each c In myRange.Cells '個々のセルを抽出 myCellFormula = c.Formula myCellValue = c.Value If Len(myCellFormula) > 0 Then '空白セルをエスケープ If IsNumeric(myCellValue) Then '文字列セルをエスケープ 'セルの先頭文字を取得して式か数かを判定。 '式なら=を除去 startFrom = Left(myCellFormula, 1) If startFrom = "=" Then myCellFormula = Mid(myCellFormula, 2) End If 'ここで丸めを実行 c.Formula = "=ROUND(" & myCellFormula & ",2-int(LOG10(" & myCellFormula & ")))" End If End If Next End Sub Sub significantCancel() '有効数字をキャンセル '変数の定義 Dim myRange As Range Dim myCellFormula As String Dim commaPosition '式中のコンマの位置。variant型 Set myRange = Application.Selection For Each c In myRange.Cells 'セルを抽出 myCellFormula = c.Formula If Mid(myCellFormula, 1, 7) = "=ROUND(" Then '=ROUND(以外のセルをエスケープ commaPosition = InStr(myCellFormula, ",") 'コンマの位置を取得 '=ROUND(を除いた8文字目からコンマ前までを取得 If IsNumeric(Mid(myCellFormula, 8, commaPosition - 8)) Then c.Value = Mid(myCellFormula, 8, commaPosition - 8) '数字であればそのまま代入 Else c.Formula = "=" & Mid(myCellFormula, 8, commaPosition - 8) '式であれば最初に=をつけて代入 End If End If Next End Sub |
これでひとまず完成!
鼻息も荒く、数日使っていたのだが、ふとある事実に気付いてしまったのだ。
「もっと苦しめ」という悪魔の囁きが聞こえてきた・・・。
[1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] [14]