Excel VBA逻辑:使用循环获取两个单元格之间的范围

时间:2016-06-08 20:19:38

标签: excel vba

原谅我,因为这可能很简单。我正在尝试创建一个VBA宏,可以快速从原始数据中获取统计信息并将它们放在表中。原始数据采用以下格式:

enter image description here

(他们不会总是三人一组)

我如何获得所有类别的范围,然后对列B和C使用相同的范围来获取我需要的统计数据?

2 个答案:

答案 0 :(得分:0)

下面的代码为您提供每个类别的行号,并假设B列的内容没有中断,您的问题是按类别获取列C:D的内容,这些行值将使您能够编码获得C:D的内容。

Public Sub Sample()
Dim WkSht       As Worksheet
Dim StrCategory As String
Dim LngRow      As Long
Dim LngRowStart As Long

Set WkSht = ThisWorkbook.Worksheets("RawData")
    'Take note of the category we are one
    StrCategory = WkSht.Range("A" & 2).Value

    'Take not of the row the category started on
    LngRowStart = 2

    'Look to the next row
    LngRow = 3

    'Loop through the data until column B has no value, signifying the end of the dataset
    Do Until WkSht.Range("B" & LngRow) = ""

        'Go to the next row until we are given a new category or make it to the end of the dataset
        Do Until (WkSht.Range("A" & LngRow) <> "") Or (WkSht.Range("B" & LngRow) = "")
            LngRow = LngRow + 1
        Loop

        'Talk in the immediate pane
        Debug.Print StrCategory & " is on rows " & LngRowStart & " to " & LngRow - 1

        'Get the next values
        StrCategory = WkSht.Range("A" & LngRow)
        LngRowStart = LngRow

        'Move on
        LngRow = LngRow + 1
    Loop
Set WkSht = Nothing

End Sub

下面是我给它的输入数据: -

Input

以下是代码的输出: -

Output

答案 1 :(得分:0)

您可以使用一些If语句并将其全部转换为数组,但只是填写空白似乎更直接

Sub FillColA()

    Dim LastRow As Long

    LastRow = Application.WorksheetFunction.CountA(Range("B:B"))
    Range("A2:A" & LastRow).SpecialCells(xlCellTypeBlanks).FormulaR1C1 = "=R[-1]C"

End Sub