返回列表 上一主題 發帖

[發問] 讀取及歸類資料

使用陣列處理//A欄不合併也可以..只認非空
Sub Test_A1()
Dim Arr, Brr, i&, j%, R&, Rx&, C%, X%, T$
Arr = Range([f1], [a65536].End(3).MergeArea)
ReDim Brr(1 To UBound(Arr) * 5, 1 To 99)
For i = 3 To UBound(Arr)
    T = Split(Arr(i, 1) & " ", " ")(0)
    If T Like "BF工程[#]###" Then C = C + 1: R = 1: Brr(R, C) = T
    For j = 2 To UBound(Arr, 2)
        T = Split(Arr(i, j) & " ", " ")(1)
        If T Like "SR####(*" Then R = R + 1: Brr(R, C) = Split(T, "(")(0)
    Next j
    If R > Rx Then Rx = R
Next i
With Range("H2")
     .CurrentRegion.Clear
     .Resize(Rx, C) = Brr
End With
End Sub

TOP

回復 3# 198188

GPT4
Sub test()
    ' 定義變量並初始化變量r為第一列最後一個非空行的行號
    r = Cells(Rows.Count, 1).End(xlUp).Row
    ' 初始化輸出起始的列號c為第7列(即G列)
    c = 7

    ' 清除從H2到J1000的內容,為新的輸出做準備
    Range("H2:J1000").ClearContents

    ' 從第三行開始迴圈,直到最後一個非空行
    For i = 3 To r
        ' 檢查當前行第一列的單元格是否不為空
        If Cells(i, 1).Value <> "" Then
            ' 通過分割單元格值並取第一個元素來提取任務代碼
            tx = Split(Cells(i, 1).Value, " ")(0)
            ' 確定當前單元格合併區域的數量
            mr = Cells(i, 1).MergeArea.Count
            ' 如果存在合併的單元格
            If mr > 0 Then
                ' 遍歷合併區域中的每個單元格,排除第一個單元格(因此使用mr - 1)
                For Each Z In Cells(i, 2).Resize(mr - 1, 5)
                    ' 如果單元格包含"SR"字樣
                    If UCase(Z.Value) Like "*SR*" Then
                        ' 分割值以獲取SR編號,去除括號
                        sp = Split(Z.Value, "(")(0)
                        ' 從SR編號中移除"上架"、"下架"和空格
                        sp = Replace(sp, "上架", "")
                        sp = Replace(sp, "下架", "")
                        sp = Replace(sp, " ", "")
                        ' 用"▲"作為分隔符,將SR編號附加到任務代碼後面
                        tx = tx & "▲" & sp
                    End If
                Next
                ' 移動到下一列輸出位置
                c = c + 1
                ' 通過分隔符"▲"分割編譯後的任務代碼和SR編號
                sp0 = Split(tx, "▲")
                ' 將SR編號數組轉置並從當前列開始寫入工作表
                Cells(2, c).Resize(UBound(sp0) + 1, 1) = Application.Transpose(sp0)
            End If
        End If
    Next
End Sub
這段VBA宏的目的是將任務列表中的“SR”編號根據第一列指定的任務整理到不同的列中。它會先清除指定範圍的內容,接著處理資料並分割字串,最後將整理好的輸出轉置至工作表中。這些註解應該能幫助你理解這個宏的邏輯和流程。

TOP

回復 2# singo1232001


        非常感謝!能不能有注釋一下,這樣我可以更好理解每句用意,如果格式或者表格有變動,也可以自己做出修改。:handshake

TOP

回復 1# 198188


    Sub test()
r = Cells(Rows.Count, 1).End(3).Row
c = 7
Range("H2:J1000").ClearContents
For i = 3 To r
If Cells(i, 1).Value <> "" Then
tx = Split(Cells(i, 1).Value, " ")(0)
mr = Cells(i, 1).MergeArea.Count
If mr > 0 Then
For Each Z In Cells(i, 2).Resize(mr - 1, 5)
If UCase(Z.Value) Like "*SR*" Then
sp = Split(Z.Value, "(")(0)
sp = Replace(sp, "上架", "")
sp = Replace(sp, "下架", "")
sp = Replace(sp, " ", "")
tx = tx & "▲" & sp
End If

Next
c = c + 1
sp0 = Split(tx, "▲")
Cells(2, c).Resize(UBound(sp0) + 1, 1) = Application.Transpose(sp0)
End If
End If
Next
End Sub

TOP

        靜思自在 : 世上有兩件事不能等:一、孝順 二、行善。
返回列表 上一主題