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