原谅我,因为这可能很简单。我正在尝试创建一个VBA宏,可以快速从原始数据中获取统计信息并将它们放在表中。原始数据采用以下格式:
(他们不会总是三人一组)
我如何获得所有类别的范围,然后对列B和C使用相同的范围来获取我需要的统计数据?
答案 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
下面是我给它的输入数据: -
以下是代码的输出: -
答案 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