我如何制作一个循环将每个单元格划分 3 次?

How I can make a loop to divide each cell 3 times?

我已经下载了美国国内生产总值,但这最初是按三个月计算的,我需要它我的月份,因此,我想将 GDP 的每个单元格除以 3 以使我的时间序列更长并能够绘制按月计算:我想在 VBA 中创建一个循环,将 GDP 列表的每个值除以 3 次,然后将其放在计算的每个新值下方:

Sub PIB()

Set lista = Range("D13:D275")

For Each cell In lista
    For i = 1 To 3
        Range("E13").Offset(i - 1, 0).Value = cell.Value / 3
    Next i
Next cell

End Sub

尽管如此,当我 运行 它时,它正常分裂但刚好超过前 3 个细胞:

我想有效地将​​每个单元格划分 3 次,并将每个值放在彼此下方,我该怎么做?

如果您需要将每个值分成三行,请使用下一个代码:

Sub SplitOnThreeMonths()
 Dim sh As Worksheet, arr As Variant, arrFin As Variant, lastR As Long
 Dim i As Long, j As Long, k As Long
 
   Set sh = ActiveSheet
   lastR = sh.Range("D" & Rows.count).End(xlUp).row
   arr = sh.Range("D13:D" & lastR).Value
   ReDim arrFin(1 To UBound(arr) * 3, 1 To 1)
   k = 1
   For i = 1 To UBound(arr)
    For j = 1 To 3
       arrFin(k, 1) = arr(i, 1) / 3: k = k + 1
    Next j
   Next i
   sh.Range("E13").Resize(UBound(arrFin, 1), UBound(arrFin, 2)).Value = arrFin
End Sub

它也将允许相同的国内生产总值,即使发生这种情况的可能性不大。但是,谁知道呢?

我假设您需要插入 2 行以使 space 的除法值三次 -

但是如果您不需要保留相邻列中的数据位置,使用数组提供的其他答案比这个更好:

Sub PIB()
For i = 275 To 13 Step -1
    Rows(i + 1 & ":" & i + 2).Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
    Range(Cells(i, "E"), Cells(i + 2, "E")).Value2 = Cells(i, "D").Value2
Next i
End Sub

请注意,我没有限定您的范围,因为我不知道您希望它们是什么,我猜这是您当前使用的sheet。

这是您正在尝试的吗:

Sub PIB()

Dim arr As Variant: arr = Range("D13:D275").Value
Dim dict As Object: Set dict = CreateObject("Scripting.Dictionary")
Dim x As Long

For x = LBound(arr) To UBound(arr)
    For i = 1 To 3
        dict.Add Join(Array(arr(x, 1), x, i), "|"), arr(x, 1) / 3
    Next i
Next

Range("E13").Resize(dict.Count).Value = Application.Transpose(dict.Items)

End Sub

注意非显式 Range 引用。