[算表] VBA合併與轉換多欄(已解決)

作者: jerry7504 (Amo)   2019-10-26 04:16:08
軟體:excel
版本:2013
大家好如上述小弟目前資料型態如下:
學號 測驗次數 國 英 數 國2 英2 數2 延續下去
因為上一個人匯入資料沒有做條件匯入資料庫
現在資料為:
學號 測驗次數 國 英 數 國2 英2 數2 國3 英3 數3
123 2 80 70 70 70 80 90
123 1 70 60 80
照常理來說這個資料應該合併然後加到第三次而並非獨立出來這個資料最多只做4次測驗
需每次做分析不能合併算平均或總成績
小弟的問題是
1.如何將學號合併為多欄並且將下面第一次的資料貼到第三次且次數加至正確數量如下:
學號 測驗次數 國 英 數 國2 英2 數2 國3 英3 數3
123 3 80 70 70 70 80 90 70 60 80
2.假如有各種測驗次數的學生如只做1次的一樣有兩筆如何判斷讓它加到第二次如下:
學號 測驗次數 國 英 數 國2 英2 數2 國3 英3 數3
123 2 80 70 70 70 80 90
123 1 70 60 80
456 1 70 60 80
456 1 60 70 85
結果:
學號 測驗次數 國 英 數 國2 英2 數2 國3 英3 數3
123 3 80 70 70 70 80 90 70 60 80
456 2 70 60 80 60 70 85
3.還有一種情況插入是三次
123 1 70 60 88
123 1 70 60 80
123 1 70 60 83
要考慮以下狀況該怎麼寫呢拜託了
作者: soyoso (我是耀宗)   2019-10-26 10:05:00
1.要有學號唯一值,如果有就不用以下方式方式有a)資料工具的移除重覆range.removeduplicatesb)進階篩選,range.advancedfilterc)dictionaryd)迴圈,判斷,工作表函數countif(是否為0),match(是否為錯誤值)2.有唯一值後填入第一筆資料和找是否有重覆,迴圈於範圍內,或迴圈於range.find,找到以range.copy或range= range.value複製貼上或填入;要確認每筆學號最右側有值儲存格欄號的話,range.end、range.find或工作表函數counta(有連續資料時),欄號的話range.column
作者: jerry7504 (Amo)   2019-10-26 16:15:00
目前唯一值有了可是不知道怎麼去比對2者相同學號後面的所有值 貼上部分如何依序貼呢?
作者: soyoso (我是耀宗)   2019-10-26 16:36:00
巢狀迴圈判斷或是迴圈range.find,就看是否有排序,有的話range.find或是工作表函數match取第一筆出現的列號,迴圈工作表函數countif取得的筆數,位序貼上就要看每筆學號最右側有資料的儲存格或欄號,方式上述回文range.end之後都是再說明這方面,有這個資料range.offset或是欄號+1
作者: jerry7504 (Amo)   2019-10-26 18:09:00
痾小弟不才搞了5小時連後面範圍都選不出來...S大能提供函數或VBA程式嗎xD
作者: soyoso (我是耀宗)   2019-10-26 19:55:00
提供回文所述選不出來的檔案或寫法,再來看看問題是什麼?
作者: jerry7504 (Amo)   2019-10-26 20:56:00
我先重新來不然都亂了s大幫我大概分析一下概念有沒有錯1.篩選唯一學號2.將表二唯一學號跟表ㄧ原始資料比對如果相等將表ㄧ對應學號右邊值抓出2、依照學號依序貼上後面數值
作者: soyoso (我是耀宗)   2019-10-26 21:16:00
如原po回文所述
作者: jerry7504 (Amo)   2019-10-26 21:46:00
目前程式階段跟錯誤https://i.imgur.com/Bb0jf2V.jpg
作者: soyoso (我是耀宗)   2019-10-26 21:53:00
以巨集來看有可能出現這個錯誤的原因是sheet2要改為類似上方工作表1的寫法,如工作表2.range("a:a")之類的如要match尋找完全符合的話,第三個引數不是1,而是0另外也不太了解變數E是什麼?1.不確定這個變數的型態是什麼?range嗎?2.如果是的話,要set該變數
作者: jerry7504 (Amo)   2019-10-26 22:00:00
有改了好像還是一樣還是要加宣告那這個概念寫成這樣有錯嗎?https://i.imgur.com/Qh097Oa.jpg目前改完可以執行但是沒有值https://i.imgur.com/g5bwGMu.jpg
作者: soyoso (我是耀宗)   2019-10-26 22:12:00
可以執行,沒錯誤產生,但沒有值帶入方面還是要從檔案來看因為測試連結的巨集,工作表1有連續資料(二欄以上)是可以將工件表2的b欄資料帶入的如 https://i.imgur.com/KNgCnQm.jpg 儲存格d1有帶入資料
作者: jerry7504 (Amo)   2019-10-26 22:21:00
作者: soyoso (我是耀宗)   2019-10-26 22:29:00
連結不知道哪個是工作表1、工作表2
作者: jerry7504 (Amo)   2019-10-26 22:35:00
疑那要如何修改S大那個怎麼用出來的
作者: soyoso (我是耀宗)   2019-10-26 22:37:00
修改什麼?因為不確定22:25和22:26所上傳的圖檔是工作表1或2,沒看到下方工作表名稱那個怎麼用出來的?不了解,哪個?我的連結圖檔?如果是的話,是以螢幕截圖從原po回文的圖檔來看應是無機密性吧,若沒有的話看要不要就上傳雲端空間,提供連結(縮網頁),這樣不限我版上先進要協助原po也會較方便
作者: jerry7504 (Amo)   2019-10-26 22:59:00
https://drive.google.com/file/d/1iTJpEaNCfVhZC27O2q1AdtQn-pp_w_Qn/view感謝大大https://reurl.cc/e5LVOL忘記縮網再麻煩了這個是結果檔我vba還沒寫https://reurl.cc/5g4bDy這個是我寫到剛剛那個問題的
作者: soyoso (我是耀宗)   2019-10-27 06:53:00
是工作表1的資料填到工作表2的話,判斷後面的寫法就相反了應是工作表2.range=工作表1.range,取得最右側有值的儲存格也會是寫於工作表2.range的部分如只有a欄一欄,不以xltoright,而是xltoleft的方式
作者: jerry7504 (Amo)   2019-10-27 15:12:00
我改成left可是它沒辦法全部依照學號往下 是讀到學號的最後第一個值耶https://i.imgur.com/UzWUJp8.jpghttps://i.imgur.com/yCbJVs7.jpg
作者: soyoso (我是耀宗)   2019-10-27 15:46:00
這方面還是要看巨集如何寫才比較清楚
作者: jerry7504 (Amo)   2019-10-27 15:50:00
https://i.imgur.com/Jh9L4zo.jpg有抓到第一個值但是它只顯示最後一個出來目前程式一直跑的確會依序抓到最後但是列不出來
作者: soyoso (我是耀宗)   2019-10-28 10:48:00
這樣的截圖,沒看到工作表1或2是那個資料,要的話請附上工作表1、工作表2名稱和巨集的截圖,不然就以檔案來看才比較清楚就像我10/27 06:54所回文取得最右側有值的儲存格也會是寫在工作表2.range的部分,但巨集上還是寫在工作表1(變數r)的部分就類似這樣 https://i.imgur.com/SXDdTer.jpg我就不分工作表了,要有k欄(唯一值)的資料,提供的是range.copy方式,如不用帶格式的話,以回文range=range.value方式。連結內L欄後就是從c欄起的資料了
作者: jerry7504 (Amo)   2019-10-28 19:12:00
感謝s大 我27號已經有試出來了 不過我是用do untilloop不知道哪個效率比較高呢?我之後會再試試看真的很感謝s大~https://i.imgur.com/r4xhxBW.jpg這是我27號寫出來的結果是在工作表2裡 跟s大的結果一樣不過在我原始data 處理的速度會有點慢 原始有1萬多筆會有一小段無法回應的時間

Links booklink

Contact Us: admin [ a t ] ucptt.com