2017-06-21 5 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

2回目の反復:komentar = _Prijem _LPLC

3回目の反復:komentar = _Prijem_LPLC _MO-234

4回目の繰り返し:確かにkomentar = _Prijem_LPLC_MO-234 _333333

、あなたの場合この文字列から "_"要素を除いたテキストのみが必要な場合は、問題は次の行にあります。

あなたはちょうどこの部分を変更する必要があり、動作するようにあなたのコードのために

をテキストを追加するだけでなく、「_」しているだけでなく、

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

。あなたはを使用することができますしながら、あなたを介して行ってみたいので、また、ここでは単にアドバイスは、私は、があまりにも多分あるLBOUND(テキスト)を使用して思う:

komentar = komentar & text(i) 

ポストScriptum: これをしようと考えてみましょうすべてのあなたの配列。

For i = 0 To UBound(text) - 1

+0

はい、わかりました。実際には、その部分文字列に数値文字が含まれているかどうかを確認し、その部分文字列を抽出に含めないようにする必要があります。または、部分文字列内にすべての文字が含まれている場合は、それを抽出に含めます。 – user155754

+0

アルファベットの場合、文字列の各文字のASCIIを確認するか、[正規表現](https://www.experts-exchange.com/articles/1336/Using-Regular-Expressions-in-Visual -Basic-for-Applications-and-Visual-Basic-6.html)を参照してください。小さなGoogle検索の後、私は[this](https://techniclee.wordpress.com/2010/07/21/isletter-function-for-vba/)と[this](https://stackoverflow.com/questions)を見つけました。/29633517 /文字列のみを含む文字をチェックする方法)。 – Loowood

+0

ありがとう、それはおそらくトリックを行うでしょう。 – user155754

0

代わりのkomentar = ""komentar = text(0)を追加します。あなたのコードは最初のシンボルをコピーします。なぜなら、この行にはkomentar = komentar & "_" & text(i)が初めて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の正規表現で行うこともできますが、これは非常に異なる解決方法です。

関連する問題