看板 Visual_Basic 關於我們 聯絡資訊
※ 引述《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)
zchien:感謝你的指導..你的程式我資質可能不夠..暫時還看不懂.. 01/31 22:38
zchien:請問你這是VBA與法嗎??我把他存在EXCEL去跑.. 01/31 22:39
zchien:有些涵式 名稱VBA不認得... 01/31 22:40
yauhh:當然是省略比較基礎的定義,像SumData就是把 +抽象化 01/31 23:58