Re: [VBA ] 請教這樣的if的邏輯要怎麼寫

看板Visual_Basic作者 (喲)時間11年前 (2013/01/28 08:48), 編輯推噓1(103)
留言4則, 2人參與, 最新討論串2/2 (看更多)
※ 引述《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
請問你這是VBA與法嗎??我把他存在EXCEL去跑..
01/31 22:39, 2F

01/31 22:40, , 3F
有些涵式 名稱VBA不認得...
01/31 22:40, 3F

01/31 23:58, , 4F
當然是省略比較基礎的定義,像SumData就是把 +抽象化
01/31 23:58, 4F
文章代碼(AID): #1H1ShuS5 (Visual_Basic)
文章代碼(AID): #1H1ShuS5 (Visual_Basic)