2

自動フィルターはデータを垂直方向に並べ替えていますが、行を水平方向にフィルター処理したいと思います。次の表があるとしましょう。

1 2 2 1 2

BAEFF

BDEFF

CDEFF

私にできることは、自動フィルターを設定し、最初の列に「B」を含む行のみをフィルター処理することです。私がやりたいのは、「2」を含む行のみをフィルタリングすることです(この場合、行は2番目、3番目、最後です)。

私はこの問題に関するいくつかの情報を見つけました。私が見つけたすべての回答には、仕事を遂行するためのいくつかのマクロが含まれていますが、それらはMS Excel用に作成されており、OpenOfficeと互換性がありません

たとえば、このマクロは行をフィルタリングする必要がありますが、OpenOfficeCalcでは機能しません。

Option Explicit

Sub horizontal_filter()
'Erik Van Geit
'060910

Dim LC As Integer           'Last Column
Dim R As Long
Dim i As Integer
Dim FilterValue As String

Const FilterColumn = 1      '1 is most logical value but you may change this

R = ActiveCell.Row
LC = Cells(R, Columns.Count).End(xlToLeft).Column

FilterValue = Cells(R, FilterColumn)

Application.ScreenUpdating = False

'to filter starting after FilterColumn
For i = FilterColumn + 1 To LC
'to filter all columns even before the filtercolumn
'For i = 1 To LC
    If i <> FilterColumn Then
    Columns(i).Hidden = Cells(R, i) <> FilterValue
    End If
Next i

Application.ScreenUpdating = True

End Sub

どんな助けでも大歓迎です!

4

1 に答える 1

3

合理的な費用を想定して、できません。行が列になるようにデータを変換するだけで、はるかに簡単になります。Paste Specialしたがって、オプションと一緒に使用してデータを変換することを強くお勧めしTransposeます。関数を使用して、これを動的に行うこともできTRANSPOSE()ます。

編集:

これでわかりました。特定の値に基づいて列を非表示にしたいとします。これは実際にはマクロを使用して可能であるため、私の最初の答えは間違っていました-申し訳ありません! これを行うマクロがいくつかあります。このようなソリューションを自動フィルターと組み合わせることができます。これは、OpenOffice.org フォーラムの king_026 による解決策です(テーブル構造にわずかに適合 - 以下を参照)。

REM  *****  BASIC  *****
sub hide
   rem ----------------------------------------------------------------------
   rem define variables
   dim document   as object
   dim dispatcher as object
   rem ----------------------------------------------------------------------
   rem get access to the document
   document   = ThisComponent.CurrentController.Frame
   dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

   rem get the current column
   nCol = ThisComponent.CurrentSelection.CellAddress.Column

   rem set the properties for moving right
   dim args2(1) as new com.sun.star.beans.PropertyValue
   args2(0).Name = "By"
   args2(0).Value = 1
   args2(1).Name = "Sel"
   args2(1).Value = false

   rem make thecurrent column counter
   dim cCol as integer
   CCol = 0

   rem goto the first column
   dim args1(0) as new com.sun.star.beans.PropertyValue
   args1(0).Name = "ToPoint"
   args1(0).Value = "$A$2"

   dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args1())

   rem loop until you get back to the selected cell
    Do Until cCol > nCol

    rem hide if the cell value is 1
        if ThisComponent.CurrentSelection.string <> "" and ThisComponent.CurrentSelection.value = 1 then

            rem ----------------------------------------------------------------------
            dispatcher.executeDispatch(document, ".uno:HideColumn", "", 0, Array())

        End if

        rem goto the right nad increment the column counter
        dispatcher.executeDispatch(document, ".uno:GoRight", "", 0, args2())
        cCol = cCol + 1

    Loop

End sub

ということで、以下の表。

計算1

Col1 の Autofilter の後、およびマクロが作業を行った後は、次のようになります。

計算

于 2012-05-18T13:45:06.840 に答える