[[20180307215457]] 『文字列内の全角文字を置き換え』(かっぱ) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『文字列内の全角文字を置き換え』(かっぱ)

お世話になります

マンション名のリストがあり[A}列、全角文字と半角文字が混在しています。
この[A}列の全角文字をすべて[●]に変改して[B]列に吐き出せますか?
[A}列は事前にASC関数で半角に変換可能な文字は半角になっています。

    [A]         [B]
[1]cube中央a    cube●●a
[2]town本町-24   town●●-24
[3]1998町営住宅4-5 1998●●●●4-5

過去に類似している問い合わせはありましたが、知識が足りておらず
対策を見つけることができませんでした。

できれば関数式を教えていただれば助かります。

< 使用 Excel:Excel2010、使用 OS:Windows10 >


 とりあえずvbaで

 Sub test()
     Dim a, i As Long
     With Range("a1", Range("a" & Rows.Count).End(xlUp)).Resize(, 2)
         a = .Value
         With CreateObject("VBScript.RegExp")
             .Global = True
             .Pattern = "[一-龠〃々〆〇]"
             For i = 1 To UBound(a, 1)
                 a(i, 2) = .Replace(a(i, 1), "●")
             Next
         End With
         .Value = a
     End With
 End Sub
(seiya) 2018/03/07(水) 22:53

 >全角文字をすべて
 ひらがな、カタカナも含むのなら

             .Pattern = "[一-龠〃々〆〇]"
 を
             .Pattern = "[ぁ-んァ-ヶー一-龠〃々〆〇]"
 に差し替え
(seiya) 2018/03/07(水) 22:59

 例では全角文字は連続して1箇所だが飛び飛びなこともあるのだろうか?
(ねむねむ) 2018/03/08(木) 07:00

 数式だと長くなってしまった(汗)
 B1=SUBSTITUTE(A1,MID(A1,MIN(INDEX((LENB(MID(ASC(A1),ROW(A$1:A$100),1))=1)*100+ROW($A$1:$A$100),)),MAX(INDEX((LENB(MID(ASC(A1),ROW(A$1:A$100),1))=2)*ROW(A$1:A$100),))-MIN(INDEX((LENB(MID(ASC(A1),ROW(A$1:A$100),1))=1)*100+ROW($A$1:$A$100),))+1),REPT("●",LEN(MID(A1,MIN(INDEX((LENB(MID(ASC(A1),ROW(A$1:A$100),1))=1)*100+ROW($A$1:$A$100),)),MAX(INDEX((LENB(MID(ASC(A1),ROW(A$1:A$100),1))=2)*ROW(A$1:A$100),))-MIN(INDEX((LENB(MID(ASC(A1),ROW(A$1:A$100),1))=1)*100+ROW($A$1:$A$100),))+1))))
 飛び飛びだとダメです。
(ろっくん) 2018/03/08(木) 08:37

 B1 =REPLACE(ASC(A1),MATCH(TRUE,INDEX(LENB(MID(ASC(A1),ROW($1:$100),1))=2,),0),LENB(ASC(A1))-LEN(ASC(A1)),REPT("●",LENB(ASC(A1))-LEN(ASC(A1))))

 同じく飛び飛びNG。
(GobGob) 2018/03/08(木) 08:52

 =REPLACE(A1,MATCH(1,INDEX((CODE(MID(A1,ROW($1:$100),1))>256)*1,0),0),LENB(A1)-LEN(A1),REPT("●",LENB(A1)-LEN(A1)))
 こちらも飛び飛びには対応せず。
(ねむねむ) 2018/03/08(木) 09:03

 邪道でワード使う方法。飛び飛びでもOK

 ワードにコピペする。
 ワードで置換から
 →オプションボタンをクリック。
  「ワイルドカードを使用する」にチェック
 →検索する文字に [、-鶴] を入力([]も全部入力)
 →置換後の文字列に ● を入力
 →すべて置換ボタンをクリック

 置換え出来たらエクセルの指定位置にコピペしてもどす。

(1111) 2018/03/08(木) 09:36


Sub main()
    Dim c As Range, i As Long, comm As String
    For Each c In Range("A:A").SpecialCells(xlCellTypeConstants)
        For i = 1 To Len(c.Value)
            If Mid(c.Value, i, 1) = StrConv(Mid(c.Value, i, 1), vbWide) Then
                comm = comm & "●"
            Else
                comm = comm & Mid(c.Value, i, 1)
            End If
        Next i
        c.Offset(, 1).Value = comm
        comm = ""
    Next c
End Sub
(mm) 2018/03/08(木) 09:38

 隠居じーさん定番、恐怖のユーザー定義関数
間違ってるかもエラー処理無しバージョン。

 Option Explicit
Function maruB(ByVal rr As Range) As Variant
'maruB(A1)
    Dim i As Long, j As Long, mstr As String
        mstr = rr.Text
        For j = 1 To Len(mstr)
            If LenB(StrConv(Mid(mstr, j, 1), vbFromUnicode)) = 2 Then
                Mid(mstr, j, 1) = "●"
            End If
        Next
        maruB = mstr
End Function
(隠居じーさん) 2018/03/08(木) 11:43

コードが煩雑でした。差し換えてください。

 Option Explicit
Function maruB(ByVal rr As Range) As Variant
'maruB(A1)
    Dim i As Long, mstr As String
    mstr = rr.Text
    For i = 1 To Len(mstr)
        If LenB(StrConv(Mid(mstr, i, 1), vbFromUnicode)) = 2 Then
            Mid(mstr, i, 1) = "●"
        End If
    Next
    maruB = mstr
End Function
(隠居じーさん) 2018/03/08(木) 11:55

(seiya)様
(ねむねむ)様
(ろっくん)様
(GobGob)様
(1111)様
(mm)様
(隠居じーさん)様

お礼が遅くなり申し訳ございません
vbaも関数も試してみましたが最初にvbaを教えていただいた
(seiya)様のvbaで解決しました

応用として[英字]以外は[●]にするなどもトライしています。

(かっぱ) 2018/03/12(月) 23:19


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.