[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『オートフィルタ』(popo)
オートフィルタは一行一行しか対応してないのですか?今、A2とA3のセルを結合(以下A4とA5、A6とA7・・・・)しているのですが、A2には文字が入っていると認識されて、A3は空白のセルとなってしまうのです。A列には日付が入っていて、オートフィルタを使って分けたいと思っているのですが・・・
オートフィルタは簡易なデータベース機能です。 データベースとセルの結合は非常に相性が悪いので、 併用しないような運用が必要です。 フィル多機能を使うなら、一行に完結したデータの集合でなければなりません。 セル結合したレイアウトが必要なら、一行一データのデータベースから 関数などで所定の位置へデータを抽出するようなつくりが必要です。 (簡易な回避手段として、一列追加して、A列の内容を一行一行に入力 してその追加した行でフィルタをかけるという方法はあります。 B列を追加して、A2:A3を結合しているのなら、A2の内容をB2、B3へそれぞれ入力) (KAMIYA)
他に方法はないですかね? (popo)
そのままのレイアウトを保ったままであれば、強引なマクロになります。
A列の最下端セルにでも=NOW()などの揮発性関数を入力して
おいてください。安定性、操作性、表示性に問題があります。
データの保持は保障しませんので、試す場合には元データは
自己責任で保存しておいてください。
Private Sub Worksheet_Calculate()
REM TEST_20040826
Dim MyCtr
Dim MyRow As Long
Dim C As Range
Application.EnableEvents = False
On Error Resume Next
If Me.AutoFilterMode Then
With Me.AutoFilter
MyCtr = WorksheetFunction.Substitute(.Filters(1).Criteria1, "=", "")
If MyCtr = "" Then
Application.EnableEvents = True
Exit Sub
End If
End With
Cells.AutoFilter
MyRow = Range("B65536").End(xlUp).Row
Range("A1:A" & MyRow).Copy
Range("B1:B" & MyRow).Insert CopyOrigin:=True
Application.CutCopyMode = False
For Each C In Range("B2:B" & MyRow)
C.MergeCells = False
If C.Value = "" Then C.Value = C.Offset(-1, 0).Value
If C.Value = MyCtr Then
C.EntireRow.Hidden = False
Else
C.EntireRow.Hidden = True
End If
Next C
Range("B1:B" & MyRow).Delete
Cells.AutoFilter
End If
Application.EnableEvents = True
End Sub
上記マクロは「似た表示」を「腕力」で何とかしているものと
ご了解ください。
なお、先にも書いたとおり、私はセル結合を含むシートをデータベースとして
使用することに反対の立場ですので、本来ならこのようなマクロを
公表すべきではないと思っています。したがって、使用法、手直しなど
このマクロについてはフォローはいたししかねますので、ご了承ください。
コードを見てわからない場合は使用をおやめください。
(常用するには不安定すぎてデータを壊す可能性があるため。)
マクロを使いこなせない場合はデータベースのほうを工夫すべきであると
いうのが私の結論です。
(KAMIYA)
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.