返回列表 上一主題 發帖

[發問] 多行資料合併為一行

[發問] 多行資料合併為一行

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

目前工作表一為 1.png

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

目前筆數較少可以慢慢貼
但資料一多就會很耗時
這樣程式碼該怎麼打呢?
資料如附件 多行資料合併.zip (131.28 KB)

我的想法;利用名字和科目為key值,再帶出成績
不知這樣方法是否可行

上傳檔案無法正常開啟(格式太多), 大約寫一下:注意工作表名稱是否相同
  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
複製代碼

TOP

回復 2# 准提部林


    wow~ 謝謝准大~
    Dim R&, C, N&, Arr, Brr, xD, i&, T$
   &,$
   這些定義代表的是什麼阿
   因為之前我都設這樣
   Dim A As Integer
   Dim B As Variant
   Dim C As String
  
想要更深入的了解

TOP

回復 3# Changbanana

Long = &
Integer = %
String = $

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

TOP

回復 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)

是可以這樣改嘛? 感謝您的教學

TOP

回復 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欄)

TOP

http://blog.xuite.net/hcm19522/twblog/450703586

TOP

回復 7# hcm19522


   函數也是一種方法 謝謝你^^

TOP

回復 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")  這是什麼意思呢

感謝大大

TOP

回復 9# popomilk


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

可 GOOGLE 查其使用法~~

TOP

        靜思自在 : 虛空有盡.我願無窮,發願容易行願難。
返回列表 上一主題