У меня проблемы с циклическим просмотром кода VBA и введением правильной переменной в определенные ячейки - PullRequest
0 голосов
/ 07 февраля 2019

Я немного новичок в VBA

Как работает макрос, когда кто-то вводит ошибку child_variations.color: Обновите атрибуцию, чтобы отразить правильные данные или более 1 из этих ошибок в ячейке.Макрос разделит строку в двоеточии на отдельные ячейки (эта часть макроса работает правильно).Затем макрос должен пройти через каждую ячейку, и если строка в ячейке содержит подчеркивание (), то эта строка сохраняется в переменной и помещается в ячейку.Если строка не содержит подчеркивания (), то она сохраняется в другой переменной.

Проблема, с которой я сталкиваюсь, состоит в том, чтобы поместить строку в отдельные ячейки.Я хочу поместить весь текст слева от двоеточия в одну строку и одну ячейку.Я также хочу поместить текст справа от двоеточия в другую строку и ячейку.Я попытался использовать цикл и операторы if ниже, но весь текст слева и справа от двоеточия помещается в одну и ту же ячейку.

Ниже я рассмотрел, как должны выглядеть ячейки в электронной таблице.

Before child_variations.color: Обновите атрибуцию, чтобы отразить правильные данные.digital_assets.images.primary_image_url: Основное изображение не совпадает с альтернативными изображениями.

Как это должно выглядеть child_variations.color Обновите атрибуцию, чтобы отразить правильные данные.

Любая помощь, которую вы можетедай мне бы очень помогло!

        Sub delimted()
     Dim ws As Worksheet
     Dim cel As range
     Dim str As String
     Dim str_is_blank As String
     Dim my_range As range
     Dim no_of_rows As Long
     Dim i As Long
     Dim str_with_special_char As String
     Set my_range = Sheets("Setup").range("L7:Z500")
     no_of_rows = my_range.Rows.Count
     Set ws = ThisWorkbook.Sheets("Setup")
     ws.range("I7:I500").Select
    Selection.TextToColumns _
        Destination:=range("L7:L500"), _
        DataType:=xlDelimited, _
        TextQualifier:=xlDoubleQuote, _
        ConsecutiveDelimiter:=False, _
        Tab:=True, _
        Semicolon:=False, _
        comma:=False, _
        Space:=True, _
        Other:=True, _
        OtherChar:=":"
  For Each cel In my_range.Cells
        If InStr(cel.Value, "_") > 0 Then
                str_with_special_char = str_with_special_char & " " & cel.Value
                range("I7").Value = str_with_special_char
        ElseIf Not InStr(cel.Value, "_") Then
            str = str & " " & cel.Value
            range("J7").Value = str
        ElseIf IsEmpty(cel.Value) Then
            str_is_blank = str_is_blank & cel.Value
        End If
Next cel
End Sub

1 Ответ

0 голосов
/ 07 февраля 2019

Прежде всего, вы можете показать столбец с вашими данными и столбец с желаемым результатом, чтобы я мог попробовать?

Второй:

ws.range("I7:I500").Select

замедлит ваш макросвместо этого вы можете использовать:

ws.range("I7:I500").TextToColumns _
    Destination:=range("L7:L500"), _
    DataType:=xlDelimited, _
    TextQualifier:=xlDoubleQuote, _
    ConsecutiveDelimiter:=False, _
    Tab:=True, _
    Semicolon:=False, _
    comma:=False, _
    Space:=True, _
    Other:=True, _
    OtherChar:=":"

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

Например, если вы хотите разделить слова на "_", вы можете использовать что-то вроде этого

Dim cell As Range

For Each cell In Range("L7:L500").Cells
If InStr(cell, "_") > 0 Then
   cell.Offset(0, 1) = Left(cell, WorksheetFunction.Find("_", cell))
   cell.Offset(0, 2) = Right(cell, Len(cell) -WorksheetFunction.Find("_",cell))
Else
   cell.Offset(0, 3) = cell
End If
Next cell 

, и если мы предположим, что столбец L содержит слово типа "Hello_World ", тогда в столбце M у вас будет" Hello_ ", а в столбце N у вас будет" World ", в следующем столбце будут все те слова, которые не имеют" _ "

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...