解決済みの質問
VBAの質問です。
VBAの質問です。
シート上、あるいは変数(x)の中にある丸文字(①~⑳)だけを、ある一つの文字(例えば●)に変換したいのですが何か方法はありませんでしょうか?
丸文字ではなく普通の文字や数字なら簡単なのですが、丸文字という部分で引っかかっています。
ご存知の方教えてください。
よろしくお願い致します。
-
- 質問日時:
- 2010/3/19 03:57:02
-
- 解決日時:
- 2010/3/20 00:16:33
-
- 回答数:
- 5
-
- お礼:
- 知恵コイン
- 250枚
-
- 閲覧数:
- 153
-
- ソーシャルブックマークへ投稿:
- Yahoo!ブックマークへ投稿
- はてなブックマークへ投稿
- (ソーシャルブックマークとは)
- この質問・回答は役に立ちましたか?
- 役に立った!
お役立ち度:
1人が役に立つと評価しています。
ベストアンサー以外の回答
(4件中1〜4件)
- 並べ替え:回答日時の
- 新しい順
- |
- 古い順
この程度なら? 置き換えでいいんじゃナインかな。
Sub REPLE()
Dim i As Integer
Dim Str, ReStr As String
Str = Array("①", "②", "③", "④", "⑤", "⑥", "⑦", "⑧")
ReStr = "●"
''................................... ↑ ⑳まで書いてね
Application.ScreenUpdating = False
For i = LBound(Str) To UBound(Str)
Cells.Replace What:=Str(i), Replacement:=ReStr
Next
Application.ScreenUpdating = True
End Sub
- 違反報告
- 回答日時:2010/3/19 11:26:58
・A1セルに入力された文字列の中に①~⑳を含む場合、●に変換する
以上の条件で私のPCの場合でのコードです。
Sub test()
Dim x As String '文字列
Dim x1() As String '1文字を格納する配列変数
Dim i As Integer 'カウンタ
'文字列の取得
x = Range("A1").Value
'変換処理(1文字ずつ判定していく)
ReDim x1(1 To Len(x))
For i = 1 To Len(x)
x1(i) = Mid(x, i, 1)
If Asc(x1(i)) >= -30912 And Asc(x1(i)) <= -30893 Then
x1(i) = "●"
End If
Next i
'変換後の文字列の出力
x = Join(x1, ",") 'カンマ区切りで配列を結合
Range("A1").Value = Replace(x, ",", "") 'カンマを取り除いて出力
End Sub
ASSCIIコードで-30912=①~-30893=⑳の範囲にあるようだったので上記の様な判定にしてみました。
- 違反報告
- 回答日時:2010/3/19 09:49:36
①~⑳の変換元と変換先の対応表を作ります。図の赤枠部分。
(私、勘違いしてた。全部同じ記号なのですね。ま、変換先を同じのにしてもらえば動きます。)
変換したいエリアを選択しておいて、マクロ実行。
黄色部分を選択してマクロ実行すると水色のように変わります。
(余談ですが、これは中国語のピンイン入力に使ってます。a1,a2,a3,a4を各々aの第1声などに変換)
参考になれば。
---------------------
Sub okikae()
Dim moto
Dim saki
Dim i As Long
For i = 3 To 6 '置き換え表の行位置
moto = Range("a" & i)
saki = Range("b" & i)
Selection.Replace What:=moto, Replacement:=saki, LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
Next
End Sub
- 違反報告
- 回答日時:2010/3/19 05:32:36


質問した人からのコメント
今まで悩んでいたのが嘘のようです。本当に感謝です。
他の皆さんもありがとうございました。
今回の質問以外にもいろいろな要素が含まれていて大変参考になりました。