Excel VBA: кол-во разделителей

у меня есть следующий код:

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. Например, столбец B листа 2 содержит такие данные, как"Test1|Test2|Test3"

Я пытаюсь автоматизировать этот код немного дальше, поэтому мне не нужно вручную изменять copyRows и добавлять или удалять дополнительные строки на листе шаблона. На листе шаблона я хочу иметь только две строки, первая требуется, вторая будет основана на количестве значений разделителей"|".

Я думаю добавить формулу подсчета для copyRows, для пример,=LEN(Sheets(2).B:B)-LEN(SUBSTITUTE(Sheets(2).B:B,"|","")) и затем добавляем 1. Как бы я положил в формулу для copyRows?

29
задан fionasdad
21.05.2023 14:33 Количество просмотров материала 2610
Распечатать страницу

3 ответа

эта функция найдет количество вхождений символа " | "в столбце 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
отвечен Kyle 2023-05-22 22:21

Я не уверен на 100%, как выглядят исходные данные, но я думаю, что вы можете сначала определить skuRow, а затем настроить copyRows следующим образом:

copyRows = 1 + UBound(Split(Sheets(2).Range("B" & skuRow).Value, "|"))
0
отвечен panhandel 2023-05-23 00:38

другие функции

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

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

0
отвечен paul bica 2023-05-23 02:55

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх