第1个回答 2021-07-11
Sub test()
Dim brr(), i&, j&,iRow&,sr$,p%
iRow = Range("A65536").End(3).Row '取得A列最下方非空行号
arr = Range("A1:A" & iRow) 'A列内容赋值给类数组变量arr
ReDim brr(1 To UBound(arr), 1 To 1) '根据arr大小重定义动态数组brr大小
‘brr用来盛放目标结果
For i = 1 To UBound(arr)
sr = arr(i, 1) 'arr中的元素循环赋值给临时变量sr
If Len(sr) Then '循环跳过空值,即A列中的空白单元格
p = InStr(sr, "_") '查找sr中下短横的位置
If p Then
ss = Mid(sr, 1, p - 1) '截取下短横前的字符,结果传递给临时变量ss
Else
ss = sr '若p=0则把sr的内容传递给ss
End If
End If
brr(i, 1) = ss '结果写入数组brr的相应位置,每行结果与arr的行号一一对应
Next i
Range("B1").Resize(UBound(brr), 1) = ""
Range("B1").Resize(UBound(brr), 1) = brr '数组输出到工作表
End Sub
第2个回答 2021-08-02
有人说VBA好,有人说函数好。其实也可以用VBA自定义函数。
然后在B1调用 =test(a1) 即可。
Public Function test(a As Range)
Dim sr$, p%
sr = a.Value
p = InStr(sr, "_") '查找sr中下短横的位置
If p Then
test = Mid(sr, 1, p - 1) '截取下短横前的字符,结果传递给临时变量ss
Else
test = sr '若p=0则把sr的内容传递给ss
End If
End Function本回答被网友采纳
第3个回答 2021-07-12
能使用公式解决的问题,还是不要使用 VBA 代码为好!
比如,在 B1 单元格内输入下面的公式:
=IF(ISERROR(FIND("_",A1,1)),A1,LEFT(A1,FIND("_",A1,1)-1))
然后把公式向下复制即可。