ワークシートでは、キャロルは「会計」にフォーマットされたセルを持っています。誰かが誤ってそのセルに日付(mm / dd / yy)を入力した場合、Excelはセルの書式を自動的に変更して、日付を正しく表示します。ただし、彼女がそのセルにドルの金額を再度入力しようとしても、「会計」形式には戻りません。セルは日付形式のままです。

これは、ユーザーがエラーを確認して修正する場合は問題ありませんが、「ボイラープレート」テキストを含むテンプレートでこれが発生することが多く、テンプレートはフォーマットセルにアクセスできないように保護されています。キャロルは、なぜこれが起こるのか、そしてそれを修正する方法について誰かが何か考えを持っているかどうか疑問に思います。

単純なワークシートでフォーマットの変更を防ぐための迅速な方法が必要な場合は、次の手順に従ってください。

。 [Excelのオプション]ダイアログボックスを表示します。 (Excel 2007では、[Office]ボタンをクリックし、[Excelオプション]をクリックします。Excel2010以降のバージョンでは、リボンの[ファイル]タブを表示し、[オプション]をクリックします。)

。ダイアログボックスの左側にある[詳細]をクリックします。

。詳細オプションの一番下までスクロールします。 (図1を参照)

。 Transition FormulaEntryオプションが選択されていることを確認してください。

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

この特定のオプションにより、ExcelはLotus 1-2-3と同じ方法で入力された情報を評価(解析)します。これは、日付が日付としてではなく、数式として解析されることを意味します。したがって、誰かが11-16-13をセルに入力すると、「11マイナス16マイナス13」として解析され、セルに-18として表示されます。日付として解析されなかったため、必要に応じて、アカウンティング形式はセルに関連付けられたままになります。

ただし、このアプローチには欠点があります。その後、ExcelはLotusの規則に従ってエントリを解析するため、他のExcelワークシートと同じ規則に従わないため、ワークシートが正しく機能していないとユーザーが判断する場合があります。これが、このアプローチが単純なワークシートに受け入れられる可能性があると述べた理由です。ワークシートが適格かどうかを判断する必要があります。

解析の実行方法を変更したくない場合は、ワークシートにイベントハンドラーを追加するのが最善の方法です。たとえば、データが入力された場所を確認し、それらのセルへの変更が目的の形式を保持していることを確認するイベントハンドラーを含めることができます。

Private Sub Worksheet_Change(ByVal Target As Range)

Dim rngToCheck As Range     Set rngToCheck = Range("E2")

If Intersect(Target, rngToCheck) Then         rngToCheck.NumberFormat = _           "_($ #,##0.00_);_($ (#,##0.00);_($* "" - ""??_);_(@_)"

End If End Sub

この例では、アカウンティング形式を保持するセルは、rngToCheck変数に割り当てられたE2です。別のセル範囲でフォーマットを強制する場合は、割り当て行を変更するだけです。

もう少し柔軟性が必要な場合は、別のイベントハンドラーのセットを使用できます。たとえば、次の例では、WorksheetオブジェクトのSelectionChangeイベントとChangeイベントの両方を使用しています。その結果、特定のフォーマットをそれほど強制することはありませんが、セルのフォーマットが以前の形式から変更されるのを防ぎます。したがって、このアプローチは、アカウンティング形式を適用するだけでなく、すべての形式を保護します。

Dim nFormat As String

Private Sub Worksheet_Change(ByVal Target As Range)

Dim rngToCheck As Range     Set rngToCheck = Range("E2")

If Intersect(Target, rngToCheck) Then         rngToCheck.NumberFormat = nFormat     End If End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)

nFormat = Target.NumberFormat End Sub

SelectionChangeイベントハンドラーが最初に起動し、既存の形式をnFormat変数に設定します。次に、Changeイベントハンドラーが起動し、フォーマットを元に戻します。

試すことができるもう1つのアプローチは、データ検証を使用することです。このアプローチはマクロを必要としないため、システムでマクロが無効になっている可能性のあるユーザーがブックを使用する場合に適しています。

次の一般的な手順に従ってください:

。書式設定を適用する1つまたは複数のセルを選択します。

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

。 [データツール]グループの[データ検証]ツールをクリックします。 Excelに[データ検証]ダイアログボックスが表示されます。

。 [許可]ドロップダウンリストを使用して、[カスタム]を選択します。 (図2を参照)

。 [数式]ボックスに、次のように入力します:= CELL( “format”、B2)= “C2″。必要に応じて、その他のデータ検証設定を設定します。

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

数式(ステップ5)はセルの書式をチェックし、その書式に基づいて入力を許可または禁止します。引用されている式では、フォーマットC2はアカウンティングフォーマットの内部名です。数式のコードは、好みに応じて「、2」、「C2」、「C0」、「C2-」、「C0-」などの他の形式に簡単に変更できます。使用するフォーマットを判断する最も簡単な方法は、データ検証ルールを適用する前に、必要に応じてセルをフォーマットすることです。 (たとえば、セルL13に書式を適用するとします。)次に、この数式を別のセルで使用して、Excelが適用したと信じる書式を確認できます。

=CELL("format",L13)

注:

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

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

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