我在遍历VBA代码并将正确的变量放入特定单元格时遇到问题

时间:2019-02-06 22:02:06

标签: excel vba

我对VBA有点陌生

当有人输入错误child_variations.color时,宏的工作方式是:更新属性以将正确的数据或其中1个以上的错误反映到单元格中。宏将在冒号处的字符串中拆分为单独的单元(宏的该部分正常工作)。然后,宏需要遍历每个单元格,如果该单元格中的字符串包含下划线(),则该字符串将保存在变量中并放入单元格中。如果字符串不包含下划线(),则将其保存到其他变量中。

我遇到的问题是将字符串放到单独的单元格中。我想将冒号左侧的所有文本放入一个字符串和一个单元格中。我还想将冒号右边的文本放在另一个字符串和单元格中。我尝试使用下面的循环和if语句,但是冒号左右两边的所有文本都放在同一个单元格中。

下面我将介绍单元格在电子表格中的外观。

之前 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 :(得分:0)

首先您可以显示一列包含您的数据和一列具有所需结果的列,以便我尝试一下吗?

第二:

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”,下一列将包含所有这些单词没有任何“ _”