Excel 在指定的工作表行中查找并返回.Text数据类型的第一个实例
我想搜索一个特定的行,并将该行中包含的文本字符串的第一个实例赋给一个变量。字符串可以是任何文本字符串;它只需要是数据类型。text。我试过这个:Excel 在指定的工作表行中查找并返回.Text数据类型的第一个实例,excel,vba,Excel,Vba,我想搜索一个特定的行,并将该行中包含的文本字符串的第一个实例赋给一个变量。字符串可以是任何文本字符串;它只需要是数据类型。text。我试过这个: dim firstText as string dim rowNum as integer firstText = sheets("Sheet1").Rows(rowNum).Find(What:=Format(vbString)) 例如,如果行包含:123、“apple”、“pear”和-456,则函数将返回遇到的第一个文本字符串,在本例中为“a
dim firstText as string
dim rowNum as integer
firstText = sheets("Sheet1").Rows(rowNum).Find(What:=Format(vbString))
例如,如果行包含:123、“apple”、“pear”和-456,则函数将返回遇到的第一个文本字符串,在本例中为“apple”
使用循环的替代方法:
dim firstText as string
dim rowNum as integer
dim i as integer
const stopCol = 100
For i = 1 To stopCol
If VarType(Cells(rowNum, i)) = vbString Then
firstText = Cells(rowNum, i)
GoTo TheEnd
End If
Next
TheEnd:
这也不行。我同意@Scott对你问题的评论;检查单元格是否格式化为文本很可能不是您想要的,因为您可以在单元格中键入“=5”,然后单击“格式化为文本”-您还可以键入“=”Hello“并格式化为数字 相反,您可能希望检查特定单元格的值是否为数字,如下所示:
Sub duplicateSheets()
Dim rowNum As Integer
Dim searchRange As Range
Dim testCell As Range
Dim firstText As String
rowNum = 10
Set searchRange = Intersect(Sheets(2).UsedRange, Sheets(2).Range(rowNum & ":" & rowNum))
For Each testCell In searchRange
If Not (IsNumeric(testCell.Value)) Then
firstText = testCell.Value
Exit For
End If
Next
End Sub
这基本上就是上面的内容(使用不同的方法确定范围和循环),但它不检查单元格的格式类型,而是检查单元格中的数据是否以数字形式传递。它将拾取第一个未作为数字传递的单元格的值。在格式上搜索的问题是,它要求单元格实际格式为文本*,这可能会产生误导。您可能需要循环遍历数据集,对每个单元格进行测试,然后返回通过(或失败)测试的第一个单元格(取决于测试)。@Scott Holtzman,尝试了上述替代方法。还是不起作用。@ScottHoltzman,你关于使用循环的一般建议很好,thanks@Bacon,有效,谢谢。由于vbString的实现,我的版本不起作用,但当我使用您的IsNumeric建议时,我的版本起作用。这不是问题所在。使用以下命令:
ìf testcell.numberformat=“@”然后
,这意味着如果格式为文本,请查看microsoft numberformat的帮助。@PatrickLepelletier Hi Patrick-我知道这不是问题所在,但在我看来,OP最好用于检查单元格内的实际内容,而不是格式为什么[如我的回答所示]。例如,用户可能会选择整个工作簿并说“格式为记帐”(我经常自己这样做,以避免单独选择每个数字单元格块)。这会使单元格中的文本值显示为数字格式,这很可能(但不是100%)不是OP想要的格式。