Excel VBA: Ayırıcı Sayısı


1

Takip koduna sahibim:

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

Bu kod temel olarak Sayfa 1'deki bir veri şablonunu kullanır ve bu şablonu kopyalar ve Sayfa 2'deki verileri kaç kez "copyRows" olarak ayarlanmış olduğunu uygular

Şu anda, "copyRows" numarasını değiştirdiğim her seferde şablonu Sayfa 1'de ayarlamak zorunda kalacağım. Örneğin, copyRows 4 ise, Sayfa 1'de, şablon 4 tanımlı önceden tanımlanmış şeyler içerecektir, ilk satır gereklidir, aşağıdaki satırlar "|" Sayfa 2'deki verilerdeki değerlerin sınırlayıcısı. Örneğin, Sayfa 2 sütun B, "Test1 | Test2 | Test3"

Bu kodu biraz daha otomatikleştirmeye çalışıyorum, bu yüzden copyRow'ları manuel olarak değiştirmek ve şablon sayfasına ek satırları eklemek veya kaldırmak zorunda kalmıyorum. Şablon sayfasında, sadece iki satır istiyorum, ilki gerekli, ikincisi "|" sayısını temel alacak sınırlayıcı değerler.

Örneğin, copyRows için bir sayma formülü =LEN(Sheets(2).B:B)-LEN(SUBSTITUTE(Sheets(2).B:B,"|",""))eklemeyi ve ardından 1 eklemeyi düşünüyorum. Formülde copyRow'ları nasıl koyardım?


ubound(arr_TotalList)"|" üzerinde Split yaptıktan sonra arr_totalList dizininin üst sınırı olmalıdır. Doğru hatırlıyorsam, Ubound normalde endeksten normalde 1 daha büyük olan endeks sayısını rapor eder (yani x(Ubound(x)-1)en yüksek endeks olur), ancak bir Varyantta bunun yerine en yüksek endeksi döndürür (yani x(ubound(x)en yüksek). [
Şunu

@Yorik ile aynı fikirdeyim, eğer her şeyi anlarsam. arr_TotalListHenüz ayarlarken henüz tanımlamadıysanız, yine copyRowsde ayarlayabilirsiniz copyRows = 1 + UBound(Split(Sheets(2).Range("B" & skuRow).Value)).
panhandel

Yanıtlar:


0

Bu işlev bir "|" oluşumunun sayısını bulur çalışma sayfanızın B sütununda bir karakter.

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

Kaynak verilerinin nasıl göründüğünden% 100 emin değilim, ancak öncelikle skuRow'u tanımlayabileceğinizi ve ardından copyRows'u şu şekilde ayarlayabileceğinizi düşünüyorum:

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

0

Diğer seçenekler

=COUNTIF(B:B/"*|*")

Application.CountIf(Sheets(2).Columns(2), "*|*")

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.