• ベストアンサー

Excel : 3桁以上の半角数字を全角にする方法は?

Excelファイルのテキスト処理で教えていただきたいです。 B列に入っている文章に対して、下記の処理を施したいです。 ●3桁以上の半角数字を全角にする。 ●3文字以上の半角英字を全角にする。 アドバイスいただければ幸いです。 よろしくお願いいたします。

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

  • ベストアンサー
  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.4

こんにちは。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

booooob
質問者

お礼

ありがとうございました。 希望の処理ができました。

その他の回答 (4)

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.5

●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,})" に変更

booooob
質問者

お礼

ありがとうございました。 希望の処理ができました。

  • oo14
  • ベストアンサー率22% (1770/7943)
回答No.3

私も昨日偶然初めて知ったのですが(恥?) 標準キーボードならスペースキーの横に 「変換」ってキーがありますよね。 選択しておいてこのキーをたたくだけです。 目的のものが選び放題です。 これでよかったのでしょうか?

booooob
質問者

補足

説明不足でした。申し訳ありません。 他の方の補足で説明させていただきましたが、 私が希望していることは別のことです。

  • mshr1962
  • ベストアンサー率39% (7417/18945)
回答No.2

書式で出来るのは数字だけですが 「セルの書式設定」「表示形式」を「ユーザー定義」で 「[>99][DBNUM3]0;[<-99][DBNUM3]0;0」 別セルで数式でいいなら =IF(LEN(IF(ISNUMBER(A1),ABS(A1),A1))>2,JIS(A1),A1)

booooob
質問者

補足

説明不足であったようで申し訳ありません。 各セルには数字のみや英字のみが入っているのではなくて、 400文字程度の文章が入っています。 その文章中に含まれる英字と数字に対して、 処理をかけたいと思っております。

  • zap35
  • ベストアンサー率44% (1383/3079)
回答No.1

半角→全角変換はJIS関数で可能ですが >●3桁以上の半角数字を全角にする。 >●3文字以上の半角英字を全角にする。 とはどういう意味でしょうか? 連続した場合に処理する? 全角半角混在の時はどうする? また2桁以下の場合はどうなるのでしょうか。 補足で事例を掲げていただければ回答できるかもしれません

booooob
質問者

補足

説明が足りなかったようで申し訳ありません。 B列の各セルには、英字のみや数字のみでなく、 漢字やひらがななども混在した400文字程度の文章が入っています。 その文章中に英字や数字などが複数含まれています。 半角数字と半角英字が連続して3文字以上続いた場合に、 その3文字以上の半角数字と半角英字を全角にしたいです。 連続した数字と英字は、全角半角が混在することはありません。 必ずどちらかに統一されています。 2桁以下の場合は、何も処理をしません。 よろしくお願いいたします。