作者yauhh (哟)
看板Visual_Basic
标题Re: [VBA ] 请教这样的if的逻辑要怎麽写
时间Mon Jan 28 08:48:40 2013
※ 引述《zchien (小建)》之铭言:
: 有数10比栏位
: 下面分别有a结尾和b结尾的data如下
: A栏位 B栏位 C栏位 D栏位
: 201a 201a 201a 201a
: 202a 202a 202a 202a
: 203a 203a 203a 203a
: 204a 204a 204a 204a
: 1234b 205a 205a 205a
: 1235b 206a 206a 1234b
: 207a 1234b 1235b
: 1234b 1235b 1236b
: 1235b 1236b
: 1236b
: 我希望写一个储存格...那储存格内...
: 需要填入该栏位...a结尾的最後一个data..和所有b结尾data
: 例如..A栏位最下面建立一个储存格...那格内会填入204a+1234b+1235b
: B栏位最下面建立一个储存格...那格内会填入207a+12234b+1235b+1236b
: C栏位最下面建立一个储存格...那格内会填入206a+1234b+1235b+1236b
: 这逻辑要怎麽写呢...
: 我想到的是...如果是b的话..可以用if去撷取出来..
: 但是a的话...要怎麽判定是最後一笔资料...并且撷取出来呢???
处理Excel资料,有点麻烦,首先要很清楚定义资料分布的方式,
资料分布方式+资料内容都是你的程式输入规格.
目前你的规格是:
1. 每一行都是一些a资料,接着一些b资料,然後是空白符号
2. 每一行第一笔b资料的前一笔,是最後一笔a资料.
以下逻辑只能符合上述资料内容.
逻辑上就是先定义以下几个单元函数:
1. Function IsDataEmpty(ColNo, RowNo): 传回真伪,代表 (ColNo, RowNo)
格子是否空内容.
2. Function IsDataA(ColNo, RowNo): 传回真伪,代表 (ColNo, RowNo) 格子
是否为a资料.
3. Function IsDataB(ColNo, RowNo): 传回真伪,代表 (ColNo, RowNo) 格子
是否为b资料.
4. Function LastDataAIndex(ColNo): 传回整数,代表最後一笔a资料的列号,
如果列号为0,代表这一行不包含a资料
内容为
i = 1
LastDataAIndex = 0
while not IsDataB(ColNo, i) and not IsDataEmpty(ColNo, i)
LastDataAIndex = i
i = i + 1
wend
5. Function Data(ColNo, RowNo): 传回文字,代表 (ColNo, RowNo) 资料内容.
6. Function SumData(Data1, Data2): 传回 Data1 + Data2 的结果.
最後可以有这个函数,求一行的答案:
Function SumCol(ColNo)
i = LastDataAIndex(ColNo)
if i <> 0 then
SumCol = Data(ColNo, i)
i = i + 1
end if
while not IsDataEmpty(ColNo, i)
SumCol = SumData(SumCol, Data(ColNo, i))
i = i + 1
wend
End Function
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 118.167.47.147
※ 编辑: yauhh 来自: 118.167.47.147 (01/28 08:49)
1F:推 zchien:感谢你的指导..你的程式我资质可能不够..暂时还看不懂.. 01/31 22:38
2F:→ zchien:请问你这是VBA与法吗??我把他存在EXCEL去跑.. 01/31 22:39
3F:→ zchien:有些涵式 名称VBA不认得... 01/31 22:40
4F:→ yauhh:当然是省略比较基础的定义,像SumData就是把 +抽象化 01/31 23:58