数式から(本当に)空白のセルを作成し、Ctrl + 矢印でスキップされるようにするにはどうすればよいですか?

数式から(本当に)空白のセルを作成し、Ctrl + 矢印でスキップされるようにするにはどうすればよいですか?

この質問数式を使用して完全に空白のセルを作成する方法について質問しますチャートに表示されないようにするNA()解決方法は、セルに値を設定する数式を使用することです#N/A

一般的な使用例として、基本的にフラグである列があり、数式が含まれていますIF(*flag_condition*, 1, "")。そして、SUM()列にフラグがいくつあるかを示す が上部にあります。次に、その列の上部近くにある明らかに空の (フラグ = false) セルを選択し、Ctrl+を使用しDownてその列の次の空でないセルにジャンプして、その行の値を調べます。特に、フラグがまばらでデータが長い場合はそうです。

ただし、Ctrl+ はDown次のセルに移動するだけなので、そのセルは空に見えますが、数式が含まれています。

NA()の代わりにを使用すると、 ""(a) セルには値 が視覚的に表示され#N/A、(b) 合計には値 が使用され#N/A、(c) CTRL+矢印キーでそのセルをスキップできなくなります。

したがって、私はこれを別の質問として尋ねますが、それはそれの重複ではありません。

上記の問題 (c) と (b) を少なくとも克服できる解決策はあるでしょうか?


@JvdV からのリクエストにより、次の例を示します。

ここに画像の説明を入力してください

このセルとそれ以下のセルの数式は です=IF(MOD(A3,2)=0,1,"")

意図された出力は、Ctrl+を押しDownて B4 ではなく B6 にジャンプすることです。

この場合、フラグは特にまばらではありませんが、他の場合にはまばらです。

答え1

私は、VBA と を使用して、これを実行する方法を見つけましたWorksheet_Change。3 番目の列 C にデータを入力し、1列 A の偶数値の場合は が含まれ、列 A の奇数値の場合は空になります。列 A の値が変更されるたびに、このコードが実行され、C の対応する値が更新されます。次に、列 B を非表示にして、列 C を使用してCtrl+Arrowナビゲーションを実行できます。

Private Sub Worksheet_Change(ByVal Target As Range)
Dim KeyCells As Range

' The variable KeyCells contains the cells that will
' cause an alert when they are changed.
Set KeyCells = Range("A3:A999")

'Suppress further events to avoid cascading changes.
Application.EnableEvents = False

If Not Application.Intersect(KeyCells, Range(Target.Address)) _
       Is Nothing Then

    ' Place your code here.
    If Target.Offset(0, 1).Value = 1 Then
      Target.Offset(0, 2) = 1
    Else
      Target.Offset(0, 2).Clear
    End If

    'Uncomment the next line for troubleshooting.
    'MsgBox "Cell " & Target.Address & " has changed."

End If
'Re-enable further events.
Application.EnableEvents = True
End Sub

これは手抜きのコードなので、多少は簡略化できる可能性があります。たとえば、ロジックをIf … Mod …列 B の数式ではなく VBA コードに配置すれば、追加の列は不要になります。

答え2

B3などの値はB4実際には空のセルではないため、Excel のCtrl+ は、単に数式による何らかの値であるDownため、 以外の値を持つ次のセルにスキップしないのではないかと思います。""""

私は、イベントのモジュールを備えた VBA を使用してこれを克服しようとしましたWorkbook.Open。以下のとおりです。

Private Sub Workbook_Open()

Application.OnKey "^{DOWN}", "ChangeKey"

End Sub

Ctrlこれは、Excel を開いて+を押すと、Downというモジュールを呼び出す必要があることを伝えますChangeKey。その特定のモジュールは次のようになります。

Sub ChangeKey()

With ThisWorkbook.Sheets("Sheet1")
    Set rng = .Range(.Cells(ActiveCell.Row, ActiveCell.Column), .Cells(.Range("B" & Rows.Count).End(xlUp).Row, ActiveCell.Column))
    For Each cl In rng
        If Len(cl) <> 0 And cl.Row > ActiveCell.Row Then cl.Select: Exit For
    Next cl
End With

End Sub

SUMこれで、エラーが発生することなく、レンジで引き続き使用できるはずです#N/A

ここに画像の説明を入力してください


気が変わって、#N/Aグラフ作成のためにセルに が必要になった場合は、次の操作を実行できます。

  • SUMIF値をスキップするには、以下を使用します#N/A

    =SUMIF(B3:B8,"<>#N/A")
    
  • 値もChangeKeyスキップするようにモジュールを変更する#N/A

    For Each cl In rng
        If Application.WorksheetFunction.IsNA(cl) = False Then
            If Len(cl) <> 0 And cl.Row > ActiveCell.Row Then cl.Select: Exit For
        End If
    Next cl
    

    ここに画像の説明を入力してください

答え3

実際には、VBA でコードを記述する必要がない、はるかに簡単な解決策があります。フィルターを挿入し、「空白」セルのみを選択するだけです。次に、「クリア」アイコンに移動して、「コンテンツをクリア」を選択します。フィルターを削除すると、すべて準備完了です。

答え4

CtrlExcel の+コンボArrowは、データの中断にのみ反応します。これらのセルには数式があるため、データが中断されることはありません。この問題を回避する唯一の方法は、数式が評価された後に、これらのセルの「データ」を置き換えることです。

これを行うには、VBA または非 VBA の 2 つの基本的な方法があります。どちらの方法にも、無数のバリエーションがあります。ここでは、両方の方法の中で最も簡単な方法を紹介します。

VBA:

これにより、数式自体も評価されます。数式を評価するたびに、ボタンまたはマクロの実行によって手動でトリガーする必要があります。VBA コードを配置する場所は、トリガー方法によって異なります。私は、アクセスに必要な最下位レベルの領域 (この場合は Sheet1) に配置しました。

Sub test()

ActiveSheet.Range("B1:B6").Value = Evaluate("=IF(MOD(A1:A6,2)=0,1,"""")")

End Sub

A1:A6 は評価対象のソースが配置されている場所です。

結果は B1:B6 に出力されます。

利点: 他の計算方法に比べて非常に高速です。

欠点: 複雑な関数や配列関数に Evaluate を使用するのは難しい場合があります。コード内の範囲を柔軟にする方法はありますが、ここでは説明しません。

注:Worksheet_Change()イベントを使用すると機能します。ただし、シートが何らかの方法で変更されるたびにコードが実行されるため、この解決策は避ける傾向があります。処理が遅くなったり、シート内の他の機能に干渉したりする可能性があります。

非VBA:

  1. 必要な数式を通常どおり使用します。

  2. 結果を選択します (上から始めてCtrl+ Shift+を押すのがDown最も簡単な方法です)。

  3. コピー

  4. 値のみを貼り付けます (選択内容を変更しないでください)

  5. 区切りを選択しない状態で、テキストを列に固定幅で配置します(ここでも、選択を変更しないように注意してください)。

利点: 保守するコードがありません。 持っておくと便利なスキルです。

欠点: 毎回手動で行う必要があります。数式の上に貼り付けられるため、必要なたびに再入力する必要があります。

関連情報