确定并列出给定范围内的所有值,并在一个单元格中列为逗号分隔值

时间:2012-09-24 12:28:49

标签: excel vba excel-vba excel-2007

我正在尝试找到一种方法来列出给定年份范围内的唯一值,并将结果列为一个单元格中的逗号分隔值。在下面的示例中,A列包含我拥有的数据,B列是所需的结果。

Column A  | Column B
2007-2010 | 2007,2008,2009,2010
1999-2001 | 1999,2000,2001

我考虑进入的方向是找到两个数字之间的差异,并根据差异从第一个数字填充系列。然后用逗号分隔符连接一个单元格中的值。所以,基于此,这是我到目前为止:

LR = ActiveSheet.Range("A" & Rows.Count).End(xlUp).Row
    Range("B1").Select
    ActiveCell.FormulaR1C1 = "=RIGHT(RC[-1],4)-LEFT(RC[-1],4)"
    Range("B1").Select
    Selection.AutoFill Destination:=Range("B1:B" & LR), Type:=xlFillDefault
    Range("C1").Select
    ActiveCell.FormulaR1C1 = "=LEFT(RC[-2],4)"
    Range("C1").Select
    Selection.AutoFill Destination:=Range("C1:C" & LR), Type:=xlFillDefault

我没有和这种方法结婚,所以请随意引导我走向另一个方向。

提前致谢!

1 个答案:

答案 0 :(得分:1)

直接VBA这样回答。将rStart更改为数据的第一个单元格:

Sub SplitYears()
Dim rStart As Range, lRow As Long, lYear1 As Long, lYear2 As Long

    Set rStart = Sheet3.Range("A1")
    lRow = 0

    Do While rStart.Offset(lRow, 0).Value <> ""
' Get start and end year
        lYear1 = CLng(Left(rStart.Offset(lRow, 0).Value, 4))
        lYear2 = CLng(Right(rStart.Offset(lRow, 0).Value, 4))
        With rStart.Offset(lRow, 1)
            .ClearContents
            .NumberFormat = "@"
' Append each year with comma
            Do While lYear1 <= lYear2
                .Value = .Value & lYear1 & ","
                lYear1 = lYear1 + 1
            Loop
' Lose final comma
            .Value = Left(.Value, Len(.Value) - 1)
        End With

        lRow = lRow + 1
    Loop
End Sub