- ベストアンサー
Excel : 3桁以上の半角数字を全角にする方法は?
Excelファイルのテキスト処理で教えていただきたいです。 B列に入っている文章に対して、下記の処理を施したいです。 ●3桁以上の半角数字を全角にする。 ●3文字以上の半角英字を全角にする。 アドバイスいただければ幸いです。 よろしくお願いいたします。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは。KenKen_SP です。 > 漢字やひらがななども混在した400文字程度の文章が入っています。 この用途だと、関数では無理ですね。また、Excel の検索機能は正規表現が 使えませんので、必然的に VBA で処理することになります。 お試し下さい。 【 手順 】 1. Excel 画面で[ALT]+[F11] キー押す --> Visual Basic Editor(以下 VBE )起動 2. VBE メニューで [挿入]-[標準モジュール]クリック 3. 2.で開いたホワイトスペースに下記のコードをコピー&ペースト 4. VBE 閉じる 5. Excel 画面に戻り、処理を施すセルを選択 6. [ALT]+[F8] で実行 '------- ↓以下コード --------------- Option Explicit Sub Sample() '------------------------------------------------------------------ ' @Description : 3文字以上連続する数字または英字を全角化 '------------------------------------------------------------------ If UCase$(TypeName(Selection)) <> "RANGE" Then Exit Sub Dim RE As Object ' RegExp Dim MC As Object ' MatchCollection Dim M As Object ' Match Dim rngTarget As Range Dim C As Range Dim strSource As String Dim lngPos As Long 'ここで指定した内容が全角化されます Const cnsPATTERN = "(\d{3,}|[a-zA-Z]{3,})" Application.ScreenUpdating = False Set RE = CreateObject("VBScript.RegExp") With RE .Pattern = cnsPATTERN .IgnoreCase = False .Global = True End With Set rngTarget = Intersect(Selection, ActiveSheet.UsedRange) For Each C In rngTarget If C.Value <> vbNullString And Not C.HasFormula Then strSource = C.Text Set MC = RE.Execute(strSource) If Not MC Is Nothing Then For Each M In MC lngPos = InStr(strSource, M.Value) Mid$(strSource, lngPos, Len(M.Value)) _ = StrConv(M.Value, vbWide) Next M Set MC = Nothing C.Cells(1, 1).Value = strSource End If End If Next C Set rngTarget = Nothing Set RE = Nothing End Sub
その他の回答 (4)
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
●3桁以上の半角数字を全角にする。 アクティブセルの3桁以上の数字を全角にする ---------------------------------------------------------------- Public Sub num2zen() '3文字以上の数字部分の全角文字への置換 Dim objRegExp, objMatches, objMatch Dim str str = ActiveCell.value Set objRegExp = CreateObject("VBScript.RegExp") objRegExp.Pattern = "(\d{3,})" objRegExp.Global = True Set objMatches = objRegExp.Execute(str) For Each objMatch In objMatches str = Replace(str, objMatch.value, StrConv(objMatch.value, vbWide), 1, 1) Next ActiveCell.value = str End Sub ---------------------------------------------------------------- ●3文字以上の半角英字を全角にする。 objRegExp.Pattern = "(\d{3,})" を objRegExp.Pattern = "([A-Za-z]{3,})" に変更
お礼
ありがとうございました。 希望の処理ができました。
- oo14
- ベストアンサー率22% (1770/7943)
私も昨日偶然初めて知ったのですが(恥?) 標準キーボードならスペースキーの横に 「変換」ってキーがありますよね。 選択しておいてこのキーをたたくだけです。 目的のものが選び放題です。 これでよかったのでしょうか?
補足
説明不足でした。申し訳ありません。 他の方の補足で説明させていただきましたが、 私が希望していることは別のことです。
- mshr1962
- ベストアンサー率39% (7417/18945)
書式で出来るのは数字だけですが 「セルの書式設定」「表示形式」を「ユーザー定義」で 「[>99][DBNUM3]0;[<-99][DBNUM3]0;0」 別セルで数式でいいなら =IF(LEN(IF(ISNUMBER(A1),ABS(A1),A1))>2,JIS(A1),A1)
補足
説明不足であったようで申し訳ありません。 各セルには数字のみや英字のみが入っているのではなくて、 400文字程度の文章が入っています。 その文章中に含まれる英字と数字に対して、 処理をかけたいと思っております。
- zap35
- ベストアンサー率44% (1383/3079)
半角→全角変換はJIS関数で可能ですが >●3桁以上の半角数字を全角にする。 >●3文字以上の半角英字を全角にする。 とはどういう意味でしょうか? 連続した場合に処理する? 全角半角混在の時はどうする? また2桁以下の場合はどうなるのでしょうか。 補足で事例を掲げていただければ回答できるかもしれません
補足
説明が足りなかったようで申し訳ありません。 B列の各セルには、英字のみや数字のみでなく、 漢字やひらがななども混在した400文字程度の文章が入っています。 その文章中に英字や数字などが複数含まれています。 半角数字と半角英字が連続して3文字以上続いた場合に、 その3文字以上の半角数字と半角英字を全角にしたいです。 連続した数字と英字は、全角半角が混在することはありません。 必ずどちらかに統一されています。 2桁以下の場合は、何も処理をしません。 よろしくお願いいたします。
お礼
ありがとうございました。 希望の処理ができました。