Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 如果列中的单元格值<&燃气轮机;某些文本然后单元格值与文本拆分为列_Excel_Vba - Fatal编程技术网

Excel 如果列中的单元格值<&燃气轮机;某些文本然后单元格值与文本拆分为列

Excel 如果列中的单元格值<&燃气轮机;某些文本然后单元格值与文本拆分为列,excel,vba,Excel,Vba,我试图确定H列(每个文件的行数不同)中的单元格值是“Words”还是“Words2”。不包含“Words”或“Words2”的单元格将根据空格分隔符拆分为单独的列,而包含“Words”和“Words2”的单元格则没有更改。目前我的代码没有分隔任何单元格。我对使用Dim作为Range和InStr很陌生,我不完全确定使用它们是否最有效。我也尝试过代码的多种变体,但都无济于事。ARGNAME是H列中的每个单元格(至少这是我的目标) 例如:H1=“Words”没有变化,H2=“Words我不在乎”拆分为

我试图确定H列(每个文件的行数不同)中的单元格值是“Words”还是“Words2”。不包含“Words”或“Words2”的单元格将根据空格分隔符拆分为单独的列,而包含“Words”和“Words2”的单元格则没有更改。目前我的代码没有分隔任何单元格。我对使用Dim作为Range和InStr很陌生,我不完全确定使用它们是否最有效。我也尝试过代码的多种变体,但都无济于事。ARGNAME是H列中的每个单元格(至少这是我的目标)

例如:H1=“Words”没有变化,H2=“Words我不在乎”拆分为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
Sub-WordSplit
最后一排一样长
lastRow=范围(“A”和Rows.Count).End(xlUp).Row
Dim SrchRng作为范围,ARGNAME作为范围
设置SrchRng=Range(“H1:H”和lastRow)
对于SrchRng中的每个ARGNAME
如果InStr(1,ARGNAME.Value,“Words”)或InStr(1,ARGNAME.Value,“Words”)小于0_
然后是列(“H:H”)。TextToColumns Destination:=范围(“H1”),数据类型_
:=xl分隔,连续delimiter:=True,空格:=True_
FieldInfo:=数组(数组(1,1)),trailingMinusNumber:=真
如果结束
下一个ARGNAME
端接头


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

  • 在模块顶部使用了
    选项Explicit
  • 使用特定工作表完全限定所有范围(代号:Sheet1)
  • 固定的代码缩进,使其更容易阅读
  • 与仪表相关的问题:
    • 它只返回正整数(>=0)
    • 必须检查所有
      InStr
      表达式的返回值(而不仅仅是最后一个)
    • 如果单元格不包含“单词”且不包含“单词2”
    • 如果:
    • 如果InStr(1,ARGNAME.Value,“Words”)或InStr(1,ARGNAME.Value,“Words”)<0
    • 变成:
    • 如果InStr(1,argName.Value,“Words”)=0且InStr(1,argName.Value,“Words”)=0
  • 下一期:
    • If
      语句被分隔到无效位置的第二行(语法错误)
    • ”)<0_
      然后是列(“H:H”)
    • 下一行将H列中包含多个单词的所有单元格拆分为每个不包含“单词”或“单词2”的单元格

代码意味着H列之外没有数据
您的初始代码是正确的,但我更新了以下内容:

  • 在模块顶部使用了
    选项Explicit
  • 使用特定工作表完全限定所有范围(代号:Sheet1)
  • 固定的代码缩进,使其更容易阅读
  • 与仪表相关的问题:
    • 它只返回正整数(>=0)
    • 必须检查所有
      InStr
      表达式的返回值(而不仅仅是最后一个)
    • 如果单元格不包含“单词”且不包含“单词2”
    • 如果:
    • 如果InStr(1,ARGNAME.Value,“Words”)或InStr(1,ARGNAME.Value,“Words”)<0
    • 变成:
    • 如果InStr(1,argName.Value,“Words”)=0且InStr(1,argName.Value,“Words”)=0
  • 下一期:
    • If
      语句被分隔到无效位置的第二行(语法错误)
    • ”)<0_
      然后是列(“H:H”)
    • 下一行将H列中包含多个单词的所有单元格拆分为每个不包含“单词”或“单词2”的单元格


代码意味着在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

试试这样的

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

啊,我分离了
InStr
语句,并将它们更新为
,而不是
,以及
文本到列的范围。但是,我确实需要为
TextToColumns
保持H列的目标范围,因为我需要它从它起源的列开始,而不是从它旁边的列开始。是的,我特别确保H列与A列相匹配,因为文件中的行数在文件中是一致的,而不是从一个文件到另一个文件。非常感谢。我注意到了你的起始栏意图并更新了我的答案。啊,我将
InStr
语句分开,并将它们更新为
,而不是
,以及
文本到栏的范围。但是,我确实需要为
TextToColumns
保持H列的目标范围,因为我需要它从它起源的列开始,而不是从它旁边的列开始。是的,我特别确保H列与A列相匹配,因为文件中的行数在文件中是一致的,而不是从一个文件到另一个文件。非常感谢。我注意到了你开始专栏的意图,并更新了我的答案。然而,这可能可以满足类似的需求。它确实完全改变了我的原始代码,而不是需要进行更改的大纲。如果插入上面的行计数代码,则在文件中保持相同行数的原始目的可能会丢失。此项适用的列中有空白单元格,不确定此特定的
lastRow
是否包括那些过去有数据但已被删除的行?分隔符是空格分隔符,而不是双引号。谢谢你的意见!看到另一种可能性总是很好的。虽然,这可能可以满足类似的需求,但它确实完全改变了我的原始代码,而不是需要进行更改的大纲。如果插入上面的行计数代码,则在文件中保持相同行数的原始目的可能会丢失。适用于的列中有空白单元格,n