web-dev-qa-db-ja.com

結合されたセルのExcelフィルタリング

私は、従業員が取り組んだ各プロジェクトの各従業員の労働時間を計算しようとしています。しかし、従業員の名前が含まれているセルが図のように結合されているので、選択方法がわかりません。そして、私がプロジェクトで見たい場合は、いいえ。 3は作業を行った従業員です。Excelフィルタリングは、プロジェクト1にのみ対応する「ジョン」という名前を付けることはできません。より明確にするために、セルA3とA4に対してフィルタリングがどのように行われるかを知る必要があります。セルの結合を解除すると、ジョンはセルA2だけになり、実際にはプロジェクト2および3にも取り組みました。

ありがとう!

Excel screenshot

3

マージされたセルがあり、それをフィルタリングしようとすると、最初の行のみが取得されます。
Rows with Merged Cells
Filtered Merged Cells only shows first row

これを修正するには、最初に別の場所に結合セルを作成し、フィルターセルの結合を解除して、すべてのセルに値を入力する必要があります。
Table cells unmerged, merged cells on right

次に、マージされたセルをコピーし、マージしたいセルに[形式を選択して貼り付け]> [形式]を貼り付けますwant
Copying the Merged Cells and using Paste Special to put format in data table
The Merged Cell formatting pasted in place

これで、一時的に結合されたセルを削除できます。フィルターを適用すると、結合されたセルのall行が取得されます。
enter image description here


{EDIT}これは、指定された範囲に上記の変更を自動的に適用するマクロです:

Public Sub FilterableMergedCells()
    Dim WorkingRange As Range
SelectRange:
    Set WorkingRange = Nothing
    On Error Resume Next
    Set WorkingRange = Application.InputBox("Select a range", "Get Range", Type:=8)
    On Error GoTo 0
    'If you click Cancel
    If WorkingRange Is Nothing Then Exit Sub
    'If you select multiple Ranges
    If WorkingRange.Areas.Count > 1 Then
        MsgBox "Please select 1 continuous range only", vbCritical
        GoTo SelectRange
    End If

    Dim ScreenUpdating As Boolean, DisplayAlerts As Boolean, Calculation As XlCalculation
    ScreenUpdating = Application.ScreenUpdating
    DisplayAlerts = Application.DisplayAlerts
    Calculation = Application.Calculation

    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
    Application.Calculation = xlCalculationManual

    Dim WorkingCell As Range, MergeCell As Range, MergeRange As Range, OffsetX As Long, OffsetY As Long
    OffsetX = WorkingRange.Cells(1, 1).Column - 1
    OffsetY = WorkingRange.Cells(1, 1).Row - 1
    'Create temporary sheet to work with
    With Worksheets.Add
        WorkingRange.Copy .Cells(1, 1)
        'Loop through cells in Range
        For Each WorkingCell In WorkingRange.Cells
            'If is a merged cell
            If WorkingCell.MergeCells Then
                'If is the top/left merged cell in a range
                If Not Intersect(WorkingCell, WorkingCell.MergeArea.Cells(1, 1)) Is Nothing Then
                    Set MergeRange = WorkingCell.MergeArea
                    'Unmerge cells
                    MergeRange.MergeCells = False
                    'Replicate value to all cells in formerly merged area
                    For Each MergeCell In MergeRange.Cells
                        If WorkingCell.FormulaArray Is Null Then
                            MergeCell.Formula = WorkingCell.Formula
                        Else
                            MergeCell.FormulaArray = WorkingCell.FormulaArray
                        End If
                    Next MergeCell
                    'Copy merge-formatting over old Merged area
                    .Cells(WorkingCell.Row - OffsetY, WorkingCell.Column - OffsetX).MergeArea.Copy
                    WorkingCell.PasteSpecial xlPasteFormats
                End If
            End If
        Next WorkingCell
        .Delete
    End With

    Set MergeRange = Nothing
    Set WorkingRange = Nothing

    Application.ScreenUpdating = ScreenUpdating
    Application.DisplayAlerts = DisplayAlerts
    Application.Calculation = Calculation
End Sub
3
Chronocidal

Filterを使用します。マージされたセルを処理するのに十分スマートです。たとえば、次のようなフィルターがある場合:

enter image description here

プロジェクト2、3、4をフィルターすると、次のようになります。

enter image description here

大丈夫です。

0
Vityata