2017-06-21 19 views
0

我有字符串,我只想从字符串中导出文本(字符串中的分隔符是“_”)。 例如:仅从字符串中导出文本,VBA

字符串:Prijem_LPLC_MO-234_333333

提取物:Prijem_LPLC

我的代码:

Public Function komentar(text_string As String) As String 
Dim text() As String 
Dim pom As String 
text() = Split(text_string, "_") 

komentar = "" 
For i = LBound(text) To UBound(text) - 1 
If Application.IsText(text(i)) Then 
    komentar = komentar & "_" & text(i) 
End If 
Next i 

End Function 

但它拷贝满弦与 “_” 在开头。

回答

1

你的代码有点奇怪。如果我们通过它,

首先要拆分的字符串

text() = Split(text_string, "_")

所以在阵列文本,对于字符串Prijem_LPLC_MO-234_333333,你将有:

  • Prijem
  • LPLC
  • MO-234

然后,对于您的阵列中的每个对象,您测试,如果对象是文本:

Application.IsText(text(i))

是哪种情况数组中的每个对象。

最后,您连接komentar用这种结构:

“正在测试_ + 对象”

在你的情况下,它会是这样的:

第一次迭代:komentar = _Prijem

第二次迭代:komentar = _Prijem _LPLC

第三次迭代:komentar = _Prijem_LPLC _MO-234

第四次迭代:komentar = _Prijem_LPLC_MO-234 _333333

事实上,如果你只想从这个字符串中得到文本,没有“_”元素,问题来自这一行:

komentar = komentar & "_" & text(i)

在那里你不仅添加文字,而且还有“_”

为您的代码工作,你只需要改变这一部分。 考虑尝试这样的:

komentar = komentar & text(i) 

邮政Scriptum:另外,这里只是一个建议,我觉得用LBOUND(文本)也许是太多了,而你可以使用,既然你想通过你所有的阵列。

For i = 0 To UBound(text) - 1

+0

是的,我现在明白了。然后,实际上,我需要检查该子字符串中是否有数字字符,然后不要在提取中包含该子字符串。或者如果在一个子字符串中都是字母,那么将其包含在提取中。 – user155754

+0

对于字母条件,您可以检查字符串中每个字符的ASCII或使用类似[正则表达式](https://www.experts-exchange.com/articles/1336/Using-Regular-Expressions-in-Visual - 基本换应用程序和视听-Basic的6.html)。经过小小的谷歌搜索,我发现[这](https://techniclee.wordpress.com/2010/07/21/isletter-function-for-vba/)和[this](https://stackoverflow.com/questions/29633517 /如何-可以-I-检查-IF-A-字符串只,包含-字母)。 – Loowood

+0

谢谢,这可能会诀窍。 – user155754

0

而不是komentar = ""添加komentar = text(0)。你的代码复制第一个符号,因为在这一行中你第一次是komentar是空的。所以代码返回“_Prijem”。

0

你就近了。

为了消除任何带数字的字符串,您需要检查每个字符。 使用将结果字符串放在一起的方法,开始时总会有下划线。 (另一种方法最后会有下划线)。所以完成后,只需删除第一个字符。

Option Explicit 
Public Function komentar(text_string As String) As String 
Dim text() As String 
Dim pom As String 
Dim i As Long, j As Long 

text() = Split(text_string, "_") 

komentar = "" 
For i = LBound(text) To UBound(text) 

'Check each character 
For j = 1 To Len(text(i)) 
    If Mid(text(i), j, 1) Like "#" Then Exit For 
Next j 

'j will pass this test if no characters are digits 
If j > Len(text(i)) Then 
    komentar = komentar & "_" & text(i) 
End If 
Next i 

'Strip off the first "_" 
komentar = Mid(komentar, 2) 

End Function 

你也可以用VBA正则表达式做到这一点,但是这是一个非常不同的解决方案。