!!请教VB达人写个简单的excel宏!!急!!

来源:百度知道 编辑:UC知道 时间:2024/06/06 18:28:46
是很简单的一个数据处理。要求是:
给出两列数据,比如A1:A5000 和 B1:B5000,A和B两列数据都是从0到100里选取的随机数字。现在要做的工作是:设定区间(20, 40),对于没一行数据,比如(A1,B1),把落在(20, 40)区间内的长度截取出来。
具体如下:
(A1,B1) = (10,30)的话,这个长度就是 30-20=10.
(A2,B2) = (25,35)的话,这个长度就是 35-25=10.
(A3,B3) = (37,90)的话,这个长度就是 40-37=3.
(A4,B4) = (15,65)的话,这个长度就是 40-20=20.

总之是写个小程序处理这两列数据,把截出来的长度列在C列。
对VB一窍不通,经常用的人,应该很容易就写出来了吧?谢谢帮忙哦!

旁边建个小按钮,贴入如下代码:

Sub 按钮1_Click()
'
' 按钮1_Click Macro
'

'
Range("C1").Select
ActiveCell.FormulaR1C1 = "=ABS(MAX(MIN(RC[-1],40),20)-MAX(MIN(RC[-2],40),20))"
Range("C1").Select
Selection.AutoFill Destination:=Range("C1:C5000")
Range("C1:C5000").Select
End Sub

这个首先你要保证B列数据大于A列,不用宏,用公式即可,在C1输入以下公式,向下填充:
=IF(B1<20,-1,IF(A1>40,-1,IF(A1<20,IF(B1>40,40,B1)-20,IF(B1>40,40,B1)-A1)))

如果B列小于20,A列大于40,结果为-1表示出界

如果一定是B列比A列大
C1=MIN(B1,40)-MAX(A1,20)
如果A列和B列大小不一定
C1=ABS(MAX(MIN(B1,40),20)-MAX(MIN(A1,40),20))
向下复制公式。