人生で一番思い出に残ってる靴

Excelファイルのテキスト処理で教えていただきたいです。
B列に入っている文章に対して、下記の処理を施したいです。

●3桁以上の半角数字を全角にする。
●3文字以上の半角英字を全角にする。

アドバイスいただければ幸いです。
よろしくお願いいたします。

A 回答 (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
    • good
    • 0
この回答へのお礼

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

お礼日時:2006/06/08 20:20

●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,})"
に変更
    • good
    • 0
この回答へのお礼

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

お礼日時:2006/06/08 20:21

私も昨日偶然初めて知ったのですが(恥?)


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

この回答への補足

説明不足でした。申し訳ありません。

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

補足日時:2006/06/07 23:21
    • good
    • 0

書式で出来るのは数字だけですが


「セルの書式設定」「表示形式」を「ユーザー定義」で
「[>99][DBNUM3]0;[<-99][DBNUM3]0;0」

別セルで数式でいいなら
=IF(LEN(IF(ISNUMBER(A1),ABS(A1),A1))>2,JIS(A1),A1)

この回答への補足

説明不足であったようで申し訳ありません。

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

補足日時:2006/06/07 23:19
    • good
    • 0

半角→全角変換はJIS関数で可能ですが



>●3桁以上の半角数字を全角にする。
>●3文字以上の半角英字を全角にする。

とはどういう意味でしょうか? 連続した場合に処理する? 全角半角混在の時はどうする? また2桁以下の場合はどうなるのでしょうか。

補足で事例を掲げていただければ回答できるかもしれません

この回答への補足

説明が足りなかったようで申し訳ありません。

B列の各セルには、英字のみや数字のみでなく、
漢字やひらがななども混在した400文字程度の文章が入っています。
その文章中に英字や数字などが複数含まれています。

半角数字と半角英字が連続して3文字以上続いた場合に、
その3文字以上の半角数字と半角英字を全角にしたいです。

連続した数字と英字は、全角半角が混在することはありません。
必ずどちらかに統一されています。

2桁以下の場合は、何も処理をしません。

よろしくお願いいたします。

補足日時:2006/06/07 23:16
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


おすすめ情報