Re: [VBA ] 請教這樣的if的邏輯要怎麼寫
※ 引述《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)
推
01/31 22:38, , 1F
01/31 22:38, 1F
→
01/31 22:39, , 2F
01/31 22:39, 2F
→
01/31 22:40, , 3F
01/31 22:40, 3F
→
01/31 23:58, , 4F
01/31 23:58, 4F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):