• ベストアンサー

最後の句点のあとの文字列を別のセルにコピーする

セル(E5)に、文字列データがあります。いろいろな種類です。全角英数・半角英数・漢字・カタカナ・ひらがな。記号など。 その中に句点「。」が何個かありますが、最後の句点からあとの文字列を抽出して、セル(F5)に表示します。 例 「本日は晴天なり。It is fine today。明日はどうでしょうか。終わり」→「終わり」 「How are you? こんにちは。東京。日本。」→「」 「明日は雨か」→「明日は雨か」 「昨日は曇りでした。昨日は曇りでした。昨日は曇りでした。that's all.」→「that's all.」 ---- できれば関数で、・・無理でしたら、マクロ、VBAでもかまいません。VBAで作っていますが、思うように動いてくれません。 Mid関数で、句点の数を把握して、最後の句点の語順を把握し、それ以降の文字列を別のセルに移す。・・・ これでもいいようですが、かなり乱雑なラインになってしまいそうです。 先の質問で、関数でも処理できる回答を頂きまして、何か関数処理が出来そうな気がしてきました。そのほか、VBAでもシンプルなもながありましたらお願いします。

noname#18526
noname#18526

質問者が選んだベストアンサー

  • ベストアンサー
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.6

Public Function lastword(s As String) As String Dim a a = Split(s, "。") lastword = a(UBound(a)) End Function

その他の回答 (6)

  • nishi6
  • ベストアンサー率67% (869/1280)
回答No.7

>できれば関数で、 無理やり、1つの式で行いました。 セル(E5)に文字があるとします。 セル(F5)に =MID(E5, MAX(IF(MID(E5,ROW(INDIRECT("A1:A"&LEN(E5))),1)="。" ,ROW(INDIRECT("A1:A"&LEN(E5)))))+1 ,LEN(E5)-ROW(INDIRECT("A1:A"&LEN(E5)))+1) と入力して(上の4行はつながっている1つの式です)、これは配列数式なので、 Ctrl+Shift+Enter で確定します。 うまく確定できれば、数式の窓で、上の式が {上式} のようにカギカッコで囲まれて見えます。 失敗したら、F2キーを押して編集モードにして、再度Ctrl+Shift+Enterとしてみてください。 また、上の式は文字列の長さを任意(最大行数まで)としています。例えば、100文字が最大なら、 =MID(E5, MAX(IF(MID(E5,ROW(INDIRECT("A1:A100")),1)="。" ,ROW(INDIRECT("A1:A100"))))+1, 100) のようにしてかまいません。 <チョッと説明> 普通の関数だけでは、一番右の『。』の位置の特定に苦労します。 上の式では、  ROW(INDIRECT("A1:A"&LEN(E5))) と 配列数式 でVBAのForNextのような意味合いを行っています。 この方法で、Excelの式に特殊な繰り返しを行わせることができるはずです。 ただ、ユーザー定義関数を書けば、非常に簡単なことを考えると、VBAの威力を再認識します。 ご参考に。(WinXP、Excel2000です)

noname#18526
質問者

補足

皆さんのご協で仕事が楽になりつつあります。すばらしい!

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.5

こんばんは。 関数処理ということで、ユーザー定義関数にしました。 最後の句点の句点を探すパターンを使用しました。正規表現のパターンで組めれば、多少の変化には対応できます。 '<標準モジュールのみ> Function GetPostPunctuation(arg As String) As String   Dim Matches As Object   Dim Match As Object   Dim ArgTmp As String   Dim buf As String   ArgTmp = Replace(arg, Chr(&HA1), "。")   With CreateObject("VBScript.RegExp")    .Global = False '検索は一回きり    .IgnoreCase = True '大文字小文字なし    .Pattern = "(.*。)([^。]+)$" 'パターン    If .Test(arg) = False Then      If InStr(ArgTmp, "。") = 0 Then       buf = arg       Else       buf = ""      End If      GetPostPunctuation = buf      Exit Function    End If        Set Matches = .Execute(ArgTmp)    For Each Match In Matches      buf = .Replace(Match.Value, "$2")    Next Match   End With   GetPostPunctuation = buf End Function 実際は、以下がイレギュラーのようです。 >「明日は雨か」→「明日は雨か」 使用方法はこのようにします。 =GetPostPunctuation(A5)

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.4

ユーザー関数にしてみました。下記aftは好きな英数の名前をつけてよい。 Function aft(A) p = 0 Do s = p + 1 p = InStr(s, A, "。") Loop While p <> 0 aft = Mid(A, s, Len(A) - s + 1) End Function 標準モジュールに貼り付ける。 シートのセルに =aft(A1) と入れる。(A1に文字列があるものとする。) (例) How are you? こんにちは。東京。日本。 How are you? こんにちは。東京。日本 日本 明日は雨か 明日は雨か

  • papayuka
  • ベストアンサー率45% (1388/3066)
回答No.3

ユーザー定義関数で、、、 F5 に =myFunc(E5) Function myFunc(r As Range) As String Application.Volatile If InStr(1, r.Text, "。", vbTextCompare) = 0 Then   myFunc = r.Text Else   For i = Len(r.Text) To 1 Step -1    If Mid(r.Text, i, 1) = "。" Then      myFunc = Right(r.Text, Len(r.Text) - i)      Exit For    End If   Next i End If End Function

  • fortranxp
  • ベストアンサー率26% (181/684)
回答No.2

取り敢えず一例です。 Sub 抽出() Dim i As Integer Dim j As Integer Dim str As String str = Sheet1.Cells(5, 5) j = 0 For i = 1 To Len(str) If Mid(str, i, 1) = "。" _ Then j = i Next i Sheet1.Cells(5, 6) = Right(str, Len(str) - j) End Sub

  • ramuta
  • ベストアンサー率32% (74/227)
回答No.1

処理用に列を何列か使ってしまいますが、 LENとINSTRとMIDとIFだけで出来ると思いますね。 >LENで全体の文字数をチェック >INSTRで「。」の位置をチェック >MIDで「。」以降の文字を抜き取り これで列に文字を切り出して、隣の列に更に次の「。」以降の 文字を切り出してと言うのを一文に含まれる「。」の最大数繰り返して 最後の列をIFで決めれば行けますね。 http://www.moug.net/tech/exvba/0140016.htm ↑これが比較的近いですかね http://www.moug.net/tech/exvba/0140036.htm ↑Excel2000以降であればこれを使うともっと楽ですね。 式も書いておきたいのですけどちょっと今は書けません・・・

関連するQ&A

  • エクセルに入力した文字列に句点を追加したい

    エクセルで文字列のリストを作ったのですが、完成後に文字列の最後に句点(。)を入れることになりました。 各セルの文字列に一斉に句点をつける方法を教えてください。 例) すぐに回答ほしいです     ↓ すぐに回答ほしいです。

  • エクセルに入力した文字列に句点が無い場合に句点を追加したい

    エクセルで文字列のリストを作ったのですが、列の中に句点がついているセルとついていないセルがあります。これを、統一してすべて句点をつけることになりました。 現在句点のついていないセルに句点をつける方法を教えてください。 なお、対象範囲は一列のみですので、任意のセルについてこの方法がわかれば、あとはオートフィルでコピーすれば解決します。 ちなみに、過去の質問集を見たところ、一斉に句点をつける方法として「B1=A1&"。"でB1をコピーして「編集」「形式を選択して貼り付け」で「値」にしてA1に貼り付ける」という方法がありました。 基本的な質問で恐縮ですがよろしくお願いします。

  • セル内の文字列操作について

    Excelでセル内の文字列を操作したいのですが、Excelの標準の関数では出来そうにないので、どなたかお力をお貸しください。 1つのセル内に、文字列や数値が複数入っています。 (例) Excel 12 りんご Word 11 このセルを調べて、数値のデータが複数入っている場合、最大値のみを表示させ、残りの数値データは削除したいのです。 (結果) Excel 12 りんご Word この処理の対象はセル内の数値データであって文字列には作用させず、結果的には文字列はそのまま表示させたいのです。 Excelの文字列に関する関数を調べてみたのですが、該当するものがなく、VBAを使用しなくてはならないのかもしれません。処理するデータが大量なため、VBAマクロなどで処理できれば大変ありがたいのですが、どなたかご存知の方がいらっしゃいましたら、ご教授くださいませ。どうぞよろしくお願いいたします。

  • Excelでセル内の文字列のみをコピーする方法

    Excelでセル内の文字列のみをクリップボードにコピーする方法を教えてください。 ※クリップボードにコピーをする方法であり、他のセルに値のみをペーストする方法ではありません。 満たしたい点は2つです。 ・表示している文字列のみを取得 ・複数のセルを同時にコピー 一つのセルに以下の文字列が入っていた場合(#以外) #123 #"abc" コピーするとクリップボードを文字列として取得すると以下の文字列が得られます #"123 #""abc""" これを以下の文字列が得られるようにしたいのです。 #123 #"abc" 1つのセルだけでいい場合は、セルを編集状態にしてコピーしたり アクティブセルの数式バーをコピーすればいいのですが、 これは当然、複数のセルを同時に選択する場合には使えません。 VBAを使う方法でもそうでなくてもかまいません。 (VBAの場合はコードもお願いしたいです) よろしくお願いします。

  • 同一セル内に関数と文字列を同居させるには?

    関数を含むセルに、関数以外のモノを表示させるには どのように記述すればよいのでしょうか。 同じセル内に、"文字列"+"関数で取得した文字列"+"文字列"を表示させたいのです。 ご存知の方がいらっしゃいましたら、教えていただけると嬉しいです。 よろしくお願いします。

  • EXCEL2010で同じ文字列のセルの数を数え・・

    EXCEL2010で一つのワークシート上に様々な文字列が散らばっているとします。 この中でたとえばAAAという文字列が何個あるかを抽出してAAA 1、またBBBという文字列が何個あるかを抽出してBBB 3というように表示させたいのですが、方法をご存じの方、よろしくお願いいたします。VBAを使わずに解決して下さると嬉しいです。 ちなみに、COUNTIFなどの関数は、あらかじめ探したい文字列が分かっている場合には使えますが、本件はそうではなく、ワークシート上にどんな文字列があるのか一目ではわからないくらいたくさんあります。 理想は、その文字列が入っている全てのセルを範囲選択しておいて、何か関数で抽出させ、 AAA 3 ABC 19 BBB 21 DCF 3 などといったリストが作成されることです。 よろしくお願いいたします。

  • エクセルであるセルの文字が他のセル内で1文字でも存在するかを知る関数は?

    エクセルであるセルの文字が他のセル内で1文字でも存在するかを知る関数はありますか? たとえばA列の値に存在する文字がB列に1文字でもあるかを チェックすることができるのでしょうか。 A列    |   B列    |   C列 -------+----------+---------- ABCD  |  XYZB   |  ○ --> Bがある XY    |  ABSCE  |  X --> XもYもない HD     |  XUDM  |  ○ --> Dがある マクロ(VBA)でなく関数で表したいのですが このような関数はありますか? 関数のヘルプを調べたのですが、出来そうで出来ません。 どうぞよろしくお願いします。

  • EXCELで、指定セルにある文字列が入っていれば、別のセルに指定文字を入れたい

    EXCELで、指定するセルに、例えば「猫」という文字列が入っていれば、 別の指定セルに1という数字をいれ、 入っていなければ、0という数字を入れたいです。 IF関数を使えばよいのかと思ったのですが、 よくわかりません。 すみませんが教えていただけないでしょうか。

  • Excelのセルに有る文字列の切り分けの仕方

    MIDを使ってやってみましたが、思った通りの結果が得られなかったので、ご質問させていただきます。 セルのL1、M1に★・・・、●・・・・・、▲・・・・・・、★・・、と言うような文字列が入っております。(これはその時により異なりますが、MAXでL100ぐらいになり、記号もセル内で複数回出現、・は定数ではありません) それをL1に有る★以降次の記号までの文字列をO1に、●以降をP1に、▲以降をQ1に、 同じくM1に有る文字列もR1、S1、T1に文字列を ボタン1つで入れたいのですが、どの様に関数又は VBAで組んだらいいのでしょうか?よろしくお願いいたします。

  • 指定した2つの文字列を含むセル

    エクセルで、指定した2つの文字列両方を含むセルをカウントしたいのですが、関数でできますか?

専門家に質問してみよう