Board logo

標題: [發問] 多行資料合併為一行 [打印本頁]

作者: Changbanana    時間: 2016-9-1 11:21     標題: 多行資料合併為一行

請教各位高手~
想利用vba來整理資料

目前工作表一為[attach]25107[/attach]

想要同樣名字的資料只要出現一行就好
整理在工作表二[attach]25108[/attach]
這是想要最終的結果

目前筆數較少可以慢慢貼
但資料一多就會很耗時
這樣程式碼該怎麼打呢?
資料如附件[attach]25109[/attach]

我的想法;利用名字和科目為key值,再帶出成績
不知這樣方法是否可行
作者: 准提部林    時間: 2016-9-1 12:30

上傳檔案無法正常開啟(格式太多), 大約寫一下:注意工作表名稱是否相同
  1. Sub TEST()
  2. Dim R&, C, N&, Arr, Brr, xD, i&, T$
  3. Sheets("工作表2").UsedRange.Offset(1, 0).Clear
  4. Arr = Range([工作表1!A2], [工作表1!A65536].End(xlUp)(1, 5))
  5. ReDim Brr(1 To UBound(Arr), 1 To 8)
  6. Set xD = CreateObject("Scripting.Dictionary")

  7. For i = 1 To UBound(Arr)
  8.     T = Arr(i, 1): R = xD(T)
  9.     If R = 0 Then
  10.        N = N + 1: R = N: xD(T) = N
  11.        Brr(R, 1) = Arr(i, 1):  Brr(R, 2) = Arr(i, 2): Brr(R, 3) = Arr(i, 3)
  12.     End If
  13.     C = Application.Match(Arr(i, 4), Array("國語", "英文", "數學", "物理", "化學"), 0)
  14.     Brr(R, C + 3) = Arr(i, 5)
  15. Next i
  16. [工作表2!A2].Resize(N, 8) = Brr
  17. End Sub
複製代碼

作者: Changbanana    時間: 2016-9-1 13:15

回復 2# 准提部林


    wow~ 謝謝准大~
    Dim R&, C, N&, Arr, Brr, xD, i&, T$
   &,$
   這些定義代表的是什麼阿
   因為之前我都設這樣
   Dim A As Integer
   Dim B As Variant
   Dim C As String
  
想要更深入的了解
作者: 准提部林    時間: 2016-9-1 14:43

回復 3# Changbanana

Long = &
Integer = %
String = $

有時間可以進VBE內建說明檔多看看, 能挖到不少知識及技巧!
另〔檢視〕〔瀏覽物件〕也是不錯的視窗,可以一一去看各種物件.屬性等等的說明!
作者: Changbanana    時間: 2016-9-1 16:06

回復 4# 准提部林

了解了~
可否解說下面的寫法
    For i = 1 To UBound(Arr)
    T = Arr(i, 1): R = xD(T)
    If R = 0 Then
       N = N + 1: R = N: xD(T) = N
       Brr(R, 1) = Arr(i, 1):  Brr(R, 2) = Arr(i, 2): Brr(R, 3) = Arr(i, 3)
    End If
    C = Application.Match(Arr(i, 4), Array("國語", "英文", "數學", "物理", "化學"), 0)
    Brr(R, C + 3) = Arr(i, 5)

若之後想要再增加一個科目
C = Application.Match(Arr(i, 4), Array("國語", "英文", "數學", "物理", "化學","社會"), 0)
    Brr(R, C + 3) = Arr(i, 6)

是可以這樣改嘛? 感謝您的教學
作者: 准提部林    時間: 2016-9-1 17:42

回復 5# Changbanana


Brr(R, C + 3) = Arr(i, 5)  這是工作表1的〔分數〕欄(E欄),不須變動

若之後想要再增加一個科目
C = Application.Match(Arr(i, 4), Array("國語", "英文", "數學", "物理", "化學","社會"), 0)

C是用來判斷〔科目〕分數要放在工作表2的第幾個欄位,
若科目是〔社會〕,C=6,6+3=9,分數放在第9欄(I欄)
作者: hcm19522    時間: 2016-9-12 14:17

http://blog.xuite.net/hcm19522/twblog/450703586
作者: Changbanana    時間: 2016-9-13 23:01

回復 7# hcm19522


   函數也是一種方法 謝謝你^^
作者: popomilk    時間: 2016-9-14 11:53

回復 2# 准提部林

Dim R&, C, N&, Brr, Arr, xD, i&, T$
Sheets("工作表2").UsedRange.Offset(1, 0).Clear
Arr = Range([工作表1!A2], [工作表1!A65536].End(xlUp)(1, 5))
ReDim Brr(1 To UBound(Arr), 1 To 8)
Set xD = CreateObject("Scripting.Dictionary")


版主大大好
我看不懂紅色的地方,可以請你教學嗎
arr=A1:E8的範圍
為什麼又要重新定義brr變數呢 Redim
Ubound是啥意思?
上網查過實在看不太懂
brr( xxx,xxx)又是啥意思?
CreateObject("Scripting.Dictionary")  這是什麼意思呢

感謝大大
作者: 准提部林    時間: 2016-9-14 13:18

回復 9# popomilk


brr( xxx,xxx)又是啥意思?  >〔陣列〕Array 
CreateObject("Scripting.Dictionary")  這是什麼意思呢 > 字典檔物件 

可 GOOGLE 查其使用法∼∼
作者: VBALearner    時間: 2016-9-25 13:17

回復 4# 准提部林

請問准大 VBA內建說明檔要如何開啟呢? 記得好像有快捷鍵...但現在忘記了= ="
還有[瀏覽物件] 似乎也只能知道物件裡的成員吧? 大部分的語法好像都沒有寫出解釋 是嗎?




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