• ベストアンサー

エクセル 半角カナを全角に、半角英数はそのままに

エクセル2010で、データの表記を半角カナだけを全角にし、半角英数はそのままにしたいのですが、下記の方法No.2では上限にかかり使用が出来ませんでした。 http://okwave.jp/qa/q5985323.html どなたか良い関数を教えてください。

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

  • ベストアンサー
  • cj_mover
  • ベストアンサー率76% (292/381)
回答No.9

No.4, 5、cjです。 No.5補足欄へのレスです。 ◆ > 対象シートをひらいた状態で記述をVBにもいれたのですが、 手順が正しければ、 ユーザー定義関数を書き込む標準モジュールを表示した際に Visual Basic Editor ウィンドウの最上部に Microsoft Visual Basic for Applications - ブック名 - [Module1 (コード)] のように表示されます。 ここでブック名と、それに続くモジュール名がModule1、Module2などになっていれば、 正しく設定できることが確認できます。 ◆ > すぐ横のシートに =KanaJis(A1) で試した所 #NAME?と表示されました。 こちらは、Excelのセルに、通常のExcel関数と同じように数式を入力し確定する ということですが、 ユーザー定義関数をVBA側で設定した"後"に、Excelのセルに数式を入力し確定する、 という順番になります。 もしも手順を前後してしまった場合は、、 数式を入力したセルに#NAME?と表示されますので、 セルを再度選択して、F2キーで編集状態にし、そのままEnterキー、 という手順で、正しく数式の結果が表示されるようになります。 ◆ > あと、VBの記述は保存の必要はありませんでしょうか? 仮に、 ユーザー定義関数を設定しても、保存しないと機能しないのか? という疑問でしたらば、未保存の状態でも手順が正しければ機能します。 また、 次にブックを開いた時にも機能させる、という意味でしたらば、 通常のブックを保存するのと同じように、保存しなければ消えてしまいます。 既存のブック(*.xlsx)にユーザー定義関数を設定した場合は、 そのまま上書き保存を実行します。 そうすると、次のようなメッセージが表示されます。 | 次の機能はマクロなしのブックに保存できません | ・VB プロジェクト | これらの機能が含まれるファイルを保存する場合は、[いいえ]をクリックし、[ファイルの種類]ボックスでマクロ有効ファイルの種類を選択してください。 | マクロなしのブックとして保存する場合は、[はい]をクリックしてください。 |    [はい] [いいえ] [ヘルプ] ユーザー定義関数を次からも使えるようにする為には、 既存のブックを新たにマクロ有効ブックとして保存し直す必要があります。 手順としては、上記のメッセージダイアログで[いいえ]をクリックし、  [名前を付けて保存]ダイアログが表示されますから、  [ファイルの種類]ボックスのリストの中から  [Excel マクロ有効ブック(*.xlsm)]  を選択して[保存]をクリックします。 この場合注意が必要なのは、 既存のブック(*.xlsx)、とは別物のファイルとして、 名前が同じで拡張子が違うマクロ有効ブック(*.xlsm)を 新たに作成し、以後、マクロ有効ブック(*.xlsm)を使うようにする ということです。 .xlsxと.xlsmの違い、ということですと、 .xlsmに移行してもExcelブックとしての機能に不足が出ることは一切ありません。 喩えるなら「大は小を兼ねる」的に「.xlsmは.xlsxを兼ねる」ようなものです。 実際、私の場合は、マクロやユーザー定義関数を使わないブックも 常に.xlsmで保存しています。 (そうしておいた方が、将来的にVBAを導入する必要が生じた時に移行が簡単だからです) ファイルのサイズとしてはVBAプロジェクトの分だけ大きくなりますが、 今回の場合なら、せいぜい7~8KB程度の違いです。 ただし、既存のブック(*.xlsx)に対して 各エクスプローラーで設定したショートカットや各種リンクなどある場合は 新たな.xlsmブックを運用するに当たり書き換えるなどの手当てが必要になる場合もあるでしょう。 ハッキリさせておきますが、 マクロ有効ブック(*.xlsm)は、既存のブック(*.xlsx)の代わりに使うようになるものですから、 既存のブック(*.xlsx)は使わなくなる、ということです。 ◆◆ と、ここまで通して、 ひとつのブック単位でユーザー定義関数を設定する方法だけを説明してきましたが、 「既存のブックを破棄して新しいブックに移行するのは困る」とか、 [複数のブックでユーザー定義関数を適用したい]というような要望に応えるように Excelにはアドインファイルというものが用意されています。 (Excelとしては極々一般的なシステムなのですが職場によっては、  セキュリティ管理の面から利用を規制している場合も稀にあるようなので、  念の為システム管理者に相談した方が好いケースもあるでしょう。) アドインファイルに登録したユーザー定義関数は すべてのExcelブックについて アドインをオプションとして適用させることで利用が可能になります。 この場合はマクロ有効ブックである必要はありませんので 既存のブック(*.xlsx)についても、継続的な利用が可能です。 (既述の)個別のブックにユーザー定義関数を登録する方法の代わりに アドインファイルに登録する手順を示します。 (既述の方法との重複は避けてください。どちらかひとつの方法を選ぶという意味。) ======================================== 【新規のアドインブックにユーザー定義関数を登録】 1■ ふつーに、新規のExcelブックを開いてから、そのまま、   Alt キーを押下げながら F11 キー   →Visual Basic Editor を起動します。 2■ Visual Basic Editor のメニューバー   [挿入(_I)]を選択→[標準モジュール(_M)]を選択   →コード記載用の新しいシート[標準モジュール]が開きます 3■ [標準モジュール]に   提示したユーザー定義関数について   ==ここから==と書かれた行から、==ここまで==と書かれた行まで、   まるごとコピーしたものを、そのまま貼り付けます。 4■ Visual Basic Editor を閉じるボタンで閉じ、Excel画面に戻る。 5■ [名前を付けて保存]をクリックし、   [ファイルの種類]ボックスのリストの中から   [Excel アドイン(*.xlam)]を選択して   任意の●アドイン名●を拡張子.xlamの前に記入し   [保存]をクリックします。  以上でユーザー定義関数を登録した新規のアドインブックの作成完了です。 ======================================== 【アドインを適用しユーザー定義関数をすべてのブックで使用可能にする】 1■ Excelのリボンの表示中のタブ上を右クリック   表示されたメニューの[リボンのユーザー設定(_R)]を選択して   表示された[リボンのユーザー設定]ダイアログの   右側大きい方のリストボックス[メインタブ]の中から   [開発]にチェックを入れて[OK]   →リボンに[開発]タブが追加されます。 2■ リボンの[開発]タブから[アドイン]をクリック   表示された[有効なアドイン]リストの中から   上記手順5■で保存した●アドイン名●にチェックを入れて[OK]  以上でアドインの適用が完了し、ユーザー定義関数はすべてのブックで使用できるようになります。 ======================================== アドインというと馴染みのない人もいるでしょうけれど、 Excelの一般機能を補うような形でデフォルトの状態で適用されたアドインもあるほど 実は一般的なものです。 今回のケースもそうですが、単純に「使える関数を増やすもの」と考えてください。 デメリットはありません。 運用が簡単、という意味ではアドイン登録する方が遥かに優ります。 なので、試し終って導入を決めたらば、今回説明した手順でアドイン登録してください。 ◆◆ ちなみに、 他の方の回答への補足欄をみて気になったことですが、 > どなたか良い関数を教えてください。 ということだったので、No.4, 5では関数を紹介したのですが、 この関数の戻り値を、定数として取得したならば 関数を設定したセルをコピーしてそのまま[値の貼付け]をすれば済むことです。 或いは、 選択中のセル範囲を、関数で処理した文字列値へと直接置換したいという場合は、 KanaJis()関数を使ったマクロで対応します。 ' ' ========この行から======== Sub 半角カナを全角にそれ以外はそのまま()   Dim r As Range   For Each r In Selection     r.Value = KanaJis(r.Value)   Next r End Sub ' ' ========この行まで======== No.4で説明した手順で、ユーザー定義関数の代わりに、上記マクロを標準モジュールに登録します。、 Alt+F8でマクロのリストを表示して[マクロ名]を選択して[実行]します。 ◆◆◆ 長くなってしまいました。 ますます、大変そうに見えるかも知れませんが、それもこれも 日常業務を簡易に済ませる為の準備と思って取り組んでみてください。 説明が行き届かない点もあるかも知れませんが、不明な点は遠慮なくお訊ねください。 以上です。

その他の回答 (9)

回答No.10

No6です。 ワークシート関数を使った数式の方法を知りたいと思い回答したわけですが、 >これらの結果の文字列は選択すると数式が表示されるのですが、 > 表示されている文字列を文字列として選択する事は出来ないのでしょうか? 数式である以上、できません。orz 値の貼り付けを行ってからの作業になり、VBAを使ったほうが理解しやすいと思います。

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

参考までに(互換モードでも対応できる方法)。 Excel2003以前のバージョンでもネストの制限にかからない方法として以下のような名前定義を利用する方法があります。 元データがA2セルにある場合、数式入力セルを選択して「挿入」「名前」「定義」(2007以降のバージョンで互換モードの場合なら数式タブの「名前の定義」)で例えば「tikan1」と名前を付け、参照範囲に「=SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(JIS(Sheet1!A2),"0",0),"1",1),"2",2),"3",3),"4",4),"5",5)」と入力します。 最後に数式入力セルで以下の式を入力すれば、2003以前のバージョンでもネストの制限にかからず計算することができます。 =SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(tikan1,"6",6),"7",7),"8",8),"9",9)

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

>下記の方法No.2では上限にかかり使用が出来ませんでした。 入れ子のレベル数が上限を超えているというメッセージが出たのでしょうか? 基本的に、Excel2007以降のバージョンなら入れ子の制限にはかかりませんので、エラー表示が出たならファイル形式がExcel2003以前のバージョンの形式(互換モード:拡張子xls)でファイルを保存しているのではないでしょうか。 その場合は、名前を付けて保存でデフォルトのxlsxの形式でファイルを保存し直してみてください。

matsuch
質問者

お礼

ありがとうございます。参考にさせて頂きます。

回答No.6

関数で無理やり 最大253文字までとして(~XL2003) A1セルに対象文字列 B1セルに 結果の =INDEX(D1:IV1,COUNTA(D1:IV1)) 下へオートフィル C1セルは入力しない D1セルに =IF(LEN(JIS($A1))=LEN(C1),C1,C1&IF(OR(CODE(MID($A1,COLUMN(A1),1))={222,223}),"", IF(IF(LEN(MID($A1,COLUMN(B1),1))=0,FALSE(),OR(CODE(MID($A1,COLUMN(B1),1))={222,223})), JIS(MID($A1,COLUMN(A1),2)), IF(AND(CODE(MID($A1,COLUMN(A1),1))>=166,CODE(MID($A1,COLUMN(A1),1))<=221), JIS(MID($A1,COLUMN(A1),1)),MID($A1,COLUMN(A1),1))))) 右へ下へオートフィル

matsuch
質問者

補足

ありがとうございます。表示されました。 これらの結果の文字列は選択すると数式が表示されるのですが、 表示されている文字列を文字列として選択する事は出来ないのでしょうか? 宜しくお願いします。

  • cj_mover
  • ベストアンサー率76% (292/381)
回答No.5

No.4、cjです。 ユーザー定義関数を、もう一種類あげておきます。 こちらの方が内容的には難しいかも知れませんが、 精度もパフォーマンスも向上する筈です。 これも今春に書いていたものですが、こちらの方がお奨めです。 導入の手順は、No.4と同様です。 新しい標準モジュールに、 過不足なく(他に記述がない状態)で貼り付けて使ってください。 Excelシートでは   =KanaJis(A1) のように設定します。 ' ' ===============ここから=============== Dim oRegExp As Object ' ' 文字列を引数に、半角カナだけを全角に置換 ' ' 正規表現版 Function KanaJis(ByVal sSrc As String) As String   Dim sBuf As String   Dim Matches As Object   Dim Match As Object   sBuf = sSrc   On Error GoTo CrRegExp_   Set Matches = oRegExp.Execute(sBuf)   On Error GoTo 0   For Each Match In Matches     sBuf = Replace(sBuf, Match, StrConv(Match, vbWide), , 1)   Next   KanaJis = sBuf   Exit Function CrRegExp_:   Set oRegExp = CreateObject("VBScript.RegExp")   oRegExp.Pattern = "[\uFF66-\uFF9F]+"   oRegExp.Global = True   Resume End Function ' ' ===============ここまで===============

matsuch
質問者

補足

お返事ありがとうございます。 対象シートをひらいた状態で記述をVBにもいれたのですが、 すぐ横のシートに =KanaJis(A1) で試した所 #NAME?と表示されました。 あと、VBの記述は保存の必要はありませんでしょうか?

  • cj_mover
  • ベストアンサー率76% (292/381)
回答No.4

こんにちは。お邪魔します。 > どなたか良い関数を教えてください。 通常のExcelの関数だけでは、難しい、というか、 本当の意味で確実な置換となると 私には出来ませんし、出来る人いる?のでしょうか。 濁点・半濁点などを除いたア~ンのような簡単な条件なら できるのかも知れませんが、そういう需要はないですよね。 "関数を"ということなので、 ユーザー定義関数(UDF)で、お応えします。 とりあえず、新規のブックで試してください。 1) 検証サンプルとして、以下の数式をA1に設定   =ASC("ハ マ オ(4)パパa(32)マンマk(29)オジ(37)オジジ(62)") 2) 後述の手順でユーザー定義関数"Kana2Wide()"を使えるようにしたら 3) どこか空いているセルに 以下の数式を普通の関数と同じ要領で設定   =kana2wide(A1) 【ユーザー定義関数"Kana2Wide()"を使えるようにする】 1■ 対象のExcelブックが開いている状態で、   Alt キーを押下げながら F11 キー   →Visual Basic Editor を起動します。 2■ Visual Basic Editor のメニューバー   [挿入(_I)]を選択→[標準モジュール(_M)]を選択   →コード記載用の新しいシート[標準モジュール]が開きます 3■ [標準モジュール]に   以下、==ここから==、==ここまで==、と示した範囲を   まるごとコピーしたものを、そのまま貼り付けます。 4■ Visual Basic Editor を閉じるボタンで閉じ、Excel画面に戻る。   以上で準備完了です。 Excelのバージョンが2007以降であれば、マクロ有効ブックとして保存します。 それ以前のバージョンでは、普通に保存しておいて、 ブックを開く際に問い合わせるダイアログが表示されたら、 マクロを有効にするように選択します。 ユーザー定義関数やVBAと聞くと難しく考えてしまう方が多いですけれど、 面倒なのは最初だけ、日常業務を易しくサポートしてくれるものだと考えてください。 何か疑問や相談などあれば補足欄にでも書いてみてください。 以下、今年の春に質問への回答用に書いていたものです。 ' ' ===============ここから=============== ' ' 文字列を引数に、半角カナだけを全角に置換する関数 Function Kana2Wide(ByVal sSrc As String) As String   Dim sBuf As String   Dim sPtn As String   Dim nLen As Long   Dim nPos As Long   Dim nSt As Long   Dim i As Long   Dim flg As Boolean   sPtn = "[" & Chr$(166) & "-" & Chr$(223) & "]" '  "[ヲ-゜]"   ←半角カナ   nLen = Len(sSrc)   sBuf = String$(nLen + 1, vbNullChar)   flg = Asc(sSrc) > 165 And Asc(sSrc) < 224   nSt = 1   nPos = 1   For i = 1 To nLen + 1     If (Mid$(sSrc, i, 1) Like sPtn Xor flg) Or i > nLen Then       If flg Then         Mid(sBuf, nPos) = StrConv(Mid$(sSrc, nSt, i - nSt), vbWide)       Else         Mid(sBuf, nPos) = Mid$(sSrc, nSt, i - nSt)       End If       flg = Not flg       nSt = i       nPos = InStr(nPos + 1&, sBuf, vbNullChar)     End If   Next i   Kana2Wide = Left$(sBuf, nPos - 1) End Function ' ' ===============ここまで===============

matsuch
質問者

お礼

詳細な内容をありがとうございます。 マクロなど手を出した事がまだないですが、 試してみます。

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.3

No.1です! たびたびごめんなさい。 前回のコードで >If str Like "[ア-ン]" Then '←「ア」・「ン」は半角のカタカナに! の行を >If str Like "[ア-ン ァ-ォ ッ ャ-ョ]" Then '←カタカナはすべて半角に! に変更してください。 拗音などが抜けていました。 (細かく調べていませんのでもっと抜けている文字があるかもしれません) 何度も失礼しました。m(_ _)m

matsuch
質問者

お礼

ありがとうございました。

回答No.2
  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.1

こんにちは! お望みでない方法かもしれませんが、VBAでの一例です。 画面左下の操作したいSheet見出し上で右クリック → コードの表示 → VBE画面に ↓のコードをコピー&ペーストしてマクロを実行してみてください。 (Alt+F8キー → マクロ → マクロ実行です) Sub Sample1() 'この行から Dim i As Long, k As Long, str As String For i = 1 To Cells(Rows.Count, "A").End(xlUp).Row For k = 1 To Len(Cells(i, "A")) str = Mid(Cells(i, "A"), k, 1) If str Like "[ア-ン]" Then '←「ア」・「ン」は半角のカタカナに! Cells(i, "A") = Replace(Cells(i, "A"), str, StrConv(str, vbWide)) End If Next k Next i End Sub 'この行まで ※ 画面ではコード内の「ア」と「ン」が全角になっているかもしれません。 実際は半角で打ち込んでいますが、全角の場合は半角に直してください。 ※ 一旦マクロを実行すると元に戻せませんので、 別Sheetでマクロを試してみてください。m(_ _)m

matsuch
質問者

お礼

お返事ありがとうございます。 VBAの使い方がさっぱりですが一度チャレンジしてみたいと思います。 ありがとうございました。

関連するQ&A

  • エクセル:半角カナを全角に、半角英数はそのままに。

    エクセル:半角カナを全角に、半角英数はそのままに。 ひらがな・漢字・半角カナ・半角英数が混じったセルが縦に沢山あります。 半角カナだけを全角にし、半角英数はそのままにしたいのですが、JISでは全て全角になってしまいます。 どなたか良い関数を教えてください。

  • Excelで半角カナのみを全角に変換したい

    EXCELで、半角カナのみを全角に変換する方法はありますか? JISという関数がありますが、これは英数まで全角に変換されてしまいます。

  • 英数文字を半角に、カナを全角に変換したい(Excel関数)

    Excel関数で、英数カナ文字混在したセルに対して 英数は半角に、カナ文字は全角に変換したいのですが なにかいい方法はないでしょうか? JIS関数、ASC関数では上手くできません。 当方はエクセル駆け出しです。VBAとかを使えば上手くいくのでしょうか?よろしくご教授願います。

  • 列ごとに全角英数・全角カナ・半角カナしか入力できないフォーマットをつくりたい

    エクセルで基本フォーマットを作り、他の人に配布&入力してもらった後、全てを集計&データベース化する必要があるのですが。 各列に設けた項目により、‘全角英数のみ’‘全角カナのみ’‘半角カナのみ’の入力規則を設けた後、ロックをかけてみたのですが、変換できてしまう…? 全角英数&カナに関しては【=LEN()*2=LENB()】で逃げれたように思うのですが、‘半角カナのみ’の入力設定がわかりません…;; ちなみに、別の列に入力したものを数式で半角に変換する方法は、今回のフォーマットには使いたくないのですが…?? どなたか、お助けください…**

  • エクセル上で英数のみを半角するにはどうしたらいいでしょうか?

    エクセル上で、英数のみを全角から半角にするソフトはあるでしょうか? 英数・カナ・記号・スペースまで一括に半角にするものや、英数でも日本文の中の英数1文字は半角にしないものなどは見つけることができたのですが、英数だけをすべて半角にするものは見つけられません。 何かいいものがありましたら教えてください。

  • 半角英数文字を全角英数文字に変換する方法

    半角英数文字を全角英数文字に変換する方法ってありますか? どうしても半角カナのみならず、英数字まで全角に必要が出てきたんですが、何かいいてはありますでしょうか。 jcode.phpsは英数文字まで全角に出来ませんよね。 pgrep_replaceも使ってみたんですが、うまく引っ掛かりません。 PHP3とMySQLでEUC-JPを扱ってます。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • 全角カナを半角カナへ

    お聞きしたいのですが 全角カナを半角カナに変換したいのですが、どのような関数もしくはやり方(ロジック)があるでしょうか? ちなみにPHP4ではなくPHP3です。 すみませんが、宜しくお願いしますm(_ _)m

    • ベストアンサー
    • PHP
  • 半角カナを全角カナに変換したい

    表題の通りです。 先輩から引き継いだエクセルのデータが、全角カナと半角カナとの両方を、使い分けなどではなく使用しているものだったので、半角カナを全部、全角カナに変換したいと考えています。 置換機能で50音全部を置換するのは大変ですので、一度に変換する良い方法があれば教えてください。 また、全角アルファベットを、普通の英字(半角アルファベット?)にも変換したいと思っています。

  • エクセル_関数_半角カナを全角にしたいのですが。

    お尋ねします。 半角カナを全角カナに変換しようと、エクセル関数のJISを使いました。 ところが、1つのセルに255文字までなら正常に変換ができるのですが、256文字以上になると、#VALUEでエラーとなります。 昔のバージョンが低いエクセルでは、1つのセルに255文字までしか入らなかった記憶があるのですが、エクセル2007では、一つのセルに255文字以上登録しているセルもあり、文字が途中で切れているようには見えません。 関数LENを使って調べてみますと、300文字入ったセルもあります。 しかし、その300文字入ったセルを関数の引数とした場合に上記のようなエラーになってしまいます。 「255文字以上のセルは分割してすればいいじゃないか」とのお声もあるかとともいますが、分割はせずに半角カナの入ったセルを全角カナに置き換えることはできないでしょうか。 よろしくお願いします。

  • 半角英数が入力できなくなってしまいました。半角カナしか打てません

    Windos2000の環境です。 何故か半角英数での入力が半角カナになってします。 ログイン画面でユーザ名を入力しようとすると半角英数が打てずに困っています。 とりあえず設定をチェックしてみると 入力モードは"直接入力"になってします。 変換モードは"一般(I)"になっています。 入力設定はかな入力になっています。特に変わった所は見当たらないのですが何故か半角カナになってしまいます。 その際、右下は「_A」と表示されています。 [半角/全角]キーを押すと「あ」となって問題なくひらがな入力はできます。 どうすれば半角英数を入力出来るようになるのでしょうか?

専門家に質問してみよう