• ベストアンサー

エクセルで少し複雑な条件付置き換えをしたい

エクセルで "Tom ABC"   →"Tom A.B.C." "Yamada CD, Tanaka KK"  →"Yamada C.D., Tanaka K.K." "Sachiko PPPP" →"Sachiko P.P.P.P."    ・    ・    ・ のように人名+スペースの後の,複数の大文字の間に,それぞれピリオドを入れたいのですが,一括してやる方法はないでしょうか? なお,2番目の例のように,一つのセルに2セット以上が入っていることもあります.その場合,セット間にはカンマが入っています. また,大文字の数は一定ではありません. どうぞよろしくお願いいたします.

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

  • ベストアンサー
  • jindon
  • ベストアンサー率43% (50/116)
回答No.1

ユーザー定義関数です。 1) エクセル画面で Alt + F11 キーを押して VBE を起動 2) 「挿入」->「標準モジュール」で、右空白部分に、下記コードを貼り付ける。 3) X をクリックしてウィンドウを閉じ、エクセル画面に戻る。 セルに =ennogyoja(A1) という具合に使ってください。 Function ennogyoja(txt As String) As String Dim x, i, a() As String, comma As String x = Split(Trim(txt)) For i = 0 To UBound(x) If Len(x(i)) > 0 And x(i) = UCase(x(i)) Then Select Case Right(Trim(x(i)), 1) Case Chr(44) comma = Chr(44) x(i) = Left(Trim(x(i)), Len(Trim(x(i))) - 1) Case Else comma = Empty End Select ReDim a(Len(x(i)) - 1) For ii = 1 To Len(x(i)) a(ii - 1) = Mid(x(i), ii, 1) Next x(i) = Join(a, ".") x(i) = x(i) & "." & comma End If Next ennogyoja = Join(x, Chr(32)) End Function

ennogyoja
質問者

お礼

ありがとうございました! わざわざスクリプトまで書いていただいて,本当に助かりました. なるほど,ユーザー定義関数というものがあるのですね.はじめて知りました. これからも複雑な変換をする必要が生じると思うので,勉強してみたいと思います.

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

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

こんにちは。 私のも、いろいろなもので試してみてください。 いくつかの例で、決められないものがあります。 Yamada CD, Tanaka KK の変換も可能ですが、   →"Yamada C.D., Tanaka K.K." ただ、こういう場合は、 Yamada CD, Tanaka KK.  →"Yamada C.D., Tanaka K.K." 今の段階では、こうなります。 また、以下の場合は、 Tom A.B.C.  →"Tom A.B.C." 変換されません。 '----------------------------------- Function CommaEnter(ByVal Argument As Variant) As String Dim Matches As Object Dim Match As Object Dim i As Long Dim myStr As String Dim buf As String If VarType(Argument) = vbString Then  myStr = Argument Else  CommaEnter = Argument End If With CreateObject("VBScript.RegExp")  .Pattern = "([A-Z][A-Z]+)"  .Global = True  .IgnoreCase = False  If .Test(myStr) Then   Set Matches = .Execute(myStr)  For Each Match In Matches   For i = 1 To Len(Match.Value)    buf = buf & "." & Mid$(Match.Value, i, 1)   Next i   myStr = Replace(myStr, Match.Value, Mid$(buf, 2))   buf = ""  Next  End If End With   CommaEnter = myStr End Function

ennogyoja
質問者

お礼

お時間を割いていただいて,スクリプトを書いてくださりありがとうございました. 複数のスクリプトを比較できるので,ユーザー定義関数の勉強にもなります. なかなか難しいですが,頑張ってみます.

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • vbscriptの偽条件処理について

    VBスクリプトで以下の処理をさせたいのですが 行き詰まってしまいました。お助けください 以下のようにfilename.txtというファイルがあり 人名と文字列があります。 このうち、特定の文字列が"存在しない"人名を出力したいのです。 例えば、「abcde」をキーとするとyamada,satoを出力したいです。 「zzzz9」をキーとするとyamadaと出力する具合です。 よろしくお願いいたします filename.txt(定義ファイル) ---------------------- yamada xxx1 yamada yyy4 tanaka zzzz9 tanaka abcde sato zzzz9 ----------------------

  • Excel Accessにてこんなことできますか??

    以前にも似たようなことをお聞きしましたが、別対応しないといけなくなりました。宜しくお願いします。 <前提> ・Excelの1セル(Acessも同様)に、複数のEメールアドレスがある。 ・複数のEメールアドレスの場合、カンマにて区切られている。但し、そのEメールアドレスはアドレス帳に登録した情報のため、名前にカンマ登録していたら、名前にもカンマが入っている。 (例) 山田隆<takashi.yamada@xxxx.xxxx>,koike,taka<taka_koike@xxxx.xx.xx>,~(以下後続アドレス) <行いたいこと> 最終的には、@以降のドメインのみを取得する。 <悩んでいること> アドレスが1つなら区切り文字を@にして分解すれば、決まった列に@以降の文字列がセットされるが、複数あると、@以降の文字列のセットがバラバラになってしまいます。 そこで、まず、複数のアドレスがあった場合、1セルに1アドレスになるよう何かしら関数などを使って行いたいのですが(私はカンマが1アドレスの区切りとなるので、まず、カンマにて分解しようとしたのですが、上記のように名前にもカンマがある場合があり、一定の法則がないため断念した)、良い方法ありますか。※何千件もあるのでハンド対応は厳しい そもそも、1セルに1アドレスに設定する必要性がない方法などありましたら、教えてください。 ・条件 excel,access ともに2002 or 3? 宜しくお願いします。

  • VBAで正規表現を使った置き換え

    ”KFEGYKLNI"のような長い文字列の文字の間に".*"を入れて"K.*F.*E.*G.*Y.*K.*L.*N.*I”のような検索パターンを作りたいのですが".*"を簡単に入れる方法を教えてください。 excel2003を使っています。 Set re = CreateObject("VBScript.RegExp") re.replace("s//\.\*/g","KFEGYKLNI") としてみましたがうまくいきません。 またhelpをどのような語句で検索したよいのでしょうか

  • 日本人名の英語表記

    日本人名を英語表記する場合、 普通は、Hanako Yamada と名が先で姓が後となると思うのですが、 姓を先にする場合、Yamada,Hanako と姓と名の間にコンマを打つのが正解でしょうか? また、yamada,HANAKO とか、YAMADA,hanako Yamada,Hanako等、大文字、小文字の区別でルールがあるのでしょうか? お教えいただけないでしょうか。 何卒宜しくお願いいたいます。

  • このような時どう検索すれば良いのでしょうか

    いつもお世話になっています。 テキスト検索ソフトなどで文書を検索する際に、例えば下記のような文字列で人名部分だけ検索結果に表示したい(&出力してリスト化したい)のです。 ------------------------------------------ abc.. [NAME]=suzuki abcdef.. def.. [NAME]=tanaka defghi.. ghi.. [NAME]=yamamoto ghijkl.. ------------------------------------------ 1)人名部分の直前には"[NAME]="のように特定できる文字列があるので検索にはうってつけですが"[NAME]="自体は検索結果には含めたくない。 2)人名部分の直後には半角スペースが入りそれ以降文字列が続きますが、半角スペース以降は検索結果に含めたくない。 正規表現などの使用で可能にする方法があれば、またそういう検索&検索結果のテキスト出力が可能なフリーソフトなどありましたらお教えください。 どうかよろしくお願いします。

  • DOS:テキスト内の特定行の次行に文字列を追加

    DOSコマンドプログラムでテキストファイル内の特定文字列を含む行の次の行に、指定した文字列を含む行を挿入する方法 Windows7の DOSコマンドプログラムで、下記の"input1.txt" を"output1.txt"に変換したいと思っています。 "input1.txt"内で"Name:"を含む文字列があれば、その行の次の行に、"A1:10.2"という行を挿入するDOSコマンドプログラムをご教授いただけないでしょうか。見つけた文字列行の次の行に挿入する方法というのが、できなくて困っています。 ---input1.txt------ Name: Tanaka B1: H2 C1: 2 Comment: ABC# 61, Seq# M34 Num H: 3 12 37.97 13 105.90 14 203.82 Name: Suzuki B1: H2 C1: 2 Comment: ABC# 58, Seq# M39 Num H: 2 11 37.97 12 105.90 Name: Yamada B1: H2 C1: 2 Comment: ABC# 93, Seq# M397 Num H: 4 2 2.00 12 4.00 13 9.99 14 29.97 --------------- ---output1.txt----- Name: Tanaka A1:10.2 B1: H2 C1: 2 Comment: ABC# 61, Seq# M34 Num H: 3 12 37.97 13 105.90 14 203.82 Name: Suzuki A1:10.2 B1: H2 C1: 2 Comment: ABC# 58, Seq# M39 Num H: 2 11 37.97 12 105.90 Name: Yamada A1:10.2 B1: H2 C1: 2 Comment: ABC# 93, Seq# M397 Num H: 4 2 2.00 12 4.00 13 9.99 14 29.97 -----------------

  • csvファイルからの読み込みがスムーズにできません

    fscanfでCSVファイルから文字列を取り込み、カンマ区切りで4つの変数に文字列を代入しようと考えているのですが、出力されたcsvファイルが変わった区切りかたをしているのでうまく変数に代入できずに困っております。 例えば、出力されたcsvファイルは以下のようになっております "ABC CO.,I","4540",""STAR"","2010/03/31" 希望としては aにABC CO.,I bに4540 cにSTAR dに2010/03/31 をそれぞれ代入したいのですが aに入る文字列にはCO.,Iというようにカンマが既にありますので カンマ区切りで読み込むとめちゃくちゃになってしまいます ですので基準をダブルクオーテーションに置き、"と"の間の文字列を代入というような形が取れれば良いのですが、このような方法での文字列取得は可能でしょうか? c言語の勉強を始めて間もない為、低レベルな質問、表現であることをお許し下さい。 よろしくお願いします。

  • 場合の数について質問させてください。

    場合の数について質問させてください。 以下のような文字列は全部で何種類あるか? (質問その1)================ 条件 ================ ★「a,b,c,d,e......,z」(小文字のアルファベット。全部で26個) 「0以上9以下の整数」(全部で10個) 「.」(ピリオド)(1個) の、計37個の文字(以下、「文字」と呼ぶとき、0から9とか記号も含むこととします)から、n個の文字を選び、文字列を形成する ★文字列中に同じ文字が複数回登場しても構わない。 ★文字列の最初に記号(この場合はピリオド)をおいてはいけない ★文字列の最後にも記号(この場合はピリオド)をおいてはいけない ★文字列の中で、記号(この場合はピリオド)が連続してはいけない ★文字列を形成する文字が、「すべて数字」であってはいけない  (つまり、n個の文字のうち、1個以上、「小文字アルファベットまたはピリオド」が含まれなければいけない)  (ちなみに、「073754555555」みたく、一番左が0でも【「すべて数字」】ならだめです) ================ なお、これらを満たす文字列すべてを要素とする集合をX_1と呼ぶことにします。 また、X_1に属する要素の総数を、f(X_1,n)とよぶことにします。 (後述の、別の集合についてもおなじく) で・・・。 ★k=1,2,3,4,5,6のそれぞれの場合について、f(X_1,k)はいくつ? あと、できれば、 ★一般項(?)、つまり、f(X_1,n)も知りたいです。 (質問その2)================ (質問その1)の条件の、一番上を変更し、 「A,B,C,D,E,F....Z」(大文字のアルファベット。全部で26個) も使っていいこととします。(つかわなくてもOK) で、そうすると、計63個の文字から、n個の文字を選び、文字列を形成することになります。 このとき(他の条件は全部同じ)、 これらを満たす文字列すべてを要素とする集合をX_2と呼ぶことにします。 で・・・。 ★k=1,2,3,4,5,6のそれぞれの場合について、f(X_2,k)はいくつ? あと、できれば、 ★一般項(?)、つまり、f(X_2,n)も知りたいです。 (質問その3)================ 質問その1の「.」(ピリオド)を、「-」(ハイフン)に変更します。 他の条件は全て同じとします。 で、全部の条件を満たす文字列すべてを要素とする集合をYと呼ぶことにします。 で・・・、 f(Y,n)=f(X_1,n)であることはわかります。 でもって・・・ ★k=1,2,3,4,5,6のそれぞれの場合について、f( (X_1∪Y) ,k)はいくつでしょうか? あと、できれば、 ★一般項(?)、つまり、f( (X_1∪Y) ,n)も知りたいです。 === 同じように、 ★k=1,2,3,4,5,6のそれぞれの場合について、f( (X_2∪Y) ,k)はいくつでしょうか? あと、できれば、 ★一般項(?)、つまり、f( (X_2∪Y) ,n)も知りたいです。 =================== 以下、参考までに(関係ないのも含まれてるかもしれませんが) ●「p=10,26,11,27とか・・・、k=1,a2,3,4,5,6」について、 p^k、p_C_k の値を計算しておきました。 ↓ http://spreadsheets.google.com/pub?key=0AqIQfyJXnDwXdHBNcFZMNXVpS29Dcm10OWFjU3hqSGc&hl=en&output=html また、素因数分解すると・・・ ●10=2*5 ●11は素数(=1+10) ●22=2*11(=(1+10)*2) ●26=2*13 ●27=3^3(=1+26) ●36=(2^2) * (3^2)(=10+26) ●37は素数(=1+10+26) ●52=(2^2) * 13(=26*2) ●63=(3^2) * 7(=1+10+26*2) ●100=(2^2)*(5^2)(={1+10+26}+{1+10+26*2}=37+63) =================== よろしくお願いいたします。

  • 2005年10月~2006年3月までを、パソコンで英語表記すると…

    期間を記載する正式な文章を作成せねばならないのですが、ワープロで打つ場合の正式な形式をどのような形でしょうか。 一文字一文字指定しなくてはならず、半角やスペースなど、細かい点で迷っております。 ●年と月、どちらを先に記載するか? ●年と月の間は/(スラッシュ)なのか.(ピリオド)なのか・(カンマ)なのか? ●3月は「3」なのか「03」なのか「March」なのか? ●「から~まで」という表現はどうしたらよいのか? などが、わかりません。 例として、 ●2005/10~2006/03 ●2005.10~2006.3 ●10・2005 - 3・2006 ●Since October.2005 till March.2006 ???など、どのような形が正式でしょうか。 宜しくお願い致します。

  • どのようにソートすればいいのか教えて下さい

    AとBとCにそれぞれ数値を与えておいて、その数値の大きい順にABCを並べ替えるようにしたいのです。一応、下のようにアルファベットと数値の間にはカンマを入れて分けています。 A, 5-------→B, 9 B, 9-------→C, 7 C, 7-------→A, 5 このように並べ替えたいのですが、うまくいきません。ArrayListを使用しCollectionsクラスのsortメソッドを使ってやれば先頭の文字によるソートはできるのですが、カンマ後の数値での並べ替えの方法がよくわかりません。 いい法方がありましたらおしえてください。

    • ベストアンサー
    • Java
筆まめ自動継続版について
このQ&Aのポイント
  • 筆まめ自動継続版は5台まで使用可能か?自動アップデートは個別に行われるか?
  • 筆まめ自動継続版のライセンス利用台数と自動アップデートについての疑問
  • ソースネクスト株式会社の筆まめ自動継続版についてのお問い合わせ
回答を見る

専門家に質問してみよう