web-dev-qa-db-ja.com

計算列をExcelテーブルのデータ列に戻すにはどうすればよいですか?

大きなExcelテーブル(44列、1000行以上)がありますが、列の1つが誤って計算列に変換されています( ここを参照 )。その結果、ユーザーが(右下隅のハンドルを下にドラッグして)テーブルに新しい行を追加しようとすると、この列の新しい行にこの数式が不適切に入力され、スプレッドシートエラーが発生します。

この列のすべてのセルの内容をクリアしようとしましたが、式が含まれていることがわかりましたが、それでも通常の列ではなく計算列として扱われます。

どうすればこれをオフにできますか?必要に応じてVBAを使用できますが、両方を広範囲に使用しているため、テーブル全体の計算列または自動入力を削除できません。


さらに、ユーザーが誤ってこれを将来再び行うのを防ぐにはどうすればよいですか?数式ではなく、最初の10列にのみデータを入力する必要がありますが、当然、常に指示に従うとは限りません...

5
RBarryYoung

多数の数式を削除するために私が見つけた最も速い方法は、列を選択してコピーし、Paste Values関数を使用してそれ自体に貼り付けることです。

ユーザーがこれを繰り返さないようにする限り、私が知っている唯一の方法は、シートの保護およびブックの保護機能を使用することです。これらを特定のシナリオに適合させることができるかどうかは、保護しようとしていることと、ユーザーに許可する必要があることによって異なります。ただし、通常は、他のすべてのセルをロックすることで、ユーザーを特定の範囲、列、または行のみの編集に制限できます。必要に応じて、ユーザーが引き続き新しい行を挿入できるようにするオプションがあります。残念ながら、ユーザーがデータを入力できるようにシートをロックする方法はわかりませんが、数式を追加することはできません。

Data Validationを使用して、数式を入力しないようにユーザーに通知する入力メッセージを追加できます。それは彼らを停止しませんが、少なくとも常に彼らに思い出させます。データ検証を使用して、特定のデータ型を強制的に入力することもできますが、結果として正しいデータ型を提供する数式が停止することはありません。


更新:

次のように、Worksheet_Changeイベントを使用して、Excelで数式を明示的に拒否できます。

Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Application.Intersect(Range("C:C"), Range(Target.Address)) Is Nothing Then
        If Range(Target.Address).HasFormula Then
            Range(Target.Address).Value = ""
            MsgBox "You may not enter formulas on this sheet!"
        End If
    End If
End Sub

この例では、数式でチェックされる範囲は列C全体です。チェックする範囲を定義してから、数式を空白にしたり、別のものに変更したり、ユーザーに警告したりすることができます。

10
techturtle

TechRepublic あります:

Function IdentifyFormulaCellsUsingCF(rng As Range) As Boolean  
IdentifyFormulaCellsUsingCF = rng.HasFormula
End Function

これは、数式を使用してセルを強調表示(黄色など)およびフォーマット(「数式を使用しない」など)するために使用できます。

数式の入力を妨げることはありませんが、[検索]> [数式]と言うよりもすぐに警告が表示されます。

2
pnuts