返回列表 上一主題 發帖

請問sheet 欄位轉換問題

回復 1# tonycho33
  1. Sub 轉置()
  2. Dim A As Range, Ar(), Ay(), i%, j%, Ary(), s&
  3. With Sheets("a")
  4. For Each A In .Range("A2", .Cells(.Rows.Count, 1).End(xlUp)).SpecialCells(xlCellTypeConstants)
  5. Ar = A.Resize(, 4)
  6. Ay = .Range(A.Offset(, 6), A.Offset(, 6).End(xlToRight).Offset(2)).Value
  7. For i = 1 To UBound(Ay, 2)
  8. ReDim Preserve Ary(7, s)
  9. Ary(0, s) = Ar(1, 1): Ary(1, s) = Ar(1, 2): Ary(6, s) = Ar(1, 4)
  10.    For j = 1 To UBound(Ay, 1)
  11.    Ary(j + 1, s) = Ay(j, i)
  12.    Next
  13.    s = s + 1
  14. Next
  15. Next
  16. End With
  17. Sheets("b").UsedRange.Offset(1) = ""
  18. Sheets("b").[A2].Resize(s, 7) = Application.Transpose(Ary)
  19. End Sub
複製代碼
sheet 欄位轉換.rar (11.01 KB)
學海無涯_不恥下問

TOP

回復 9# tonycho33


    sheet 欄位轉換.rar (13.16 KB)
學海無涯_不恥下問

TOP

回復 11# tonycho33
  1. Sub 轉置()
  2. Dim A As Range, Ar(), Ay(), i%, j%, Ary(), s&
  3. With Sheets("a")
  4. For Each A In .Range("A2", .Cells(.Rows.Count, 1).End(xlUp)).SpecialCells(xlCellTypeConstants) '在A2以下有資料的儲存格做迴圈
  5. Ar = A.Resize(, 4) 'A欄向右擴展成欄的範圍,取得工單、料號、摘要、數量
  6. Ay = .Range(A.Offset(, 6), A.Offset(, 6).End(xlToRight).Offset(2)).Value '從G欄向右到該列資料尾向下2列的範圍存入陣列變數
  7. For i = 1 To UBound(Ay, 2) '迴圈從1開始到資料陣列的欄數
  8. ReDim Preserve Ary(7, s) ',擴展動態陣列此陣列有7列,擴展成s欄
  9. Ary(0, s) = Ar(1, 1): Ary(1, s) = Ar(1, 2): Ary(6, s) = Ar(1, 4) '將工單、料號、數量寫入陣列
  10.    For j = 1 To UBound(Ay, 1)
  11.    Ary(j + 1, s) = Ay(j, i) '將每個工程的3個項目寫入陣列
  12.    Next
  13.    s = s + 1 '準備下次動態陣列擴增的欄數
  14. Next
  15. Next
  16. End With
  17. Sheets("b").UsedRange.Offset(1) = "" '清空原來資料
  18. Sheets("b").[A2].Resize(s, 7) = Application.Transpose(Ary) '將陣列寫入b工作表
  19. End Sub
複製代碼
學海無涯_不恥下問

TOP

回復 13# tonycho33

你的項目重複,請說明比對規則
學海無涯_不恥下問

TOP

回復 16# tonycho33

表格的合併儲存格問題
  1. Sub 轉置()
  2. Dim A As Range, Ar(), Ay(), i%, j%, Ary(), s&
  3. r = 2
  4. With Sheets("a")
  5. Do Until .Cells(r, 1) = ""
  6. Set A = .Cells(r, 1)
  7. Ar = A.Resize(, 4)
  8. k = Application.CountA(.Range(A.Offset(, 6), A.Offset(, 6).End(xlToRight)))
  9. Ay = A.Offset(, 6).Resize(3, k).Value
  10. For i = 1 To UBound(Ay, 2)
  11. ReDim Preserve Ary(7, s)
  12. Ary(0, s) = Ar(1, 1): Ary(1, s) = Ar(1, 2): Ary(6, s) = Ar(1, 4)
  13.    For j = 1 To UBound(Ay, 1)
  14.    Ary(j + 1, s) = Ay(j, i)
  15.    Next
  16.    s = s + 1
  17. Next
  18. r = r + 3
  19. Loop
  20. End With
  21. Sheets("b").UsedRange.Offset(1) = ""
  22. Sheets("b").[A2].Resize(s, 7) = Application.Transpose(Ary)
  23. End Sub

  24. Private Sub Worksheet_Activate()
  25. Set d = CreateObject("Scripting.Dictionary")
  26. With Sheet6
  27. For Each A In .Range("J:J").SpecialCells(xlCellTypeConstants)
  28.    If A = "ok" Then
  29.    mystr = Join(Application.Transpose(Application.Transpose(A.Offset(, -9).Resize(, 5).Value)), "")
  30.    d(mystr) = d.Count
  31.    End If
  32. Next
  33. End With
  34. With Me
  35. r = 2
  36. Do Until .Cells(r, 1) = ""
  37. Set A = .Cells(r, 1)
  38. mystr = A & A.Offset(, 1)
  39.    For Each c In .Range(A.Offset(, 6), A.Offset(, 6).End(xlToRight))
  40.       temp = mystr & Join(Application.Transpose(c.Resize(3, 1)), "")
  41.       If d.exists(temp) = True Then c.Resize(3, 1).Interior.ColorIndex = 38 Else c.Resize(3, 1).Interior.ColorIndex = 0
  42.    Next
  43. r = r + 3
  44. Loop
  45. End With
  46. End Sub
複製代碼
學海無涯_不恥下問

TOP

回復 28# tonycho33
  1. Sub 轉置()

  2. Dim A As Range, Ar(), Ay(), i%, j%, Ary(), s&

  3. r = 2

  4. With Sheets("a")

  5. Do Until .Cells(r, 1) = ""

  6. Set A = .Cells(r, 1)

  7. Ar = A.Resize(, 4)

  8. k = Application.CountA(.Range(A.Offset(, 6), A.Offset(, 6).End(xlToRight)))
  9. If k = 0 Then GoTo 10
  10. Ay = A.Offset(, 6).Resize(3, k).Value

  11. For i = 1 To UBound(Ay, 2)

  12. ReDim Preserve Ary(7, s)

  13. Ary(0, s) = Ar(1, 1): Ary(1, s) = Ar(1, 2): Ary(6, s) = Ar(1, 4)

  14.    For j = 1 To UBound(Ay, 1)

  15.    Ary(j + 1, s) = Ay(j, i)

  16.    Next

  17.    s = s + 1

  18. Next
  19. 10
  20. r = r + 3

  21. Loop

  22. End With

  23. Sheets("b").UsedRange.Offset(1) = ""

  24. Sheets("b").[A2].Resize(s, 7) = Application.Transpose(Ary)

  25. End Sub
複製代碼
學海無涯_不恥下問

TOP

回復 31# tonycho33

試試看
  1. Private Sub Worksheet_Activate()
  2. Set d = CreateObject("Scripting.Dictionary")
  3. Set d1 = CreateObject("Scripting.Dictionary")
  4. With Sheet6
  5. For Each A In .Range("I2", .[I65536].End(xlUp)).SpecialCells(xlCellTypeConstants)
  6.    If A <> "" And A.Offset(, 1) = "" Then
  7.    mystr = Join(Application.Transpose(Application.Transpose(A.Offset(, -8).Resize(, 5).Value)), "")
  8.    d(mystr) = d(mystr) + 1
  9.    ElseIf A.Offset(, 1) - A Then
  10.    mystr = Join(Application.Transpose(Application.Transpose(A.Offset(, -8).Resize(, 5).Value)), "")
  11.    d1(mystr) = d1(mystr) + 1
  12.    End If
  13. Next
  14. End With
  15. With Me
  16. r = 2
  17. Do Until .Cells(r, 1) = ""
  18. Set A = .Cells(r, 1)
  19. mystr = A & A.Offset(, 1)
  20.    For Each c In .Range(A.Offset(, 6), A.Offset(, 6).End(xlToRight))
  21.       temp = mystr & Join(Application.Transpose(c.Resize(3, 1)), "")
  22.       If d.exists(temp) = True Then
  23.       c.Resize(3, 1).Interior.ColorIndex = 4
  24.       ElseIf d1.exists(temp) = True Then
  25.       c.Resize(3, 1).Interior.ColorIndex = 6
  26.       Else
  27.       c.Resize(3, 1).Interior.ColorIndex = 0
  28.       End If
  29.    Next
  30. r = r + 3
  31. Loop
  32. End With
  33. End Sub
複製代碼
學海無涯_不恥下問

TOP

        靜思自在 : 做好事不能少我一人,做壞事不能多我一人。
返回列表 上一主題