[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『カタカナ文字だけを全角に変換する方法ありますか?』(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
(川野鮎太郎)
記述先の開き方など、簡単で良いので通して教えていただけないでしょうか。
エクセルの画面で、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.