Excel VBA - 选择例程

时间:2015-08-24 11:42:11

标签: excel-vba vba excel

所以我有这样一张桌子:

假设潮汐时间为A栏,潮汐高度栏B

Tidal Time  Tidal Height
00:00:00    
01:00:00    
02:00:00    
03:00:00    
04:00:00    4.5
05:00:00    
06:00:00    
07:00:00    
08:00:00    
09:00:00    
10:00:00    2.1
11:00:00    
12:00:00    
13:00:00    
14:00:00    
15:00:00    
16:00:00    4.5
17:00:00    
18:00:00    
19:00:00    
20:00:00    
21:00:00    
22:00:00    1.9
23:00:00    

我需要的是excel-VBA中的选择例程,如下所示:
 找到最后一个非空值(在本例中为1.9)
 选择最后一个空值  选择每个单元格直到下一个非空值。 (在这种情况下为4.5)
 使用以下代码趋势:
Selection.DataSeries Rowcol:=xlColumns, Type:=xlLinear, Date:=xlDay, _ Trend:=True
 再次选择该单元格(4.5)
 选择每个单元格直到下一个非空值(在本例中为2.1)
 趋势。
 选择完成的单元格(2.1)
 选择每个单元格直到下一个非空值(在这种情况下,表格顶部为4.5)
 趋势。

几乎所有这些都需要发生。  能否解释一下这个过程?我一直很困惑。要做到这一点有很多不同的方法,这并没有帮助。提前谢谢!

1 个答案:

答案 0 :(得分:3)

您可以使用Range.End()方法查找下一个(或最后一个)非空单元格。在你的情况下,你会从下往上工作。例如,要查找最后一个非空单元格(1.9):

Set LastCell = Activesheet.Cells(ActiveSheet.Rows.Count,2).End(xlUp)

Do While LastCell.Row > 2

    If LastCell.Offset(-1,0) = "" then
        Set NonEmptyCellAboveLastCell = LastCell.End(xlUp)
    Else
        Set NonEmptyCellAboveLastCell = LastCell.Offset(-1,0)
    End If

    If NonEmptyCellAboveLastCell.Row > 1 Then
        Set RangeToFill = ActiveSheet.Range(NonEmptyCellAboveLastCell, LastCell)
        RangeToFill.DataSeries Rowcol:=xlColumns, Type:=xlLinear, Date:=xlDay, Trend:=True

        If NonEmptyCellAboveLastCell.Offset(-1,0) = "" then
            Set LastCell = NonEmptyCellAboveLastCell.End(xlUp)
        Else
            Set LastCell = NonEmptyCellAboveLastCell.Offset(-1,0)
        End If

    Else
        Set LastCell = ActiveSheet.Range("B1")
    End If
Loop

请注意,End方法将跳转到下一个非空单元格或连续范围的非空单元格中的最后一个非空单元格,因此您需要检查相邻单元格是否为空。 / p>