[[20050224103222]] 『カタカナ文字だけを全角に変換する方法ありますか』(JOIN) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『カタカナ文字だけを全角に変換する方法ありますか?』(JOIN)

カタカナ文字だけを半角から全角に変換する方法はないでしょうか?
同じセルにある半角英数は、半角のままでです。

よろしくお願いします。


 Strconv関数で、ASCU文字コード 177−221 だけを対象にすればできます。
  (INA)


 セルA1に文字が入っているとしたら、=MyStr(A1) として使うユーザー定義関数です。
 
Public Function MyStr(Target As Range) As String
MYLEN = Len(Target.Value)
    For i = 1 To MYLEN
        MyText = Mid(Target.Value, i, 1)
        MyCheck = StrConv(MyText, vbUpperCase) Like "[A-Z,0-9,.,+,-]"
        Select Case MyCheck
            Case True
                MyVal = MyVal & MyText
            Case Else
                MyVal = MyVal & StrConv(MyText, vbWide)
        End Select
    Next i
    MyStr = MyVal
End Function

 ※> Strconv関数で、ASCU文字コード 177−221 だけを対象にすればできます。
 最初そのやり方でやろうとしたんですけど、使い方がわかりませんでした(T▽T)アハハ!

 Asc関数で良かったんですね・・・(^_^A;
Public Function MyStr(Target As Range) As String
MYLEN = Len(Target.Value)
    For i = 1 To MYLEN
        MyText = Mid(Target.Value, i, 1)
        MyCode = Asc(MyText)
        Select Case MyCode
            Case 177 To 221
                MyVal = MyVal & StrConv(MyText, vbWide)
            Case Else
                MyVal = MyVal & MyText
        End Select
    Next i
    MyStr = MyVal
End Function

 (川野鮎太郎)


(JOIN)
お答えありがとうございます。
ただ、私に計算式を入力するような関数の設定知識しかないため、具体的に
どのように利用して良いかがわかりません。

記述先の開き方など、簡単で良いので通して教えていただけないでしょうか。


 エクセルの画面で、Altキー押しながらF11(ファンクションキー)を押して、
 VBEの画面を開きます。
 そのVBEのメニューで挿入>標準モジュールとして出てきた白い画面に、上記のコードを貼り付けてください。
 貼り付け出来たら、VBEの画面を消してワークシートに戻り、文字を表示させたいセルに =MyStr(A1) と入力してください。
 (川野鮎太郎)

返答ありがとうございます。
試してみたのですが、うまくいきませんでした。
VBEを開き標準モジュールの白い画面に貼り付けることはできました。
その後、ワークシートに=MyStr(A1)と入力したのですが・・・。

入力したいセルにとありますが、シート全部を上記の定義にしたいと思っています。
マクロはほとんど分からないのですが、どうしたら簡単に解決できるでしょうか?

(あっち)


 面白そうなので、σ(^o^;)も参加させてください。
 なるほど、シート全体をってことですか〜
 ちょっと外れてるかもしれませんが、、、

 ↓シートモジュールに
 Option Explicit
 Option Compare Text
 Private Sub Worksheet_Change(ByVal Target As Range)
 Dim adrs As Variant, data As Variant, MyText As Variant, MyVal As Variant
 Dim n As Long, i As Long, c As Long, Mylen As Long, MyCode As Long
 Dim tbl As Range

     If Target.Count <> 1 Then: Exit Sub
     If Left(Target, 6) <> "Mystr(" Then: Exit Sub
     Application.EnableEvents = False
     data = Target
     adrs = Target.Address
     data = Split(Range(adrs).Value, "(")(1)
     data = Left(data, Len(data) - 1)
     Target.Clear
     Set tbl = Range(data)

     For n = 1 To tbl.Rows.Count
         For i = 1 To tbl.Columns.Count
             Mylen = Len(tbl.Cells(n, i))
             For c = 1 To Mylen
                 MyText = Mid(tbl.Cells(n, i), c, 1)
                 MyCode = Asc(MyText)
                 Select Case MyCode
                     Case 177 To 221
                         MyVal = MyVal & StrConv(MyText, vbWide)
                     Case Else
                         MyVal = MyVal & MyText
                 End Select
             Next c
             Range(tbl.Cells(n, i).Address) = MyVal
             MyVal = ""
         Next i
     Next n
     Application.EnableEvents = True 

 End Sub

 シートの見出しを右クリック
 コードの表示を選んでコピペ 
ーーーーーーーーーーーーーーーーーーーー
 何か不具合が有ったときに実行するように
 ↓標準モジュールに

 Sub TEST()
    Application.EnableEvents = True
 End Sub

 使用方法は、
何処でもいいから空いた場所に mystr(a1:d4) のように、mystrの後ろに変換したい範囲を入力。
 ※=(イコール)は、入れないで下さい。

 (キリキ)(〃⌒o⌒)b 17:35 チョット修正

 いつもお世話になります。

 過去レスを参考にあまり質問しないよう成長しました(笑)
 川野鮎太郎さんが回答した『最初そのやり方〜』
 以降で試したみたら上手くいきました
 ただ、成功するファイルとどうやっても成功しないファイルがでてきてしまい
 悪戦苦闘し「質問しちゃおうかな」と心が折れかかりましたが、
 どうにかがんばりました
 同じような壁に当たった人がもしいたら、と思い
 参考程度ですが、投稿させていただきます。

 成功するファイルに成功できないファイルのシートを移動する
 たったこれだけで解決できました

 キリキさんのも試しましたが、やはりまだ私のレベルではだめでした(泣)

 これからも宜しくお願い致します。

 元祖(Q)

 ずいぶん古いスレッドなので追加投稿も悩みましたが
 参考にという事でアップされたみたいなので正規表現の方法もアップしてみます。
 利点は簡単に半角カナのブロックを探せるので
 1文字づつループチェックですと ガ→カ゛ になりますが
 半角カナを一括でチェックすると ガ→ガ  になります。(わかりにくいかな?)
 濁点、半濁点、長音なども一緒にすると楽ですね。

  Function MyStr(Target As Range) As String
  Dim m As Object
  MyStr = Target.Value
  With CreateObject("VBScript.RegExp")
    .Global = True
    .Pattern = "[ヲ-゚]+"
    For Each m In .Execute(MyStr)
      MyStr = Replace(MyStr, m.Value, StrConv(m.Value, vbWide))
    Next m
  End With
  End Function

 (momo)

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.