Excel で「デフォルト」または「プレースホルダー」値を設定する方法はありますか?

Excel で「デフォルト」または「プレースホルダー」値を設定する方法はありますか?

ユーザーが編集できるようにしたいセルがあるスプレッドシートがありますが、ユーザーが入力したデータがない場合には、そのセルに「デフォルト」または「プレースホルダー」の値も設定しておきたいと考えています。これには、次のような使用例があります。

  • ユーザーが独自の値を入力していない (または削除した) 場合に合理的な想定を提供しながら、数式エラーを防止します。
    • 条件付き書式を使用して、デフォルト値をユーザーに通知し、ユーザーがデフォルト値を認識しないことを防ぐことができます。ユーザーは、その値が意図した計算に適切であるかどうかについて、十分な情報を得た上で選択することができます。
  • セルに入力する内容の簡単な説明を記述します。別の「説明」セグメントやドキュメントは必要ありません。これにより、近くに「ラベル」セルを配置する必要もなくなりますが、実際には適切ではない場合もあります。

目的を達成するには、次の操作を実行する数式、スクリプト、またはその他の高度なスプレッドシート オプションが必要です。

  • ユーザーがデータを入力する前に、セルにデフォルト値を表示します。
  • セルにユーザーが入力したデータがない場合、そのセルを参照する数式によってデフォルト値が見つかるようになります。
  • ユーザーが自由に (当然、通常のセルとまったく同じように) 表示された値を独自の値または数式で上書きし、ユーザーが入力したデータをセルを参照する数式で検索できるようにします。
  • ユーザー入力の削除によってセルが空白になった場合は、デフォルト値に戻します。

Excel でこれを行う方法はありますか、それともスプレッドシート プログラムに要求しすぎでしょうか?

答え1

これを行うための組み込みの方法はないので、独自の方法を作成する必要があります。

一つの可能​​性は次の通りです:

  1. デフォルトを設定する各セルに対して、そのセルを参照するワークシートスコープの名前付き範囲を作成し、コメントフィールドに必要なデフォルト値を入力します。
  2. ワークブックモジュールWorkbook_SheetChangeイベントを追加する

    Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
        Dim nm As Name
        Dim cl As Range
    
        On Error Resume Next
        For Each cl In Target.Cells
            If IsEmpty(cl) Then
                For Each nm In Sh.Names
                    If nm.RefersToRange.Address = cl.Address Then
                        Application.EnableEvents = False
                        If IsNumeric(nm.Comment) Then
                            nm.RefersToRange.Value = Val(nm.Comment)
                        Else
                            nm.RefersToRange.Value = nm.Comment
                        End If
                        Application.EnableEvents = True
                        Exit For
                    End If
                Next
            End If
        Next
    End Sub
    

これは次のことを行います:

  • セルが変更されるたびにイベントコードが実行される
  • 変更されたセルが空の場合
    • セルを参照するワークシートスコープの名前付き範囲を探します
    • 見つかった場合は、名前のコメントをセルの値にコピーし、数値に変換するのが適切です。

答え2

私は次のように機能する方法を使用します:

-- 学校の記録の簡単な例:

  • 列 A は行タイトルです: 学生 ID、姓、名、生年月日、年齢など。
  • 列 B はゴースト列です: 幅 1、左揃え、インデント 1 増加、保護、フォント色グレー、テキスト折り返しなし
  • 列Cは入力フィールドです

-- 列 B の値は、列 C にデフォルトで表示する内容で読み込まれます。値は、付随するヘルパー シート、セルが入力されると更新される数式、デフォルト値やエラー メッセージを含む別のスプレッドシートなどから取得できます。

-- したがって、生徒 ID を入力すると、姓、名、生年月日、住所、両親などがすぐに下の行にゴースト値として表示されます。列 C のセルには何も入力されていないため、列 B のゴースト値は列 C に拡張されます。(数値と日付の値は text() 関数で書式設定する必要があります。) 子供の情報を確認した後、オペレーターはクラス スケジュール、担任教師などを入力します。

-- 何かを変更する必要がある場合は、セルに入力して、その子の何かが異なることを示します。(姓、親の名前、住所など)

-- または、姓と名を入力し、ID を空白のままにしておくと、ゴースト値にはマスター スプレッドシートの子 ID が表示されます。

-- ヘルパー シートには、列 C のセルに触れると消えるヘルパー テキストを表示できます。または、スプレッドシートのロジックによって、ヘルパー テキストが適切でなくなったか、別のテキストを表示する必要があると判断されることもあります。

ゴースト値は検索可能で、デフォルト テキストの場合は灰色、警告の場合は赤色になり、付随するスプレッドシートが更新されると自動的に更新されます。

制限として、ゴースト テキストは列 C に折り返すことができません。

関連情報