• 締切済み

エクセル 大文字を小文字に変換

お世話になります。 エクセル2007を使用しています。 セルの同列内に氏名が全て大文字表記で羅列されています。 氏名に含まれる一部の「ヤ」、「ユ」、「ヨ」のみ 大文字から小文字に⇒の後のように変換したいと思います。 A1セル タナカ アキラ A2セル ヤマダ シユン⇒ヤマダ シュン A3セル コダマ ユウジ A4セル キシダ ヨウスケ A5セル ヨシダ トシユキ    ・  ・   ・ 関数で=SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(A1,"ヤ","ャ"),"ユ","ュ"),"ヨ","ョ")を 使用(オートフィル)すると、A2は思惑通り変換されますが、A3はコダマ ユウジ⇒コダマ ュウジ、 A4はキシダ ョウスケ、A5はョシダ トシュキとなり問題が生じます。 置換の場合も同様となります。 「ヤ」、「ユ」、「ヨ」のみ名前の読みがおかしくならないよう小文字に 変換を行えればと思うのですが、何か方法はありますでしょうか。 よろしくお願い致します。

みんなの回答

  • MackyNo1
  • ベストアンサー率53% (1521/2850)
回答No.8

>おっしゃる通り受注ソフトの拗音を口座名義に合わせる事によりデータ上での照合は取れるのですが、 照合したデータを再び受注ソフトにインポートして結果を取り込む為にはシステム上、 氏名(金額を除く氏名以外のその他の一部項目含む)が完全一致している必要があります。 その為、最初に受注ソフトよりエクスポートしたデータの拗音を含めた氏名に口座名義を合わせる必要がありました。 Excelの機能の利用の仕方で苦労されているように思われますが、基本的に照合したデータを受注ソフトに取り込むときに、照合した結果(変換前の対応する拗音入りのデータ列)を利用すれば、簡単に取り込み用データを作成できると思います。 >氏名(金額を除く氏名以外のその他の一部項目含む)が完全一致している必要があります。 2つのデータベースの違いを簡単に抽出するには、フィルタオプションの設定(1つのデータベースを検索条件範囲にする)の機能を利用すれば、簡単に一致データ(=不一致データ)を検索・抽出することができます。

  • bunjii
  • ベストアンサー率43% (3589/8248)
回答No.7

>おっしゃる通り受注ソフトの拗音を口座名義に合わせる事によりデータ上での照合は取れるのですが、照合したデータを再び受注ソフトにインポートして結果を取り込む為にはシステム上、氏名(金額を除く氏名以外のその他の一部項目含む)が完全一致している必要があります。 入金チェックの考え方を柔軟にしないと目的を達成できません。 受注データテーブルの氏名(拗音込み)と銀行口座名相当の氏名(拗音変換後)を併記して、振込通知のデータを直接照合すれば逆変換は必要ないと思われます。 銀行口座名で同姓同名があるときは自動的に判定できませんので、人力による判定にすべきです。 振込金額と売上金額には振込手数料の負担等の要件で不一致が付き物です。 他に受注日と振込日の整合性等もチェックに使える要素です。(受注日より前に振り込まれることは有り得ない) 間違いを起こさないシステムを構築するには専門のプログラマーに有償で依頼すべきです。 チェックミスによる信用失墜や未収金の損失で事業の運営が困難になることを考えればプログラマーへ支払う費用を捻出できるのではないでしょうか?

  • MackyNo1
  • ベストアンサー率53% (1521/2850)
回答No.6

>受注ソフトからエクスポートしたデータはお客様名が拗音を含んだ正しいお名前となりますが、 入金データは銀行の口座名義が拗音を使わない為、照合の際に「シュン」と「シュン」等が一致せず躓いておりました。 基本的に名前に拗音が含まれているかどうか文字列だけでは判定できないので、このような目的なら、置換操作またはSUBSTITUTE関数を使用して、単純に拗音を普通文字に変換して統一することをお勧めします。 このような統一をしておけば、COUNTIF関数などで簡単にデータの照合ができます。

zinback
質問者

お礼

ご回答ありがとうございます。 NO.5様の回答にもご返答させて頂きましたが、システム上の 仕様により普通文字に統一という事が今回はできかねました。 また、ご指摘頂きましたCOUNTIF関数での照合については見当がついておりましたので、 その方法で最終的にデータの照合を行おうと考えております。 また不明な点が出た際は再度ご質問させて頂く可能性もございますので、その際は何卒よろしくお願い致します。

  • bunjii
  • ベストアンサー率43% (3589/8248)
回答No.5

>受注ソフトからエクスポートしたデータはお客様名が拗音を含んだ正しいお名前となりますが、入金データは銀行の口座名義が拗音を使わない為、照合の際に「シュン」と「シュン」等が一致せず躓いておりました。 考え方を逆転させてください。 受注ソフトの拗音を銀行口座に合わせる方法にすれば変換テーブルを使わなくてもSUBSTITUTE関数で簡単に変換できます。 同姓同名の場合でも結果は同じことになるので複数がマッチしたときは別の要素(金額等)で判定すれば良いでしょう。

zinback
質問者

お礼

度々ご回答ありがとうございます。 おっしゃる通り受注ソフトの拗音を口座名義に合わせる事によりデータ上での照合は取れるのですが、 照合したデータを再び受注ソフトにインポートして結果を取り込む為にはシステム上、 氏名(金額を除く氏名以外のその他の一部項目含む)が完全一致している必要があります。 その為、最初に受注ソフトよりエクスポートしたデータの拗音を含めた氏名に口座名義を合わせる必要がありました。 現在本件について試行錯誤しながら作業を行っておりますが、色々とその他課題がありまして 完了までもう少し時間がかかりますので、作業完了後にベストアンサーを決めさせて頂きたいと思います。 再度ご質問させて頂く可能性もございますので、その際は何卒よろしくお願い致します。

回答No.4

こんばんは。 今、ちょっと見てみたら、本格的な正規表現置換なのですね。しかし、専門ツールを使うのは、ちょっと一般の人には荷が重いような気がします。 私は、とても数式は敵わないので、VBAでやってみましたが、 例えば、イトウ チユリ(伊藤千由李) さんの名前は、ユが拗音化しませんが、 ウエノ ジユリ(上野樹里) さんは、ユが拗音化しますから、ここらは、規則性を見出すのが難しいですね。 だから、特別 JOYのジヨイさんのヨや、ジユリさんのユは、拗音化するようにしました。 アリヤス(有安)のヤは変化しません。 '// '実行プログラム Sub Test01() Dim c As Range  For Each c In Range("A1", Cells(Rows.Count, "A").End(xlUp))  If c.Value Like "[ァ-ヶ]*" Then   c.Offset(, 1).Value = WordSmaller(c.Value)  End If  Next c End Sub '拗音化 ユーザー定義関数 Function WordSmaller(wd As Variant, Optional bln As Boolean = False)  '引数 wd は文字, bln は、True or False 全ての引数の文字を出すか、変更のある分だけ出すか(False)  Dim Matches As Object  Dim Match As Object  Dim buf As String  Dim buf2 As String  Dim a As String, b As String  Dim i As Long, cnt As Integer  If Len(wd) > 0 Then   buf = wd  Else   Exit Function  End If  With CreateObject("VBscript.RegExp")   .Global = True   .Ignorecase = False   '拗音の規則性   .Pattern = "[キシチヒリミ]([ヤユヨ])[ウン].*|ジ([ヤユヨ])."   '人名にギジヂビの濁音が含まれるは分からない   Set Matches = .Execute(buf)   If Matches.Count > 0 Then    For Each Match In Matches     For cnt = 0 To Match.SubMatches.Count - 1      a = Match.SubMatches(cnt)      If a <> "" Then       i = Asc(a): b = Chr(i - 1)       buf2 = Replace(Match.Value, a, b, , 1)       buf = Replace(buf, Match.Value, buf2, , 1)      End If     Next cnt    Next    WordSmaller = buf   Else    If bln Then '標準     WordSmaller = buf    Else     WordSmaller = ""    End If   End If  End With End Function '//

zinback
質問者

補足

ご回答ありがとうございます。 記載のVBAを実行したところ、意図しておりました正規表現置換ができました。 関数では出来ないと思い半ば諦めていたので感激しております。 ありがとうございました。 追加での質問となり恐縮ですが、もし可能でしたらご回答頂けますと幸いです。 '// '実行プログラム Sub Test01() Dim c As Range  For Each c In Range("A1", Cells(Rows.Count, "A").End(xlUp))  If c.Value Like "[ァ-ヶ]*" Then   c.Offset(, 1).Value = WordSmaller(c.Value)  End If 上記の For Each c In Range("A1", Cells(Rows.Count, "A").End(xlUp))は 当初の質問では便宜上A列にて記載しておりましたが、実際はF列を参照する為、"F1"と"F"に変更しました。 VBAを実行しますとG列に正規表現置換された値のみが表示され、 拗音に変更する必要のない値はG列では空白セルとなっていますが、 F列の「ヤ」、「ユ」、「ヨ」を拗音に変更する必要のない値もそのままG列に表示することは可能でしょうか? つまりG列には拗音に変更された値と、変更する必要のない値両方が表示されるという状態です。 また、その上で置換されたF列を列ごとコピーして、C列にデータをそのまま貼り付け、 その後にE・F・G列を列ごと削除するというVBAを実行したいと考えています。 ※D列には他の必要な値が入っておりますので、C列への貼り付けで間違いございません。

  • MackyNo1
  • ベストアンサー率53% (1521/2850)
回答No.3

基本的にExcelを使用されているなら以下のようにPHONETIC関数でふりがなを表示すれば、入力通りのふりがなで表示できます(A1セルに漢字の名前が入力されている場合)。 =PHONETIC(A1) 他のアプリケーションから、コピーあるいはエクスポートしたデータでふりがな情報がないなら、以下の操作でふりがな情報を追加することができます。 漢字の名前範囲を選択してから、Alt+F11キーでVBEを起動し、Ctrl+Gキーでイミディエイトウィンドウを表示して、そこに以下のコマンドを入力してEnterしてください。 selection.setphonetic ただし上記のマクロコードで表示されるふりがなは、必ずしも正確なふりがなではない可能性がありますので、PHONETIC関数で表示したデータと元のデータが同じでないセルを「=PHONETIC関数のセル=元のセル」のような数式を入力し、FALSEが返る行のみフィルタで抽出して(拗音に変更されたセルや誤まったふりがなが付いたセルを)最終チェックされるとよいと思います。

zinback
質問者

お礼

ご回答ありがとうございます。 データ上の氏名はカタカナ表記のみとなっており漢字表記はございません為、 今回お教え頂いた方法は使用できませんでしたが、後学の為に実践させて頂きました。 NO.2様のお礼にも記載させて頂きましたが、質問の意図が伝わりづらく申し訳ございませんでした。 またいずれ機会がございましたらよろしくお願い致します。

  • bunjii
  • ベストアンサー率43% (3589/8248)
回答No.2

回答No.1の追加です。 A5の"ヨシダ トシユキ"を"ヨシダ トシュキ"ではなく"ヨシダ トシユキ"とする場合は変換テーブルを用意してVLOOKUP関数で変換する必要があるでしょう。 D列とE列に変換テーブルを作成したときに次の数式を使うと目的に合った変換ができます。 当然ですが、データが多くなれば変換テーブルを作成するための労力が増えます。 B1=IF(A1<>"",IFERROR(VLOOKUP(LEFT(A1,FIND(" ",A1)-1),D:E,2,FALSE)&" ",LEFT(A1,FIND(" ",A1)))&IFERROR(VLOOKUP(MID(A1,FIND(" ",A1)+1,LEN(A1)),D:E,2,FALSE),MID(A1,FIND(" ",A1)+1,LEN(A1))),"") B1セルを下へコピーします。

zinback
質問者

お礼

ご回答ありがとうございます。 NO.1の回答の後、NO.2の追加までに1時間弱お時間がありましたので、 私の質問にその後も試行錯誤して頂いていたのだなと大変嬉しく思い感謝しております。 説明不足で申し訳ございません。ご推察の通り銀行の口座名で拗音を使わないことに関係しております。 仕事上、お客様からの入金確認をする際に、現在はインターネットバンキングからデータをCSVでDLし、 CSVを印刷した紙ベースの入金一覧(口座名義と入金額が記載)と注文情報を取り込んでいる受注ソフト上で 目視で照合していますが、受注ソフトからエクスポートした入金一覧のCSVとインターネットバンキングからDLした 入金データのCSVを使用し、関数やVBAでマクロを実行し入金確認の作業が簡易化できないかと考えての質問でした。 受注ソフトからエクスポートしたデータはお客様名が拗音を含んだ正しいお名前となりますが、 入金データは銀行の口座名義が拗音を使わない為、照合の際に「シュン」と「シュン」等が一致せず躓いておりました。 NO.2の回答となりますと、お客様のご名義は千差万別となります事から おっしゃる通り変換テーブルを作成する労力がかなり必要となるため見送らせて頂きました。 当初の質問時に詳細をお伝えさせて頂いた方が良いかとも考えましたが、 意図が分かりづらくなるかと思った為、簡易的に質問させて頂きました。 結果として説明不足となり申し訳ございませんでした。

  • bunjii
  • ベストアンサー率43% (3589/8248)
回答No.1

>氏名に含まれる一部の「ヤ」、「ユ」、「ヨ」のみ大文字から小文字に⇒の後のように変換したいと思います。 「小文字」ではなく「拗音」と言った方が良いと思います。 ヤ、ユ、ヨ以外にも拗音がありますので事例を精査する必要があるでしょう。 銀行の口座名で拗音を使わない習慣があるようですが関係しているのでしょうか? 拗音を普通文字に変換する場合は単独の文字を置き換えるだけで良いのですが逆の場合は文字列のパターンが多いので難しいと思います。 姓と名前の文字列パターンを比較するためのテーブルを作成して対比する方法にしないと誤変換になります。 カナ文字の氏名を姓と名前に分割して其々の先頭文字以外を全て変換すると言う手法で良ければ数式で対応できるでしょう。 A列に提示されたように氏名があるとき姓と名前の間に全角の空白文字があると仮定すれば次の式をB1へ設定して下へ必要数コピーすれば質問の範囲の処理が出来るでしょう。 B1=LEFT(A1,1)&SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(MID(A1,2,FIND(" ",A1)-1),"ヤ","ャ"),"ユ","ュ"),"ヨ","ョ")&LEFT(SUBSTITUTE(A1,LEFT(A1,FIND(" ",A1)),""),1)&SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(MID(SUBSTITUTE(A1,LEFT(A1,FIND(" ",A1)),""),2,LEN(SUBSTITUTE(A1,LEFT(A1,FIND(" ",A1)),""))),"ヤ","ャ"),"ユ","ュ"),"ヨ","ョ")

関連するQ&A

  • エクセルで連続文字を文字に変換したい。

    エクセルで連続文字を文字に変換したい。 例:A1のセルに連続数字を打つと下のように変換できる関数を教えてください。    010→A先生 020→B先生 030→C先生・・・・・・    (全部で40人の先生を変換したいです)

  • Excel で 文字→数字変換

    エクセルで文字→数字変換を行いたいのですが、 どのようにすればよいでしょうか? (やりたい例) あるセルの特定文字列位置の文字を数字に変換したい。 文字列先頭から4番目の文字を元に数値に変換する。 Aだと1と変換、Bだと2と変換、Cだと3と変換… A1:xxxBxxxx B1:2 うまく質問が表現できなくてすいません。 実現方法はVBAでも結構です(使ったことはありませんが)。

  • 文字置換え、Xならxへ、Yならyへ

    お世話になります。 A1の文字の中に「X」か「Y」があったら、それぞれ「x」「y」へ置き換えたい。 ※例えばA1の会社名に(株)か(有)があり、それを(カ)か(ユ)に変える。 =SUBSTITUTE(A1,"X","x") =SUBSTITUTE(A1,"Y","y") 上記の関数で一つづつはできますが、これをどうつなげればいいのか分かりません。 教えて下さい。よろしくお願いします。

  • Excel 文字を抜き出す関数を教えてください

    ある一つのセル(例えばA1)に 「住所 ○○県・・・ 氏名 ××太郎 電話番号」 などの文字がずらっと入っておりそこから必要情報だけを抜き出して別な セルに貼り付けしなければいけません。 (この作業をしなくてはいけないセルがたくさんあります。) 具体的には「住所だけ」「氏名だけ」などの文字だけ一つ一つ抜き出さなくては いけないので、できるだけ関数を使用して作業を行いたいと思っています。 例えば、A1のセルから住所だけをB1セルに抜き出す場合、どのような 関数をいれれば良いのでしょうか。 「”住所 "の後から” 氏名”の前までの文字を抜き出す」 というような関数が作れれば、他の電話番号などにも応用できると思うのですが・・ ちなみに、それぞれの単語(?)の間は半角スペースが入っています。 (住所と○○県の間や、その次の氏名との間など) お手数おかけしますが、ご存知の方がいらっしゃいましたらご教授いただけますと 大変助かります。 よろしくお願いいたします。

  • 文字列変換

    添付図をご覧ください。 範囲 A1:B6 に英語の人名が入力されています、。 セル A7 に式 =SUBSTITUTE(A1," ","") を入力して、此れを右および下方にオートフィルしたものを範囲 A7:B12 に示しています。 此処で質問ですが、最初に下表に示すスペースなしの文字列データがあった場合、此れを上表に示すデータに変換する数式を教えてください。 マクロ音痴の私のために、どうか数式でお願いします。 数式が短くなるなら、配列数式でも構いませんが、補助列(行)等を使用しないことを希望いたします。

  • エクセルの文字列を数式に変換する方法

    エクセルに「=A1+A2」という文字列を値コピーでペーストしたのですが、この文字列を簡単に数式に変換する方法はないでしょうか?                              文字列のはいったセルをダブルクリックすれば、文字列が数式にかわって、A1+A2を計算しれくれるのですが、ひとつひとつのセルをダブルクリックするのが大変で・・・。 よろしくお願いいたします。

  • ユ-ザ-定義のセル内容を文字列に変換できますか?

    セルの書式設定で ユ-ザ-定義を"yyyy/m/d h:mm:ss" としてあるセルが有ります。 セルの値はユ-ザ-定義通り"2007/3/20 8:00:00"と表示されています。 この表示を文字列に変換し 関数 CONCATENATEで他の文字列 と結合したいのですがどの様にマクロを組めば良いのでしょうか やりたい作業は 元の値 セルの書式が日付で "1997/3/4 13:30" セルの値は"2007/3/20 8:00"ですが、内容は秒まで入っています これを、秒まで表示させたいのでユ-ザ-定義を変え"2007/3/20 8:00:00"と表示させます 次に、文字"<= もしくは>="と結合させフィルタ-オプションの参照値としたいのですが セルの内容が指数として表示されてしまいうまく結合できません  マクロの初心者ですが、ご指導宜しくお願い致します  

  • エクセルでの変換について

    エクセルのデータで、氏名住所電話番号などが、同じセルに一緒に入っているデータを整理された表に直したいのです。 電話番号を抜き出すために、「0***-」のデータを「,0***-」に変換するには、(編集)→(置換)のところで置換前、置換後を何と入力すればよいですか? 0533-とか052-とか0491-などの文字の前に「,」を挿入して、その後(データ)→(区切り位置)でセルを区切っていくためです。

  • エクセルで文字を数値に変換したい!

    現在、1セルに1文字(あ~ん)が入っている表があるのですが、この文字たちを数字に変換したいのですが、どんな関数を使えばいいのでしょうか?   A B  C D E  1 エ ン ブ レ ム  → 4 5 3 4 3 2 リ フ ト       → 2 3 5 といった具合にあ行 1 い行 2 ウ行 3 エ行 4 お行 5 なのです。 ただし、「ん」だけ前に文字の次の行、前の文字がオ行の場合、1に戻るなのですが。 よろしくお願いします。

  • Excel でASCII文字列を16進コードへ変換

    Excel でA1セルに、 A1セル:”1234” という半角英字の文字列が入力されています。 これをすべてASCIIコードへ変換したいのですが、 何か方法はありますでしょうか? 結果は、 A2セル:”49505152” となることを想定しています。 私なりに調べたのですが、 =CODE(MID(A1,1,1)) & CODE(MID(A1,2,1)) & CODE(MID(A1,3,1)) & CODE(MID(A1,4,1)) なら、期待した結果になっておりましたが、 文字数が多い場合にかなり不効率でした。 他の方法をご教授ください。

専門家に質問してみよう