excel,vba或regex根据重复值向下复制值

时间:2015-08-05 19:31:07

标签: regex excel vba excel-vba

我有以下记录:

62      
STARTHERE   1.1 vol. 84 no. 1 1996  01.1 A 0 1 1996 04 24 0
STARTHERE   1.2 vol. 84 no. 2 1996  01.2 A 0 1 1996 05 23 0
STARTHERE   1.3 vol. 84 no. 3 1996  01.3 A 1 1 1996 08 13 0
STARTHERE   1.4 vol. 84 no. 4 1996  01.4 A 0 1 1996 10 15 0
STARTHERE   1.5 vol. 84 no. 5 1996  01.5 A 0 1 1997 01 22 0
STARTHERE   1.6 vol. 84 no. 6 1996  01.6 A 0 1 1997 02 10 0
63      
STARTHERE   1.1 95:1 Feb 2002   1.1 A 0 1 2002 06 03 0
STARTHERE   1.2 95:2 Apr 2002   1.2 A 0 1 2002 06 17 0
STARTHERE   1.3 95:3 Jun 2002   1.3 A 0 1 2002 07 18 0
STARTHERE   1.4 95:4 Aug 2002   1.4 A 0 1 2003 02 24 0
STARTHERE   1.5 95:5 Oct 2002   1.5 A 0 1 2003 02 24 0
64
65
STARTHERE   1.1 34:1 Mar 1996   1.1 A 0 1 1996 07 16 0
STARTHERE   1.2 34:2 Jun 1996   1.2 A 0 1 1996 09 19 0
STARTHERE   1.3 34:3 Sep 1996   1.3 A 0 1 1996 12 17 0

我不知道excel中是否可能,excel中的vba甚至是正则表达式。我想填充最低的数值(例如62)并用值" STARTHERE"替换下面的行。直到下一个数值(63)。现在,它是手动完成的,但我在想是否有办法机械地做到这一点。通过excel公式,VBA或正则表达式,因为这些是我熟悉的。所以我可以到达下面,也可以去掉右边空白值的62,但即使它不是,我也很好:

62  
62  1.1 vol. 84 no. 1 1996  01.1 A 0 1 1996 04 24 0
62  1.2 vol. 84 no. 2 1996  01.2 A 0 1 1996 05 23 0
62  1.3 vol. 84 no. 3 1996  01.3 A 1 1 1996 08 13 0
62  1.4 vol. 84 no. 4 1996  01.4 A 0 1 1996 10 15 0
62  1.5 vol. 84 no. 5 1996  01.5 A 0 1 1997 01 22 0
62  1.6 vol. 84 no. 6 1996  01.6 A 0 1 1997 02 10 0
62
62  1.1 95:1 Feb 2002   1.1 A 0 1 2002 06 03 0
63  1.2 95:2 Apr 2002   1.2 A 0 1 2002 06 17 0
63  1.3 95:3 Jun 2002   1.3 A 0 1 2002 07 18 0
63  1.4 95:4 Aug 2002   1.4 A 0 1 2003 02 24 0
63  1.5 95:5 Oct 2002   1.5 A 0 1 2003 02 24 0
64
65
65  1.1 34:1 Mar 1996   1.1 A 0 1 1996 07 16 0
65  1.2 34:2 Jun 1996   1.2 A 0 1 1996 09 19 0
65  1.3 34:3 Sep 1996   1.3 A 0 1 1996 12 17 0

非常感谢!

1 个答案:

答案 0 :(得分:3)

我假设这些数据来自Excel电子表格,其中包含数值和值" STARTHERE"在第一列(A列)。其他数据在B,C等栏目

基本上,我将从顶部到底部的第一列循环。如果选择器单元格中的值不是数字,则它将等于它上面的值。如果是,那么我们跳到下一个单元格。

  Sub help()
        ActiveSheet.Columns(1).NumberFormat = "0"
        For i = 1 To ActiveSheet.UsedRange.Rows.count
            If Not Information.IsNumeric(Cells(i, 1)) Then Cells(i, 1).value = Cells(i - 1, 1).value
        Next i
    End Sub