Excel VBA: จำนวน # ของตัวคั่น


1

ฉันมีรหัสต่อไปนี้:

Sub CopyTest()

    Dim skuRow As Integer
    Dim curSku As String
    Dim numSkus As Integer
    Dim impType As String
    Dim copyRows As Integer
    Dim supAcc As String
    Dim arr_TotalList As Variant
    Dim locs As String
    Dim colorMax As String

    With ActiveSheet
        copyRows = 3
        impType = "-LE"
        supAcc = ""
        numSkus = Sheets(2).Cells(Sheets(2).Rows.Count, "A").End(xlUp).Row
        skuRow = 1

        Rows("1:" & copyRows).Copy

        For i = copyRows + 1 To (copyRows * numSkus) + 1 Step copyRows
            arr_TotalList = Split(CurVal, "|")
            colorMax = Sheets(2).Range("C" & skuRow).Value
            If colorMax = "" Then
                colorMax = "4"
            End If

            curSku = Sheets(2).Range("A" & skuRow).Value
            locs = Sheets(2).Range("B" & skuRow).Value
            arr_TotalList = Split(locs, "|")
            Range("A" & i).Select
            ActiveSheet.Paste
            For n = 0 To copyRows - 1 Step 1
                If n = 0 Then
                    Range("B" & i + n) = supAcc & curSku & impType
                    Range("E" & i + n) = colorMax
                Else
                    Range("G" & i + n) = arr_TotalList(n - 1)
                    Range("B" & i + n) = supAcc & curSku & impType
                End If
            Next n

            skuRow = skuRow + 1

        Next i            
    End With

End Sub

รหัสนี้โดยทั่วไปใช้แม่แบบข้อมูลในแผ่นงาน 1 และคัดลอกแม่แบบนั้นและใช้ข้อมูลจากแผ่นงาน 2 จำนวนครั้งที่ตั้งไว้ใน "copyRows"

ตอนนี้ฉันจะต้องปรับแม่แบบในแผ่นที่ 1 ทุกครั้งที่ฉันเปลี่ยนหมายเลข "copyRows" ตัวอย่างเช่นถ้า copyRows เป็น 4 ในชีต 1 เทมเพลตจะมี 4 แถวของสิ่งที่กำหนดไว้ล่วงหน้าจำเป็นต้องใช้แถวแรกแถวต่อไปนี้จะยึดตาม "|" ตัวคั่นของค่าในข้อมูลของชีต 2 ตัวอย่างเช่นแผ่นงาน 2 คอลัมน์ B มีข้อมูลเช่น "Test1 | Test2 | Test3"

ฉันกำลังพยายามทำให้รหัสนี้เป็นแบบอัตโนมัติอีกเล็กน้อยดังนั้นฉันไม่ต้องเปลี่ยน copyRows ด้วยตนเองและเพิ่มหรือลบแถวเพิ่มเติมในแผ่นงานแม่แบบ ในแผ่นงานเทมเพลตฉันต้องการเพียงแค่มีสองแถวโดยจำเป็นต้องใช้ครั้งแรกส่วนที่สองจะขึ้นอยู่กับจำนวนของ "|" ค่าตัวคั่น

ฉันกำลังคิดที่จะเพิ่มสูตรนับสำหรับ copyRows เช่น =LEN(Sheets(2).B:B)-LEN(SUBSTITUTE(Sheets(2).B:B,"|","")) จากนั้นเพิ่ม 1 ฉันจะใส่สูตรใน copyRows อย่างไร


ubound(arr_TotalList) ควรเป็นขอบเขตบนของดัชนีของ arr_totalList หลังจากที่คุณดำเนินการแยกใน "|" ถ้าฉันจำได้อย่างถูกต้อง Ubound จะรายงานดัชนีตามปกติ นับ ซึ่งโดยปกติแล้ว 1 มากกว่าดัชนี (เช่น x(Ubound(x)-1) จะเป็นดัชนีสูงสุด แต่ในตัวแปรจะส่งคืนดัชนีสูงสุดแทน (เช่นนั้น x(ubound(x) สูงสุด) [ตรวจสอบนี้]
Yorik

เห็นด้วยกับ @Yorik ถ้าฉันเข้าใจทุกอย่าง ในกรณีที่คุณยังไม่มี arr_TotalList กำหนดไว้เมื่อคุณตั้งค่า copyRows ขึ้นคุณสามารถตั้งค่า copyRows = 1 + UBound(Split(Sheets(2).Range("B" & skuRow).Value)) แม้
panhandel

คำตอบ:


0

ฟังก์ชั่นนี้จะค้นหาจำนวนการเกิดของ "|" อักขระในคอลัมน์ B ของแผ่นงานของคุณ

Function FindDelimeters()

Dim lastrow As Long
Dim DelimCount As Long
lastrow = Sheets(2).Cells(Rows.Count, 2).End(xlUp).Row

DelimCount = Sheets(2).Evaluate("=SUM(LEN(B1:B" & lastrow & ")-LEN(SUBSTITUTE(B1:B" & lastrow & ",""|"","""")))")
FindDelimeters = DelimCount

End Function

0

ฉันไม่แน่ใจ 100% ว่าข้อมูลต้นฉบับมีลักษณะอย่างไร แต่ฉันคิดว่าคุณสามารถกำหนด skuRow ก่อนจากนั้นตั้งค่า copyRows ดังนี้

copyRows = 1 + UBound(Split(Sheets(2).Range("B" & skuRow).Value, "|"))

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.