作者jerry7504 (Amo)
看板Office
標題[算表] VBA合併與轉換多欄
時間Sat Oct 26 04:16:08 2019
軟體: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
要考慮以下狀況該怎麼寫呢拜託了
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 39.12.162.106 (臺灣)
※ 文章網址: https://webptt.com/m.aspx?n=bbs/Office/M.1572034570.A.BF9.html
1F:→ soyoso: 1.要有學號唯一值,如果有就不用以下方式10/26 10:05
2F:→ soyoso: 方式有a)資料工具的移除重覆range.removeduplicates10/26 10:05
3F:→ soyoso: b)進階篩選,range.advancedfilter10/26 10:05
4F:→ soyoso: c)dictionary 10/26 10:05
5F:→ soyoso: d)迴圈,判斷,工作表函數countif(是否為0),10/26 10:05
6F:→ soyoso: match(是否為錯誤值)10/26 10:05
7F:→ soyoso: 2.有唯一值後填入第一筆資料和找是否有重覆,迴圈於範圍內10/26 10:05
8F:→ soyoso: ,或迴圈於range.find,找到以range.copy或range= range.10/26 10:05
9F:→ soyoso: value複製貼上或填入;要確認每筆學號最右側有值儲存格欄10/26 10:05
10F:→ soyoso: 號的話,range.end、range.find或工作表函數counta(有連續10/26 10:05
11F:→ soyoso: 資料時),欄號的話range.column10/26 10:05
12F:→ jerry7504: 目前唯一值有了可是不知道怎麼去比對2者相同學號後面10/26 16:15
13F:→ jerry7504: 的所有值 貼上部分如何依序貼呢?10/26 16:15
14F:→ soyoso: 巢狀迴圈判斷或是迴圈range.find,就看是否有排序,有的話10/26 16:36
15F:→ soyoso: range.find或是工作表函數match取第一筆出現的列號,迴圈10/26 16:36
16F:→ soyoso: 工作表函數countif取得的筆數,位序貼上就要看每筆學號最10/26 16:36
17F:→ soyoso: 右側有資料的儲存格或欄號,方式上述回文range.end之後都10/26 16:36
18F:→ soyoso: 是再說明這方面,有這個資料range.offset或是欄號+110/26 16:36
19F:→ jerry7504: 痾小弟不才搞了5小時連後面範圍都選不出來...10/26 18:09
20F:→ jerry7504: S大能提供函數或VBA程式嗎xD10/26 19:02
21F:→ soyoso: 提供回文所述選不出來的檔案或寫法,再來看看問題是什麼?10/26 19:55
22F:→ jerry7504: 我先重新來不然都亂了s大幫我大概分析一下概念有沒有10/26 20:56
23F:→ jerry7504: 錯10/26 20:56
24F:→ jerry7504: 1.篩選唯一學號2.將表二唯一學號跟表ㄧ原始資料比對10/26 20:56
25F:→ jerry7504: 如果相等將表ㄧ對應學號右邊值抓出10/26 20:57
26F:→ jerry7504: 2、依照學號依序貼上後面數值 10/26 20:58
27F:→ soyoso: 如原po回文所述10/26 21:16
28F:→ jerry7504: 目前程式階段跟錯誤10/26 21:46
30F:→ soyoso: 以巨集來看有可能出現這個錯誤的原因是sheet2要改為類似上10/26 21:53
31F:→ soyoso: 方工作表1的寫法,如工作表2.range("a:a")之類的10/26 21:54
32F:→ soyoso: 如要match尋找完全符合的話,第三個引數不是1,而是010/26 21:55
33F:→ soyoso: 另外也不太了解變數E是什麼?1.不確定這個變數的型態是什10/26 21:59
34F:→ soyoso: 麼?range嗎?10/26 21:59
35F:→ soyoso: 2.如果是的話,要set該變數10/26 22:00
36F:→ jerry7504: 有改了好像還是一樣還是要加宣告10/26 22:00
37F:→ jerry7504: 那這個概念寫成這樣有錯嗎?10/26 22:02
39F:→ jerry7504: 目前改完可以執行但是沒有值10/26 22:05
41F:→ soyoso: 可以執行,沒錯誤產生,但沒有值帶入方面還是要從檔案來看10/26 22:12
42F:→ soyoso: 因為測試連結的巨集,工作表1有連續資料(二欄以上)是可以10/26 22:20
43F:→ soyoso: 將工件表2的b欄資料帶入的10/26 22:20
45F:→ jerry7504: 目前變這樣...10/26 22:21
46F:→ jerry7504: 我的檔案是這樣10/26 22:25
49F:→ soyoso: 連結不知道哪個是工作表1、工作表210/26 22:29
50F:→ jerry7504: 疑那要如何修改10/26 22:35
51F:→ jerry7504: S大那個怎麼用出來的10/26 22:35
52F:→ soyoso: 修改什麼?因為不確定22:25和22:26所上傳的圖檔是工作表110/26 22:37
53F:→ soyoso: 或2,沒看到下方工作表名稱10/26 22:37
54F:→ soyoso: 那個怎麼用出來的?不了解,哪個?我的連結圖檔?10/26 22:39
55F:→ soyoso: 如果是的話,是以螢幕截圖10/26 22:39
56F:→ soyoso: 從原po回文的圖檔來看應是無機密性吧,若沒有的話看要不要10/26 22:41
57F:→ soyoso: 就上傳雲端空間,提供連結(縮網頁),這樣不限我版上先進要10/26 22:42
58F:→ soyoso: 協助原po也會較方便10/26 22:42
60F:→ jerry7504: 1AdtQn-pp_w_Qn/view10/26 22:59
61F:→ jerry7504: 感謝大大10/26 22:59
63F:→ jerry7504: 忘記縮網再麻煩了10/26 23:05
64F:→ jerry7504: 這個是結果檔我vba還沒寫10/26 23:22
66F:→ jerry7504: 這個是我寫到剛剛那個問題的10/26 23:24
67F:→ soyoso: 是工作表1的資料填到工作表2的話,判斷後面的寫法就相反了10/27 06:53
68F:→ soyoso: 應是工作表2.range=工作表1.range,取得最右側有值的儲存10/27 06:54
69F:→ soyoso: 格也會是寫於工作表2.range的部分10/27 06:55
70F:→ soyoso: 如只有a欄一欄,不以xltoright,而是xltoleft的方式 10/27 06:56
71F:→ jerry7504: 我改成left可是它沒辦法全部依照學號往下 是讀到學號10/27 15:12
72F:→ jerry7504: 的最後第一個值耶10/27 15:12
75F:→ soyoso: 這方面還是要看巨集如何寫才比較清楚10/27 15:46
77F:→ jerry7504: 有抓到第一個值但是它只顯示最後一個出來10/27 15:50
78F:→ jerry7504: 目前程式一直跑的確會依序抓到最後但是列不出來10/27 15:57
79F:→ soyoso: 這樣的截圖,沒看到工作表1或2是那個資料,要的話請附上工10/28 10:48
80F:→ soyoso: 作表1、工作表2名稱和巨集的截圖,不然就以檔案來看才比較10/28 10:50
81F:→ soyoso: 清楚10/28 10:50
82F:→ soyoso: 就像我10/27 06:54所回文取得最右側有值的儲存格也會是寫10/28 10:52
83F:→ soyoso: 在工作表2.range的部分,但巨集上還是寫在工作表1(變數r)10/28 10:53
84F:→ soyoso: 的部分10/28 10:53
86F:→ soyoso: 我就不分工作表了,要有k欄(唯一值)的資料,提供的是range10/28 11:10
87F:→ soyoso: .copy方式,如不用帶格式的話,以回文range=range.value方10/28 11:10
88F:→ soyoso: 式。連結內L欄後就是從c欄起的資料了10/28 11:12
90F:→ jerry7504: 感謝s大 我27號已經有試出來了 不過我是用do untilloop10/28 19:12
91F:→ jerry7504: 不知道哪個效率比較高呢?10/28 19:13
92F:→ jerry7504: 我之後會再試試看真的很感謝s大~ 10/28 19:14
94F:→ jerry7504: 這是我27號寫出來的結果是在工作表2裡 跟s大的結果一10/28 19:21
95F:→ jerry7504: 樣10/28 19:21
96F:→ jerry7504: 不過在我原始data 處理的速度會有點慢 原始有1萬多筆10/28 19:22
97F:→ jerry7504: 會有一小段無法回應的時間10/28 19:22
※ 編輯: jerry7504 (27.52.229.55 臺灣), 10/29/2019 23:20:42