在MS Excel中合并行

在MS Excel中合并行,excel,Excel,我在excel中有以下形式的一些行: 我需要将其转换为以下形式: 我不是MS Excel的好用户,我使用的是法语版本 谢谢试试看 Option Explicit Public Sub MergeRows() Dim rng As Range Dim dict As Object Dim tmp As Variant Dim i As Long, j As Long Dim c, key Set dict = CreateObject("Scri

我在excel中有以下形式的一些行:

我需要将其转换为以下形式:

我不是MS Excel的好用户,我使用的是法语版本

谢谢

试试看

Option Explicit
Public Sub MergeRows()
    Dim rng As Range
    Dim dict As Object
    Dim tmp As Variant
    Dim i As Long, j As Long
    Dim c, key

    Set dict = CreateObject("Scripting.dictionary")
    dict.CompareMode = vbTextCompare
    ' Change this to where your source data is
    With Sheet17
        Set rng = .Range(.Cells(2, 10), .Cells(.Cells(.Rows.Count, 10).End(xlUp).Row, 10))
    End With

    For Each c In rng
        If Not dict.exists(c.Value2) Then
            ReDim tmp(1 To 3)
            dict.Add key:=c.Value2, Item:=tmp
        End If
        j = 1
        tmp = dict(c.Value2)
        Do
            If Not c.Offset(0, j).Value2 = vbNullString Then tmp(j) = c.Offset(0, j).Value2
            j = j + 1
        Loop Until j > UBound(tmp)
        dict(c.Value2) = tmp
    Next c
    ' Change this to where you want your output
    With Sheet17.Range("A2")
        i = 0
        For Each key In dict.keys
            .Offset(i, 0).Value2 = key
            .Offset(i, 1).Resize(, UBound(dict(key))) = dict(key)
            i = i + 1
        Next key
    End With
End Sub

有趣的问题,这里是我使用公式的想法,但肯定有更好的解决方案

它使用选项列右侧的三个辅助列:

1-通过查找行中的(第一个)非空白单元格(按照说明),确定选择了哪个选项。将第一个范围作为标题行(option1、option2、…optionn),将第二个范围作为从option1到optionn的行。它应该是这样的:
=INDEX($K$1:$M$1,MATCH(FALSE,ISBLANK(K2:M2),0))
,注意它应该是一个数组公式(ctrl+shift+enter)

2-使用简单的索引+匹配来注册选择。假设第一个helper列位于列N中,这是:
=索引(k2:m2,MATCH(n2,$k$1:$m$1,0))

3-连接地址和选项名称,以便能够查找地址选项组合。这很简单:
=J2&N2

完成此操作后,您将创建一个简单的表,在最左边的列中只包含单个地址,并将选项作为标题行(根据地址的数量,您可能希望使用透视表来填充它们)。然后进行索引匹配以查找结果:
=索引($O$2:$O$6,匹配($J9&K$8,$P$2:$P$6,0))


您应该这样做。

值是否总是来自日期名称?(星期一到星期天)不,是迪菲租的。