Board logo

標題: [發問] 如何運用EXCEL將不同列內容轉至欄位 [打印本頁]

作者: abi    時間: 2014-3-3 22:46     標題: 如何運用EXCEL將不同列內容轉至欄位

請教各位大大
我有一份六千多筆的資料,因為每位學生測量體重的次數不同(最少1筆,最多10筆)
我要如何將同一個學生每一次的體重內容放至欄呢?(圖解說明如下)  謝謝各位的幫助。
[attach]17651[/attach]
作者: ricky8751    時間: 2014-3-4 11:38

回復 1# abi


[attach]17657[/attach]
[attach]17658[/attach]

我的方法供參考
作者: p212    時間: 2014-3-4 12:58

本帖最後由 p212 於 2014-3-4 13:07 編輯

回復 1# abi
欄位配置請如下圖所示(原始資料範圍A:C;重整資料範圍E:L;體重欄位以至體重(7)為例,若有增加需求可自行向右擴展欄位名稱。)
作法:
步驟1_定義名稱:(1)名稱(N)欄輸入姓名;(2)參照到(R)欄輸入=OFFSET(Sheet1!$A$2,,,COUNTA(Sheet1!$A:$A)-1)
步驟2:儲存格E2輸入陣列公式=IFERROR(INDEX(姓名,MATCH(0,COUNTIF($E$1:E1,姓名),0)),""),以Ctrl+Shift+Enter輸入,再向下複製公式,上列公式目的在提取位於A欄姓名的唯一值。
步驟3:儲存格F2輸入=IF(COUNTIF(姓名,$E2)<COLUMN(A$1),"",OFFSET($A$1,MATCH($E2,姓名,0)+COLUMN(A$1)-1,2)),向右向下複製公式。
請參考!
作者: yen956    時間: 2014-3-4 13:14

『有一份六千多筆的資料』, 應是全校資料,
樓上的方法,
如不同班同姓名, 會被誤刪!!
除非一班一班人工處理
作者: yen956    時間: 2014-3-4 13:24

to ricky8751 & p212 大大:
抱歉, 大大的方法應可行,
只要加輔助欄, 輔助欄 填入 年級 & 班級 & 姓名,
排序後, 再將 輔助欄 視為姓名, 如上操作, 應沒問題,
思慮不周, 謹向兩位大大致歉!!
作者: abi    時間: 2014-3-4 20:46

to ricky8751 & p212 & yen956
謝謝你們的幫助,我趕緊來試試看。
作者: yen956    時間: 2014-3-6 14:44

回復 6# abi
這麼久了, 問題應該早就解決了,
我只是純練功, 順便賺點數, 請不要介意, 並請指教.
  1. Option Base 1
  2. Option Explicit
  3. Private Sub CommandButton1_Click()
  4.     Dim i, startL, 紀錄數 As Integer
  5.    
  6.     紀錄數 = [A1].End(xlDown).Row - 1
  7.    
  8.     '(1) 按 1年級、2班級、3姓名 遞增排序
  9.     '[A1].Resize(紀錄數 + 1, 14).Sort _
  10.            Key1:=Range("A1"), Order1:=xlAscending, _
  11.            Key2:=Range("B1"), Order1:=xlAscending, _
  12.            Key3:=Range("D1"), Order1:=xlAscending, _
  13.            Header:=xlYes
  14.            
  15.     '(2) 主程式
  16.     i = 1
  17.     Do
  18.         i = i + 1
  19.         If Cells(i, 4) = Cells(i + 1, 4) Then
  20.             startL = i
  21.             Do
  22.                 i = i + 1
  23.             Loop Until Cells(i, 4) <> Cells(i + 1, 4) Or Cells(i, 1) = ""
  24.             
  25.             '利用 複製→選擇性貼上→轉置 的方法, 可將 橫列 與 直欄 互轉
  26.             Cells(startL, 6).Resize(i - startL + 1, 1).Copy
  27.             
  28.             '不能貼在原處, 要貼到 往右一格
  29.             Cells(startL, 7).PasteSpecial Transpose:=True
  30.         End If
  31.     Loop Until i > 紀錄數 Or Cells(i, 1) = ""
  32.    
  33.     '(3) 因 (2) 不能貼在原處, 要貼到 往右一格, 故刪 除刪除原體重
  34.     [F2].Resize(紀錄數 + 1, 1).Delete Shift:=xlToLeft
  35.    
  36.     '(4) 刪除 體重的空白列
  37.     For i = 紀錄數 + 1 To 2 Step -1
  38.         If Cells(i, 6) = "" Then Rows(i).Delete
  39.     Next

  40.     '(5) 按 1年級、2班級、3座號 遞增排序
  41.     '[A1].Resize(紀錄數 + 1, 14).Sort _
  42.            Key1:=Range("A1"), Order1:=xlAscending, _
  43.            Key2:=Range("B1"), Order1:=xlAscending, _
  44.            Key3:=Range("C1"), Order1:=xlAscending, _
  45.            Header:=xlYes
  46. End Sub
複製代碼





歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)