Johnには、ユーザーが情報を入力できるデータ入力ワークシートがあります。

彼は、ユーザーが入力した小数点以下の桁数を正確に表示するようにセルを自動的にフォーマットすることを望んでいます。たとえば、ユーザーが「12.345」と入力した場合、セルを自動的にフォーマットして小数点以下3桁を表示するようにします。 Johnは、セルにGeneral形式を使用できることを知っていますが(これはうまく機能します)、ユーザーが「12.34500」などの0で終わる値を入力した場合、このアプローチは機能しません。小数点以下5桁を表示します。

カスタムフォーマットを使用してニーズに対応できると考えている場合、それは機能しません。私たちが思いついたカスタムフォーマットでは、Excelは表示されているものから末尾のゼロを削除します。 (または、逆に、カスタム形式にプレースホルダーとして「0」が含まれている場合は、エントリの最後にゼロが追加されます。)

これを処理する最も簡単な方法は、正直なところ、情報の入力を開始する前に、セルをテキストとしてフォーマットすることです。このようにして、Excelは、入力された内容(末尾のゼロを含む)を受け入れ、それをセルに詰め込みます。さらに、セルの内容を右揃えにして、少なくとも数値のように見えるようにすることができます。

これの欠点は、数式で値を使用する際に注意する必要があることです。最も安全な方法は、次のように、VALUE関数内のセルへの参照を単純に囲むことです。

=VALUE(A1) * 1.375

別のアプローチは、セルの範囲に入力されたものをチェックするマクロを作成することです。セルをテキストとしてフォーマットすることから始め、次にそれらのセルから名前付き範囲(DataEntry)を作成します。次に、使用しているワークシートのコードシートに次のコードを追加できます。

Private Sub Worksheet_Change(ByVal Target As Range)

Dim c As Range     Dim sEntry As String     Dim dEntryNumber As Double     Dim arr

If Not Intersect(Target, Range("DataEntry")) Is Nothing Then         Application.EnableEvents = False         For Each c In Target.Cells             If IsEmpty(c) Then                 c.NumberFormat = "@"    ' Reset to Text format             Else                 If IsNumeric(c) Then                     If Len(c.Value) = 0 Then                         c.NumberFormat = "@"    ' Reset to Text format                     Else                         sEntry = c.Value                         dEntryNumber = CDbl(sEntry)



arr = Split(sEntry, ".")

If UBound(arr) = 1 Then                             ' Change NumberFormat in accordance with                             ' the number of digits after the decimal point                             c.NumberFormat = "0." & String(Len(arr(1)), "0")

c.Value = dEntryNumber                         End If                     End If                 End If             End If         Next c         Application.EnableEvents = True     End If End Sub

ワークシートで何かが変更されるたびに、マクロがトリガーされます。次に、その変更がDataEntry範囲のセルの1つで発生したかどうかを確認します。そうである場合は、セルに何が入力されているかを調べます(セルのフォーマット方法であるため、Excelはテキストとして扱います)

そして、それが数字であるかどうか、さらに小数点以下の桁数を決定します。次に、小数点以下の桁数が表示されるようにセルをフォーマットし、数値をセルに戻します。

このアプローチが機能しない唯一の条件は、DataEntry範囲(セルを数値形式に変換する)のセルに値を配置してから、同じセルに別の数値を入力した場合です。その場合、マクロには、後続のゼロが入力されているかどうかを知る方法がありません。 (末尾のゼロは、セルがテキストとしてフォーマットされている場合にのみ保持されることに注意してください。セルがフォーマットされていないため、Excelは末尾のゼロを削除し、マクロは入力されたかのようにその値で動作します。)

注:

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

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

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

このヒント(1963)は、Microsoft Excel 2007、2010、2013、および2016に適用されます。