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?
arr_TotalList
Henüz ayarlarken henüz tanımlamadıysanız, yine copyRows
de ayarlayabilirsiniz copyRows = 1 + UBound(Split(Sheets(2).Range("B" & skuRow).Value))
.
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 (yanix(Ubound(x)-1)
en yüksek endeks olur), ancak bir Varyantta bunun yerine en yüksek endeksi döndürür (yanix(ubound(x)
en yüksek). [