0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Excelメモ:前の行と同じ値を繰り返し表示しない(オートフィルタ対応)

Last updated at Posted at 2019-05-27

Excelで、前の行と同じ値を繰り返し表示したくない、というのは、よくある要望です。

条件付き書式 お手軽版

値消したりするのはめんどいので、条件付き書式で文字を白(背景色と同じ色)にして対応してます。

fig01.png

「ホーム」リボンの条件付き書式
> 新しいルール
> 数式を使用して書式設定するセルを決定

と進んで、数式のとこに上のセル(上のスクショだとA1)との比較を入力。
(相対参照で書いておけば、これで全行対応できる)
一致したらtrueが返るので、書式が適用されて、文字が白くなる。

簡単で良いのですが、オートフィルタで絞り込みをすると、残念な結果になります。

fig02.png

あくまで「相対参照された、一つ上のセル」と比較してるだけなのです。
そのセルがフィルタで非表示になっていても、知ったことではないのです。

正しい動作ですが、これじゃない、ということもあります。

オートフィルタ対応版

Subtotalだとか、Vlookupだとか、MatchとかIndirectとか、セル関数をこね回して、作業用の列つくって、ぐしゃぐしゃしててみたものの。

結局、面倒になって関数書きました。

上の(表示されてる)セルと比較して、trueかfalseを返します。

' 渡されたセルと、その上のセル(表示されているもの)を比較する
Function compareToVisibleUpperCell(rng As Range) As Boolean

    Dim tmpRow As Long
    
    ' デフォルトfalse返す
    compareToVisibleUpperCell = False
    
    ' 渡されたセルが1行目なら比較せず終了
    If rng.Row = 1 Then Exit Function
    
    ' 1行上から、上向きにチェック
    For tmpRow = rng.Row - 1 To 1 Step -1
        ' 表示されていれば
        If Rows(tmpRow).Hidden = False Then
            ' 内容が同じならtrueにする
            If Cells(tmpRow, rng.Column) = rng Then _
                compareToVisibleUpperCell = True
            ' これ以上チェック不要
            Exit Function
        End If
    Next
End Function

で、条件付き書式の条件をこの関数にして

fig03.png

オートフィルタかけてみる。

fig04.png

パフォーマンスとかは未検証ですが、とりあえず調子よく動いてます。

ネイティブのシート関数でこうやればうまくいくぜ!というのがあれば、ぜひ教えてほしいです。

0
1
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?