テキストを複数のセルに分割する(Microsoft Excel)
Philには、テキストを含む一連のセルがあります。一部のテキストは長すぎるため、複数のセルに分割する必要があります。たとえば、セルに「クイックブラウンフォックス」が含まれていて、テキストを分割して12文字を超えないようにする必要がある場合、Philは簡単にそれを行うことができます。しかし、彼は、正確な12番目の文字ではなく、12番目の文字の前のスペースで分割が行われるようにしたいと考えています。フィルはこれを行う方法について途方に暮れています。
Excelの[テキストから列へ]ツールを使用できると思うかもしれませんが、このツールはその仕事には適していません。スペースなどの区切り文字に基づいてテキストを分割するようにツールを設定すると、各セルに1つの単語が表示されます。テキストを「固定幅」として分割するようにツールを設定した場合、単語はスペースで分割されません。各チャンクが指定したサイズであることを確認するだけです。
数式を使用して目的の結果を得ることができますが、そうすると、数式が驚くほど長くなります。たとえば、長すぎるテキストがセルA3にある場合、次の数式を使用して、12番目の文字の前のスペースでそのテキストの最初のチャンクを分割できます。
=IF(LEN($A3)>12,IF(ISERROR(FIND(" ",MID($A3,12,1) &MID($A3,11,1)&MID($A3,10,1)&MID($A3,9,1)&MID($A3,8,1) &MID($A3,7,1)&MID($A3,6,1)&MID($A3,5,1)&MID($A3,4,1) &MID($A3,3,1)&MID($A3,2,1))),MID($A3,1,1),MID($A3,1, 13-FIND(" ",MID($A3,12,1)&MID($A3,11,1)&MID($A3,10,1) &MID($A3,9,1)&MID($A3,8,1)&MID($A3,7,1)&MID($A3,6,1) &MID($A3,5,1)&MID($A3,4,1)&MID($A3,3,1)&MID($A3,2,1)))) ,RIGHT($A3,LEN($A3)))
覚えておいてください。これはすべて単一の式であり、最初のチャンクを取得するためだけのものです。 2番目、3番目、4番目、およびそれ以降のチャンクを取得する式はさらに長くなります。明らかに、数式を使用することは最善のアプローチではないかもしれません。
これにより、マクロを使用したままになります。マクロはテキスト文字列を調べて、必要な長さに簡単に切り刻むことができます。次のユーザー定義関数について考えてみます。
Function SplitMe(sSentence As String, iPos As Integer, Optional iLen = 12) Dim sSegments() As String Dim iSegments As Integer Dim sRest As String Dim sTemp As String Dim iSpace As Integer Dim J As Integer iSegments = 0 sRest = sSentence sTemp = Left(sRest, iLen + 1) Do Until Len(sTemp) <= iLen iSpace = 0 For J = Len(sTemp) To 1 Step -1 If Mid(sTemp, J, 1) = " " And iSpace = 0 Then iSpace = J Next J If iSpace > 0 Then sTemp = Left(sRest, iSpace - 1) sRest = Mid(sRest, iSpace + 1) Else sRest = Mid(sRest, Len(sTemp) + 1) End If iSegments = iSegments + 1 ReDim Preserve sSegments(1 To iSegments) sSegments(iSegments) = sTemp sTemp = Left(sRest, iLen + 1) Loop iSegments = iSegments + 1 ReDim Preserve sSegments(1 To iSegments) sSegments(iSegments) = sTemp If iPos <= iSegments Then SplitMe = sSegments(iPos) Else SplitMe = "" End If End Function
この関数は、2つまたは3つのパラメーターを取ります。最初のパラメーターは分割する文字列、2番目のパラメーターは文字列から必要なチャンク、3番目の(およびオプションの)パラメーターは各チャンクの目的の長さです。 3番目のパラメーターを省略した場合、関数は、各チャンクを最大12文字にする必要があると想定します。例として、テキストがセルA5にあると仮定すると、以下は、各チャンクの長さが最大12文字のテキストから2番目のチャンクを返します。
=SplitMe(A5,2)
この関数は、テキスト文字列内の各単語が各チャンクに指定されたターゲット長を超えない限り、良好な結果を返します。そうである場合は、完全な単語を含まないチャンクなど、奇妙な結果が得られます。
注:
このページ(または_ExcelTips_サイトの他のページ)で説明されているマクロの使用方法を知りたい場合は、役立つ情報を含む特別なページを用意しました。
_ExcelTips_は、費用効果の高いMicrosoftExcelトレーニングのソースです。
このヒント(3899)は、Microsoft Excel 97、2000、2002、および2003に適用されます。