[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『文字列内の全角文字を置き換え』(かっぱ)
お世話になります
マンション名のリストがあり[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
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
お礼が遅くなり申し訳ございません
vbaも関数も試してみましたが最初にvbaを教えていただいた
(seiya)様のvbaで解決しました
応用として[英字]以外は[●]にするなどもトライしています。
(かっぱ) 2018/03/12(月) 23:19
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.