Excels 之 循环语句的简易用法

注:用法为个人经验总结,仅供参考,欢迎指正

一 For 循环

1.1 单个循环
假如我想把 excel 的 Sheet2 包含的季度数据求同比增量,也就是这一年的数据减上一年的同季度数据。倘若只针对某一季度,要在某一列单独列第一季度的增量,我们可以使用 Sheet2.Cells():

For i = 1 To 25
Sheet2.Cells(30 + i, 7) = Sheet2.Cells(30 + i * 4, 6) - Sheet2.Cells(30 + (i - 1) * 4, 6)
Next

这样第七列出现的就是第 6 列的数据每隔四个相减一次的同比值,而且仅仅针对想要的那个季度,Sheet 后面紧跟的数字根据 Excel的不同工作簿进行更换。
Next 是一个 For 循环语句一定要写的东西,后面可以空着。

如果我们想把四个季度的同比增量按顺序放在一起,可以使用 Sheet2.Range().value:

For i = 30 To 100
t = i - 4
Sheet2.Range("G" & i).Value = Sheet2.Range("F" & i).Value - Sheet2.Range("F" & t).Value
Next

当然,对于第二种情况,我们完全也可以通过直接另起一单元格,输入 “F30-F26” 然后下拉单元格获得 (๑◕ܫ←๑)b

1.2 嵌套循环
在这里插入图片描述

首先把此处的 “通用” 改为 “worksheet”,假设我们要把每个年度的 CPI 变成 4 个相同的 CPI,来平减当年 4 个季度的收入 (此处仅为举例,当然最好还是用当季 CPI 来平减),可输入如下代码:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim i%, t%
For i = 1 To 27
For t = 1 To 4

m = t + 4 * i
n = i + 4

Sheet1.Range("AI" & m).Value = Sheet1.Range("A" & n).Value
Sheet1.Range("AJ" & m).Value = Sheet1.Range("AG" & n).Value

Next t
Next i
End Sub

其中 A 列为时间 (年度),AG 列为 CPI (年度);
输出效果如下:
输出的CPI
二、Do 循环
2.1 Do…if…exit do 形式

假设想要把股票日收盘值转变为平均季度值如下,由于已下载的数据日期是 2020/7/1 形式,反正我尝试用了 month 函数但无法运行代码,于是使用 mid() 函数识别字符串,输出中间字符 (H列)、季度归属 (I列) 以及平均季度值 (M列) 如下:
在这里插入图片描述
我没有 find 函数,也不会调用,所以就用了一个 DO 循环,比较前后季度归属是否相同,相同的话就计入总是,不同的话就终止这个循环。然后利用

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
For i = 2 To 6732
Cells(i, 8) = Mid(Cells(i, 1), 6, 2)

If Mid(Cells(i, 1), 6, 2) = "1/" Or Mid(Cells(i, 1), 6, 2) = "2/" Or Mid(Cells(i, 1), 6, 2) = "3/" Then
Cells(i, 9) = "一季度"
End If

If Mid(Cells(i, 1), 6, 2) = "4/" Or Mid(Cells(i, 1), 6, 2) = "5/" Or Mid(Cells(i, 1), 6, 2) = "6/" Then
Cells(i, 9) = "二季度"
End If

If Mid(Cells(i, 1), 6, 2) = "7/" Or Mid(Cells(i, 1), 6, 2) = "8/" Or Mid(Cells(i, 1), 6, 2) = "9/" Then
Cells(i, 9) = "三季度"
End If

If Mid(Cells(i, 1), 6, 2) = 10 Or Mid(Cells(i, 1), 6, 2) = 11 Or Mid(Cells(i, 1), 6, 2) = 12 Then
Cells(i, 9) = "四季度"
End If

Next i







t = 3
j = 2

m = t
m2 = m - 1


Dim k

For k = 1 To 111
n = 0
Sum = 0
Do

If Cells(m, 9) <> Cells(m2, 9) Then

Sum = Sum + Cells(t - 1, 4)
t = m + 1
Cells(j, 13) = Sum / (n + 1)
j = j + 1
Sum = 0
Exit Do
End If

Sum = Sum + Cells(m, 4)
m = m + 1
m2 = m - 1
n = n + 1
Loop

m = m + 1
m2 = m - 1
Next k





End Sub

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值