[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『カタカナ文字だけを全角に変換する方法ありますか?』(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.