1

Excel で数式を使用して、セル内の一連の単語をコンマで区切ろうとしています。セルに 5 つ以上の単語がある場合は、最初の 5 つの単語を取得したいだけです。セル内の最初の 5 つの単語を取得し、それらをコンマで区切るには、次のようにします。

=SUBSTITUTE(LEFT(A1,FIND("^",SUBSTITUTE(A1," ","^",5))-1), " ", ", ")

これはうまくいきます。しかし、これの問題は、ここでは数字が 5 であるため、セルに含まれる単語が 5 つ未満の場合、エラーが発生することです。私はこれで5を置き換えようとしました:

LEN(TRIM(A1))-LEN(SUBSTITUTE(A1," ",""))+1

したがって、私の関数は次のようになります。

=SUBSTITUTE(LEFT(A1,FIND("^",SUBSTITUTE(A1," ","^",LEN(TRIM(A1))-LEN(SUBSTITUTE(A1," ",""))+1))-1), " ", ", ")

しかし、これは機能しません。エラーが発生します。どうすればこれを行うことができますか?

また、最初の文字が「-」(引用符なし) の場合、最初の単語を無視し、2 番目の単語から始めたいと思います。言い換えれば、私はこのようなものが欲しいです:

I love my life very much should return I, love, my, life, very
- I love my life very much should return I, love, my, life, very ("-" は無視されます)
I love my life should return I 、愛、私の

助けてくれてありがとう

4

5 に答える 5

2

ここでは、少し異なるアプローチを示します。「5未満」の問題とは別に、「最後にスペースのない5つの単語」の問題も扱っています。

=LEFT(A1,FIND("^",SUBSTITUTE(A1 & "^"," ","^",5))-1)

EDIT 1:先頭の「-」に関する部分に気付きました。私の追加はあまりエレガントではありませんが、それとTRIMS末尾のスペースも処理します。

=TRIM(LEFT(IF(LEFT(A1,2)="- ",MID(A1,3,999),A1),FIND("^",SUBSTITUTE(IF(LEFT(A1,2)="- ",MID(A1,3,999),A1) & "^"," ","^",5))-1))

編集 2: そうそう、コンマ:

=SUBSTITUTE(TRIM(LEFT(IF(LEFT(A1,2)="- ",MID(A1,3,999),A1),FIND("^",SUBSTITUTE(IF(LEFT(A1,2)="- ",MID(A1,3,999),A1) & "^"," ","^",5))-1))," ",",") 

ここに画像の説明を入力

于 2013-08-08T02:33:40.293 に答える
2

これを試して:

=TRIM(LEFT(SUBSTITUTE(SUBSTITUTE(TRIM(SUBSTITUTE(A1,"-"," "))," ",","),",",REPT(" ",99),5),99))

于 2013-08-09T12:54:44.690 に答える
1

これは、ダッシュの後にスペースがない場合や、テキストに余分なスペースがある場合でも機能します。入力がきれいではないことがよくあります。

=SUBSTITUTE(LEFT(SUBSTITUTE(TRIM(SUBSTITUTE(A1,"-","",1)),
" ","*",5),IFERROR(FIND("*",SUBSTITUTE(TRIM(SUBSTITUTE(A1,"-","",1)),
" ","*",5))-1,999))," ",",")

可能なスペースまたは不足しているスペースの例

編集: István にコメントした後、私も完璧にしました。

=SUBSTITUTE(LEFT(SUBSTITUTE(TRIM(SUBSTITUTE(LEFT(TRIM(A1),1),"-","  ",1)
&MID(TRIM(A1),2,999))," ","*",5),IFERROR(FIND("*",SUBSTITUTE(
TRIM(SUBSTITUTE(LEFT(TRIM(A1),1),"-","",1)&MID(TRIM(A1),2,999))," ","*",5))-1,999))," ",",")

今すぐすべて修正

でも彼の方がエレガントだと思います。

于 2013-08-08T04:16:10.793 に答える
0

これを試して:

=SUBSTITUTE(LEFT(SUBSTITUTE(SUBSTITUTE(TRIM(SUBSTITUTE(A1,"- ","",1))&" "," ",", "),", ","|",MIN(LEN(SUBSTITUTE(TRIM(SUBSTITUTE(A1,"- ","",1))&" "," ",", "))-LEN(SUBSTITUTE(SUBSTITUTE(TRIM(SUBSTITUTE(A1,"- ","",1))&" "," ",", ")," ","")),5)),FIND("|",SUBSTITUTE(SUBSTITUTE(TRIM(SUBSTITUTE(A1,"- ","",1))&" "," ",", "),", ","|",MIN(LEN(SUBSTITUTE(TRIM(SUBSTITUTE(A1,"- ","",1))&" "," ",", "))-LEN(SUBSTITUTE(SUBSTITUTE(TRIM(SUBSTITUTE(A1,"- ","",1))&" "," ",", ")," ","")),5)))-1),",,",",")

この式は、次の手順を実行することで機能します。

  • 先頭のダッシュスペースを削除
  • 先頭または末尾のスペースを削除します
  • スペースの代わりにカンマ スペースを挿入し、末尾にカンマ スペースを追加します
  • 5 と文字列内の単語数の小さい方を計算します
  • 「|」を入れる 文字列が 5 単語未満の場合は、5 番目のコンマ スペースまたは末尾のコンマ スペースの代わりに
  • 「|」の位置を決める
  • 「|」を取り除く およびその右側のすべての文字
  • 最初の文字列にカンマが 1 つ埋め込まれているため、二重になっているカンマを削除します。

VBA ソリューションを検討する場合は、この複雑な式をユーザー定義関数に置き換えることができます。

Function words5(InputString As String) As String
    Dim wordArray As Variant
    wordArray = Split(Trim(Replace(InputString, _        'remove "-", put words into array
        "-", "", , 1)), " ")
    ReDim Preserve wordArray(LBound(wordArray) To _      'drop all but the first 5 words
        WorksheetFunction.Min(UBound(wordArray), 5 - 1))
    words5 = Replace(Join(wordArray, ", "), ",,", ",")   'rejoin the words with ", "
End Function                                             'separator

このコードを使用することのプラス面は、ワークシートの式と比較して保守性が高いことです。これは、単一の式に結合された元のビルディング ブロックにアクセスしないと、理解することも、安全に変更することもできません。

コードは、それが使用されているブック、または標準の Personal.xlsb ブックまたはアドイン ブックのいずれかにインストールする必要があります。

関数を使用するには、VBA エディターを介してワークブックに挿入できる標準モジュールにコピー アンド ペーストします。Visual Basicリボンの「開発者」タブのボタンでエディターを開くことができます。

于 2013-08-08T03:19:21.397 に答える
0

私もリングに帽子を投げると思いました。この式はベースをカバーする必要があると思います:

=SUBSTITUTE(TRIM(LEFT(SUBSTITUTE(TRIM(SUBSTITUTE(A1&" ","- ",""))," ",REPT(" ",99)),99*5))," ",",")
于 2013-08-10T06:29:28.203 に答える