excel 为每个唯一值划分值范围

xkrw2x1b  于 2023-02-05  发布在  其他
关注(0)|答案(1)|浏览(115)

我希望有人能帮助我解决这个问题。
我有一个Excel数据框的结构类似于下面的例子:
| 型号|年份|年份|
| - ------|- ------|- ------|
| A类|二○一○年|二〇一二年|
| B|二〇一三年|小行星2020|
我需要将年份范围拆分为每一年的一行。示例如下:
| 型号|年份|
| - ------|- ------|
| A类|二○一○年|
| A类|二○一一年|
| A类|二〇一二年|
| B|二〇一三年|
| B|二〇一四年|
| B|二〇一五年|
| B|二〇一六年|
| B|二〇一七年|
| B|二〇一八年|
| B|二○一九年|
| B|小行星2020|
我想不出有什么可以解决

bvjxkvbb

bvjxkvbb1#

假设您有:

  1. Columns A to CSheetA上的原始数据
    1.您的输出数据位于Columns A to B中的SheetB
    1.其中SheetB已经具有标头ModelYear
    这将遍历SheetB上的所有模型,并从下一行开始输出唯一的Model:Year组合。因此,如果您在SheetB上已经有一些数据,这个宏不会覆盖该数据,而是在下面添加值。
Sub mydearmacro()

Dim a_ws As Worksheet: Set a_ws = ThisWorkbook.Sheets("SheetA")
Dim ws As Worksheet: Set ws = ThisWorkbook.Sheets("SheetB")

Dim a_lr As Long, lr As Long
a_lr = a_ws.Range("A" & a_ws.Rows.Count).End(xlUp).Row

Dim model As String
Dim i As Long, y As Long, x As Long

For i = 2 To a_lr

    model = a_ws.Range("A" & i).Value
    start_year = a_ws.Range("B" & i) - 1
    y = a_ws.Range("C" & i) - a_ws.Range("B" & i) + 1
    lr = ws.Range("A" & ws.Rows.Count).End(xlUp).Row
    
    For x = 1 To y
        ws.Range("A" & lr + x).Value = model
        ws.Range("B" & lr + x).Value = start_year + x
    Next x
    
Next i

End Sub

相关问题