私は多くのプログラミング言語でできるように、Excelの式で文字列を分割しようとしています.
_string words = "some text".split(' ');
_
問題は、セルに複数のWordがあることを確認できないことです。 FIND()
またはSEARCH()
関数を使用しようとすると、スペースがなければ_#VALUE
_を返します。個々の単語を返すように文字列を分割する簡単な方法はありますか?最初の単語または他のすべて単語のいずれかを返すようにもっと良い方法はありますか?
最初の単語または他のすべての単語を返す式。
=IF(ISERROR(FIND(" ",TRIM(A2),1)),TRIM(A2),MID(TRIM(A2),FIND(" ",TRIM(A2),1),LEN(A2)))
例と結果
Text Description Results
Blank
Space
some Text no space some
some text Text with space text
some Text with leading space some
some Text with trailing space some
some text some text Text with multiple spaces text some text
式に関するコメント:
以下は、スペースで区切られたときにセルA1の最初のWordを返します(Excel 2003で動作します)。
=LEFT(A1, SEARCH(" ",A1,1))
=IFERROR(LEFT(A3, FIND(" ", A3, 1)), A3)
これは、最初にセルにスペースが含まれているかどうかをチェックし、含まれている場合はスペースから最初の値を返し、そうでない場合はセルの値を返します。
編集
上の式に追加するだけで、セルに値がない場合は0を返します。メッセージまたはユーザーに空であることを伝える何かを表示したい場合は、次を使用できます。
=IF(IFERROR(LEFT(A3, FIND(" ", A3, 1)), A3)=0, "Empty", IFERROR(LEFT(A3, FIND(" ", A3, 1)), A3))
一度にセルを記述すると、これらのことはより単純になる傾向があり、長い数式を小さな数式に分割して、途中で確認できます。その後、中間計算を非表示にするか、すべてを1つの式にまとめることができます。
例えば、ジェームズの式をとる:
=IFERROR(LEFT(A3, FIND(" ", A3, 1)), A3)
これはExcel 2007以降でのみ有効です。
次のように分割します。
B3: =FIND(" ", A3)
C3: =IF(ISERROR(B3),A3,LEFT(A3,B3-1))
作業が少しずつ簡単になります(一度に1チャンクずつ)。完了したら、それを
=IF(ISERROR(FIND(" ", A3)),A3,LEFT(A3,FIND(" ", A3)-1))
あなたがとても望むなら。
一度だけ列に割り当てる必要がある場合、答えはMS Excelの「列へのテキスト」機能です。
MSヘルプ記事を参照してください: http://support.Microsoft.com/kb/214261
HTH
他の回答では素晴らしいワークシートフーがいくつかありますが、ユーザー定義関数(udf)を定義し、シートまたは数式からこれを呼び出すことができることを見落としていると思います。
次の問題は、配列全体または要素のどちらで作業するかを決定することです。
たとえば、このUDF機能コード
_Public Function UdfSplit(ByVal sText As String, Optional ByVal sDelimiter As String = " ", Optional ByVal lIndex As Long = -1) As Variant
Dim vSplit As Variant
vSplit = VBA.Split(sText, sDelimiter)
If lIndex > -1 Then
UdfSplit = vSplit(lIndex)
Else
UdfSplit = vSplit
End If
End Function
_
1つのセルに次のものを含む単一の要素を許可します
=UdfSplit("EUR/USD","/",0)
または、セルのブロックを使用できます
=UdfSplit("EUR/USD","/")
セルを強調表示し、Dat => Text to Columnsを使用します。DELIMITERはスペースです。結果は、スプリットがスペースを見つけるのと同じ数の列に表示されます。