如果列<>中的单元格的值是某些文本,则单元格的值将与文本拆分为列

我试图确定列H中的单元格值(行数不同)是“单词”还是“单词2”。 不包含“单词”或“单词2”的单元格将根据空格分隔符分成不同的列,而包含“单词”和“单词2”的单元格不会更改。 目前我的代码不会分隔任何单元格。 我是新的使用Dim作为范围和InStr,我不完全确定是否最有效的使用它们。 我已经尝试了多种代码也无济于事。 ARGNAME是列H中的每个单元格(或者至less这是我所瞄准的)。

例如:H1 =“单词”不变,H2 =“我不在乎的单词”分解为H2:L2

Sub WordSplit Dim lastRow As Long lastRow = Range("A" & Rows.Count).End(xlUp).Row Dim SrchRng As Range, ARGNAME As Range Set SrchRng = Range("H1:H" & lastRow) For Each ARGNAME In SrchRng If InStr(1, ARGNAME.Value, "Words") Or InStr(1, ARGNAME.Value, "Words2") < 0 _ Then Columns("H:H").TextToColumns Destination:=Range ("H1"), DataType _ :=xlDelimited, ConsecutiveDelimiter:=True, Space:=True, _ FieldInfo:=Array(Array(1, 1)),TrailingMinusNumbers:=True End If Next ARGNAME End Sub 


 Option Explicit Public Sub WordSplit1() Dim ws As Worksheet Set ws = Sheet1 Dim lastRow As Long lastRow = ws.Range("H" & Rows.Count).End(xlUp).Row Dim srchRng As Range, argName As Range Set srchRng = ws.Range("H1:H" & lastRow) For Each argName In srchRng If InStr(1, argName.Value2, "Words") = 0 And _ InStr(1, argName.Value2, "Words2") = 0 Then argName.TextToColumns Destination:=argName, _ DataType:=xlDelimited, _ ConsecutiveDelimiter:=True, _ Space:=True, _ FieldInfo:=Array(Array(1, 1)), _ TrailingMinusNumbers:=True End If Next End Sub 

您的初始代码是正确的,但我更新了以下内容:

  • 在模块的顶部使用Option Explicit
  • 使用特定图纸(CodeName:Sheet1)完全限定所有范围
  • 固定代码缩进,使其更易于阅读
  • InStr相关的问题:
    • 它只返回正整数(> = 0)
    • 所有InStrexpression式都必须检查返回值(不只是最后一个)
    • 如果单元格不包含“单词”并且不包含“单词2”
    • 初始如果:
    • If InStr(1, ARGNAME.Value, "Words") Or InStr(1, ARGNAME.Value, "Words2") < 0
    • 变为:
    • If InStr(1, argName.Value, "Words") = 0 And InStr(1, argName.Value, "Words2") = 0
  • 下一期:
    • If语句被分隔到第二行的无效位置(语法错误)
    • ") < 0 _ Then Columns("H:H")
    • 您的下一行将分割包含多个单词的列H中的所有单元格,用于不包含“Words”或“Words2”的每个单元格

该代码暗示H列以外没有数据

尝试这样的事情

 Sub WordSplit() Dim lastRow As Long Dim r As Long lastRow = Range(Cells(1, 1), Cells(1, 1).End(xlDown)).Count For r = 1 To lastRow If Cells(r, 8) = "Words" Or Cells(r, 8) = "Words2" Then Else Cells(r, 8).TextToColumns Destination:=Cells(r, 8), DataType:=xlDelimited,TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=True End If Next r End Sub