Excelで複数行のソート/フィルタリングヘッダーを取得する方法


17

ヘッダー情報に2行を使用するスプレッドシートがあります。列を選択することによるフィルタリングは、暗黙的に1行のヘッダー情報のみを想定しています。ソートにはヘッダー行のチェックボックスがありますが、トグルは最初の行をヘッダーとして扱うだけです。

Excelに最初の2行をヘッダーとして処理させる方法はありますか?

回答:


18

いいえ。自動フィルタリングする場合、範囲の最初の行を省略します。この方法で、自動フィルターボタンは下のヘッダー行にのみ表示され、データはフィルターされます。現在、2番目のヘッダー行が「データ」に取り込まれていることを期待しています。

単一のセルを選択して、これを把握することはできません。Excelに含めるセルの範囲を選択する必要があります。


そうです。列を選択するのではなく、特定のセルを選択してフィルタリングを開始できることに気づきませんでした。
ダンニーリー

7

複数のヘッダー行を使用してソート機能を実行する簡単な方法は、ソートする行のすぐ上に空白行を挿入することです(理想的には、ヘッダーの一番下です。そうでない場合はそうします)。次に、空の行を強調表示する「行」番号をクリックします。その行を右クリックして[非表示]を選択します。新しい空の行は消え、ヘッダーは希望どおりに残り、Excelはカテゴリー行をヘッダーとして解釈します。


2

(行の左側にある行番号を選択して)行全体を選択し、フィルターを有効にすると(データ>フィルター)、選択した行の下にあるすべてのフィルターが提供され、上の行はすべて無視されます。


これが正解であり、最も簡単です。これは非常に古い質問なので、Excel 2016で機能します。
ショーン

ありがとうございました!ここにいる全員がなぜそんなに複雑なのですか?
user291695

@ user291695:OPの日付から、おそらく古い回答のように古いバージョンのMS Officeで行われた方法であり、新しい回答は意味をなさないと推測しています。確かにわからない。
Fr0zenFyr

1

2番目の行に列見出しが含まれる2つのヘッダー行を持つリストをフィルターするには、次のようにします。

  • 最初の行を切り取ります
  • フィルタリングをオフにする
  • 2行目がフィルタリングされるように、フィルタリングを再度オンにします。これにより、列見出しのある行がExcelに通知されます。
  • フィルターと列見出しを使用して、最初の行を行の上に再度貼り付けます
  • 2行目に列見出しを付けて、フィルターが機能するかどうかを確認します。

1

さて、ファイルをExcel 2007として保存し、再度開いた後でも、Excel 2010では次のように動作します(おそらくExcel 2007でも動作します...)

3行のヘッダーを想定しています。スプレッドシートフィルターの範囲を[セル$ A $ 4から開始]に設定し、並べ替えるデータの範囲全体をカバーするようにします。ファイルを保存します。

以降、ソートは行1〜3をヘッダーとして処理するため、行4からのみソートされます。-フィルタ範囲を変更またはキャンセルしない限り...


deedgessからの応答は私のために働いた。フィルターを追加すると、Excelはその上のすべての行がヘッダーであると想定します。私の場合、2行のヘッダーがあります。行2を選択し、フィルターをオンにしました。次に、カスタムソートを選択し、ヘッダーのボックスをオンにしました。並べ替えが行われたとき、行1と行2の両方がヘッダーのままでした。

1

StackOverflowではなくSuperUserを使用していますが、Excel 2016でVBAコードを使用することでこの問題の解決策を見つけることができます。

同様の(より複雑な)問題があります。

次の画面のキャプチャでわかるように、明示的な列にいくつかのフィルターを追加しますが、行1にのみ行2に追加します。

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

私はExcel GUIを使用しようとしましたが、これは不可能のようですので、次のコードを書きました。

'********************************************************
'* SetFilter()
'********************************************************
'* PUBLIC method to call to define CUSTOM AutoFilter
'* on complex header.
'********************************************************

Sub SetFilter()
  'Compute last row number
  Dim nLast As Long
  nLast = Range("A" & Rows.Count).End(xlUp).Row

  'Lock screen update 
  Application.ScreenUpdating = False

  'Unmerge merged cells to allow adding filter
  Range("A1:A2").MergeCells = False
  Range("B1:B2").MergeCells = False
  Range("C1:C2").MergeCells = False
  Range("D1:D2").MergeCells = False
  Range("E1:E2").MergeCells = False
  Range("F1:F2").MergeCells = False

  'Add filter on row 2 and not 1  
  Range("A2:Z" & nLast).Select
  Selection.AutoFilter

  'Remove (or Hide) filter combobox for some columns
  Selection.AutoFilter Field:=GetColumnIndex("C"), VisibleDropDown:=False
  Selection.AutoFilter Field:=GetColumnIndex("G"), VisibleDropDown:=False
  Selection.AutoFilter Field:=GetColumnIndex("H"), VisibleDropDown:=False

  'Merge unmerged cells to restore previous state
  Range("A1:A2").MergeCells = True
  Range("B1:B2").MergeCells = True
  Range("C1:C2").MergeCells = True
  Range("D1:D2").MergeCells = True
  Range("E1:E2").MergeCells = True
  Range("F1:F2").MergeCells = True

  'Unlock screen update 
  Application.ScreenUpdating = True

End Sub

'********************************************************
'* GetColumnIndex()
'********************************************************
'* return column's index from column letters
'********************************************************

Function GetColumnIndex(sColLetter As String) As Integer
    Dim n As Integer: n = 0
    Dim iMax As Integer: iMax = Len(sColLetter)
    Dim i As Integer
    Dim sChar As String
    Dim c As Integer

    For i = 1 To iMax
        sChar = Mid(sColLetter, i, 1)
        c = 1 + Asc(sChar) - Asc("A")
        n = n * 26 + c
    Next

    If n = 1 Then
      n = 1
    End If

    GetColumnIndex = n
End Function

このコードのロジックは

A.垂直に結合されたヘッダーセルの結合を解除して、行2にフィルターを追加できるようにします

Range("A1:A2").MergeCells = False

セルA1とA2は結合されていません。

B.行2のすべてのセルにオートフィルターを追加する

Range("A2:Z" & nLast).AutoFilter

AutoFilterは、行1を除くすべての行のセルに対して生成されます。

C.一部の列のFILTER Comboboxを削除または非表示にする

Selection.AutoFilter Field:=GetColumnIndex("C"), VisibleDropDown:=False

列「C」のDropBoxは非表示です。

D.未結合のセルを結合して元の状態に戻す

Range("A1:A2").MergeCells = True

セルA1とA2が再び結合されます。


0

Excel 2007は、複数行ヘッダーがあるかどうかをスマートに検出できます。これを書く直前に簡単な実験をしました。

最初のソートを行う前に、ヘッダーのすぐ下にカーソルを置きます。それでおしまい!ソートは問題ありませんが、フィルタリングは問題ありません。Excelはヘッダーの1行目を無視しました。2行目を実際のヘッダーとして処理するだけです。


3
いいえ、これは機能しません。これは、Excel 07で複数行のヘッダを自動検出できるというのは本当だ、いくつかの例が、それはあなたがクリックしないでどのセルにセルの内容に基づいています。たとえば、最初の2行がテキストで、下のすべてが数値の場合、Excelは最初の2行が両方のヘッダーであると想定します。
ジョシュ

0

ソートする必要があるセル(ヘッダーを除くすべて)を強調表示して、フィルターを選択します。


0

Excel 2010を使用しています。見出し行(最初の4行など)を保持するには、行5を強調表示してからフィルターをオンにします。行1から4はフィルターから除外されます。


0

私は同じ問題を抱えていたので、誰もが貢献してくれたので、私にとってはこれまでのやり方になりました。

  1. 複数行ヘッダーの下に空白行を追加します(ヘッダーが5行の情報や奇数のセルサイズの場合、新しい空白行はRow6になります)。

  2. Row6をクリックします(左端まで/実際に "6"(Excel行番号)をクリックして行全体を選択します/無限まで)。以下の#3と#4を完了するまで、他のセルをクリックしないでください。そうしないと、行の選択が解除されます。「選択済み」のままにしておきます。

  3. [表示]タブに移動し、[ペインをフリーズ]> [フリーズ解除](最初にクリアしてクリアします)> [フリーズ]。これにより、5行のヘッダーと空白行(row6)もフリーズします。

  4. 「ALT」を押しながら、次のキーを押します:D、F、F(これは、シート上のすべてのフィルターをオン、オフ/オフにするショートカットです。

  5. この時点から、このシートの使用に戻ってフィルターをオンにする必要がある場合(以前に何らかの理由でフィルターをオフにした場合)、>空白行を選択します(#2で説明)。>すべてのフィルターをオンにします(#4で説明)。

言葉が多すぎて申し訳ありませんが、何度かやってみれば、きっと気に入ってくれるでしょう(フィルターをたくさん使うなら)。


0

ステップ1下部のヘッダー行を強調表示します。そして、行のセルだけを選択することも、行全体を選択することもできます。

ステップ2次に、[ホーム]タブの[並べ替えとフィルター]をクリックし、[フィルター]を選択します。Excelは、すべての列名にフィルター矢印を追加します。

次に、ステップ3で矢印をクリックし、後でソートオプションを選択して、その列でテーブル全体をソートします。

ステップ4最後に、[並べ替えとフィルター]をクリックし、矢印を削除したいがフィルターによって定義された並べ替え領域を維持する場合は、もう一度[フィルター]を選択します。これで通常どおりに並べ替えることができ、Excelは余分なヘッダー行を無視します


-1

場合によっては、2番目の列にフィルターを含める値を入力し、そのセルのテキストをセルの背景色と一致させる方法もあります。ヘッダー(行1)がセルの水平方向の中央に配置されないため、それほどきれいではありませんが、機能します...


-1

私は同じ問題を抱えていて、自分に合った解決策を見つけました。ヘッダー内の見たくない行ごとに、文字を白(または背景色)にします。並べ替えると、行にすべて同じヘッダーが表示されません。何かを変更したい場合は悪くなりますが、その場合は明るい灰色にすることもできます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.