エンジニアリング環境では、「正規化」する必要があることは珍しくありません

何らかの方法で数字。たとえば、7340が7.34として表され、73400が73.4として表されるように、10 ^ 3の倍数に正規化された数値を表示する必要がある場合があります。

Excelでは、カスタムの数値形式を使用して、数値の表示を10 ^ 3の倍数に正規化する科学的記数法で情報を表現することができます。これを行うには、次の手順に従います。

。フォーマットするセルを選択します。

。リボンの[ホーム]タブを表示します。

。番号グループの右下隅にある小さなアイコンをクリックします。

Excelに[セルの書式設定]ダイアログボックスが表示されます。

。 [番号]タブが選択されていることを確認してください。 (図1を参照)

。フォーマットカテゴリのリストで、[カスタム]を選択します。

。 [タイプ]ボックスに、形式として## 0.0E +0を入力します。 (これにより、小数点以下1桁の数値のみが提供されます。さらに必要な場合は、小数点以下のゼロの数を増やしてください。)

。 [OK]をクリックします。

これで、セルに7340などの数値を入力すると、Excelはそれを7.3E +3と表示します。セル形式の入力方法により、Eの後の部分は常に3の倍数になります。

これは問題ありませんが、セルに7.3だけを入れてから、隣接するセルに単位を付けたメートル法の接頭辞(キログラムなど)が必要な場合はどうでしょうか。これはもう少し複雑ですが、数式を使用して実行できます。たとえば、セルA2に元の番号があり、セルB2に正規化された番号があり、セルC2にメトリックプレフィックスとユニット名があるとします。セルB2に次の数式を入力するだけです。

=IF(OR(A2>=1,A2<=-1),SIGN(A2)(ABS(A2)/(10^(3INT(LOG(ABS(A2))/3))))), IF(A2=0,0,SIGN(A2)(ABS(A2)10^(-3*INT(LOG(ABS(A2))/3)))))

使用している単位がfooと呼ばれる虚数単位であると仮定すると、セルC2では、次のように別の数式を使用します。

=IF(OR(A2>=1, A2<=-1),CHOOSE(INT(LOG(ABS(A2))/3)+1, "Foos", "Kilofoos", "Megafoos", "Gigafoos", "Terafoos", "Petafoos", "Exafoos"), IF(A2=0,"",CHOOSE(INT(-LOG(ABS(A2))/3)+1, "Millifoos", "Microfoos", "Nanofoos", "Picofoos", "Femtofoos", "Attofoos")))

これらの式は少し長いように見えるかもしれません、そしてそれらはそうです。ただし、約-9.99999E-18から9.99999E +20までの任意の数で機能します。

たとえば、セルA2に番号.000125を入力すると、セルB2には125が含まれ、セルC2にはMillifooが含まれます。

ブックでこれらのような長い数式を使用したくない場合は、いくつかのVBA関数を開発してそのトリックを実行できます。

次の関数MySciNumは、正規化された数値を返します。したがって、セルB2で= MySciNum(A2)を使用して、上記と同じ結果を取得します。

Function MySciNum(BaseNum As Double) As Double     Select Case BaseNum         Case Is >= 1             While Abs(BaseNum) > 1000                 BaseNum = BaseNum / 1000             Wend         Case 0             'Do nothing         Case Else             While Abs(BaseNum) < 1                 BaseNum = BaseNum * 1000             Wend     End Select     MySciNum = BaseNum End Function

この関数は数値のみを返します。適切なメトリックプレフィックスを持つ単位を返すには、次の関数を使用します。セル参照と単一ユニットの名前を渡すだけです。

たとえば、= MySciPre(A2、 “foo”)を使用できます。マクロは次のとおりです。

Function MySciPre(BaseNum As Double, Unit As String) As String     Dim OrigNum As Double     Dim Pref As Integer     Dim Temp As String

Pref = 0     OrigNum = BaseNum     Select Case BaseNum         Case Is >= 1             While Abs(BaseNum) > 1000                 BaseNum = BaseNum / 1000                 Pref = Pref + 1             Wend         Case 0             Pref = 99         Case Else             While Abs(BaseNum) < 1                 BaseNum = BaseNum * 1000                 Pref = Pref - 1             Wend     End Select

Select Case Pref         Case -6             Temp = "atto" & Unit         Case -5             Temp = "femto" & Unit         Case -4             Temp = "pico" & Unit         Case -3             Temp = "nano" & Unit         Case -2             Temp = "micro" & Unit         Case -1             Temp = "milli" & Unit         Case 0             Temp = Unit         Case 1             Temp = "kilo" & Unit         Case 2             Temp = "mega" & Unit         Case 3             Temp = "giga" & Unit         Case 4             Temp = "tera" & Unit         Case 5             Temp = "peta" & Unit         Case 6             Temp = "exa" & Unit         Case Else             Temp = ""

End Select

If Len(Temp) > 0 Then         Temp = LCase(Temp)

Temp = UCase(Left(Temp, 1)) & Mid(Temp, 2)

If Abs(OrigNum) <> 1 Then Temp = Temp & "s"

End If

MySciPre = Temp End Function

注:

このページ(または_ExcelTips_サイトの他のページ)で説明されているマクロの使用方法を知りたい場合は、役立つ情報を含む特別なページを用意しました。

link:/ excelribbon-ExcelTipsMacros [ここをクリックして、新しいブラウザタブでその特別なページを開きます]

_ExcelTips_は、費用効果の高いMicrosoftExcelトレーニングのソースです。

このヒント(12874)は、Microsoft Excel 2007、2010、2013、2016、2019、およびOffice 365のExcelに適用されます。Excelの古いメニューインターフェイス用のこのヒントのバージョンは、次の場所にあります。

link:/ excel-Engineering_Calculations [EngineeringCalculations]