No.3ベストアンサー
- 回答日時:
こんにちは。
#1の補足のマクロは、たぶん、私の書いたものだと思いますが、前回と同じく、ご自身で作っていない場合は、他の人が書いた旨を書いていただいたほうがよいですね。そうしないと、マクロが出来ると勘違いされ、話がちぐはぐになってしまいます。一応、Excel版も掲示板に残しておきます。
正規表現のパターン の場所のそれぞれに、半角対象、全角対象の中に、Unicode の範囲の文字を入れるだけでよいです。なお、半角カタカナは、インターネット上で、半角カタカナが書けないために、便宜的に文字コードで入れているだけですから、実際にお使いの際は、半角カタカナでもかまいません。
ただし、特殊な記号の置換に関しては、ご自身で出来ないとは言いませんが、私のコードからでは、少し手間が多くなります。例 [1] -> (1)
単純なものなら、記録マクロでも良いかもしれません。
---------------------------------
'標準モジュール
Sub RegReplacement()
'半角カタカナを全角に、全角英数を半角にするマクロ (Excel編)
Dim rng As Range
Dim Re As Object
Dim myPat As String
Dim c As Range
Dim Matches As Object
Dim Match As Object
Dim Str1 As String
Dim Str2 As String
Dim buf As String
Dim t As Long
On Error Resume Next
Set rng = ActiveSheet.UsedRange.SpecialCells _
(xlCellTypeConstants, xlTextValues)
On Error GoTo 0
If rng Is Nothing Then
MsgBox "変換する対象が見当たりません。", 48
Exit Sub
End If
'全角側 --- 半角側 (!-/ を加えれば記号も半角)
myPat = "([\uFF66-\uFF9F]*)([0-9A-z]*)" '正規表現のパターン
Set Re = CreateObject("VBScript.RegExp")
Application.ScreenUpdating = False
With Re
.Global = True
.IgnoreCase = True
.Pattern = myPat
For Each c In rng.Cells
Set Matches = .Execute(c.Value)
If Matches.Count > 0 Then
buf = c.Value
For Each Match In Matches
If Len(Match.Value) > 0 Then
Str1 = StrConv(Match.SubMatches(0), vbWide)
If Str1 <> "" Then
'0 =vbBinaryCompare
buf = Replace(buf, Match.SubMatches(0), Str1, , , 0)
End If
Str2 = StrConv(Match.SubMatches(1), vbNarrow)
If Str2 <> "" Then
buf = Replace(buf, Match.SubMatches(1), Str2, , , 0)
End If
End If
Str1 = "": Str2 = ""
Next Match
If buf <> c.Value Then
c.Value = buf
t = t + 1
End If
End If
Next c
End With
Set Re = Nothing
Application.ScreenUpdating = True
If t > 0 Then
MsgBox t & "個のセルを変換しました。", 64
End If
End Sub
No.5
- 回答日時:
こんばんは。
先ほど、同様のマクロ(記号も含めたもの)を書きましたので、
「QNo.4086577 EXCEL 「ASC」関数 英数字の全角を半角に変換するよい方法があれば教えてください 」
http://oshiete1.goo.ne.jp/qa4086577.html
こちらのほうも、一読ください。
No.4
- 回答日時:
こんにちは。
>記号は半角にしたいです。
>どの行と置き換えればいいですか??
Wordよりも簡単ですから、非常に有効なコツを教えておきます。
-----------------------------------
'全角側 --- 半角側 (!-/ を加えれば記号も半角)
>myPat = "([\uFF66-\uFF9F]*)([0-9A-z]*)" '正規表現のパターン
↓
myPat = "([\uFF66-\uFF9F]*)([!-/0-9A-z]*)" '正規表現のパターン
または、
myPat = "([\uFF66-\uFF9F]*)([!-}]*)" '正規表現のパターン
-----------------------------------
とすれば、!-/ の間を含めたものはすべて含みます、という意味です。!-}の場合は、その範囲すべてです。(連結の'-' は、必ず半角です)
この並びは、Unicode の並びです。MS-IME のIMEパッドの文字一覧を出して、上の窓の左側に、シフトJISとか、Unicode と出ているはずですから、Unicode にします。右側の窓には、MSゴシックとか、MS明朝とかします。そして、左隣の窓の「半角形/全角形」を選んで、その範囲を、半角の「-」で結べば、そのすべてを含めます、という意味になります。「0-9」は、全角の0から9まで、ということです。
実は、Wordでも、同じことが出来るのですが、Wordの場合は、必ずしも、そういう方式が良いとは限らないので、こういう方法を選ばなかったのです。
ただ、個々の全角→半角ではない場合は、Replace で個々に置き換えてあげる方法が一番楽かもしれません。
No.2
- 回答日時:
こんにちは。
Word / Excel の VBA は、基本的な部分で共通ですが、多くのケースで
そのままでは動きません。
適当に書いたものですが、下記のコードが参考になれば。。。
余談ですが、電子納品において記号の扱いはどうなのでしょうか?
また、テキストボックス内等のテキストは検索対象外になってますので、
ご注意を。
Sub SampleProc()
' // 正規表現によりマッチした部分の全角・半角置換
Dim reg As Object ' // RegExp
Dim regMatch As Object ' // Match
Dim rTarget As Range
Dim r As Range
Dim s As String
Dim i As Long
Dim vPatterns As Variant
Dim vConverts As Variant
' // Matching Pattern 定義 --------------------------------------
vPatterns = Array("[" & Chr("&HA6") & "-" & Chr("&HDF") & "]+", _
"[0-9]+", _
"[A-z]")
' // Conversion 定義(必ず Pattern と対応させる)-----------------
vConverts = Array(vbWide, _
vbNarrow, _
vbNarrow)
' // 処理対象範囲を取得(定数のセルのみを扱う)
' // 23: All Value Type
Set rTarget = Cells.SpecialCells(xlCellTypeConstants, 23)
If rTarget Is Nothing Then
MsgBox "置換対象はありません", vbInformation
Exit Sub
End If
Application.ScreenUpdating = False
Set reg = CreateObject("VBScript.RegExp")
For Each r In rTarget.Cells
s = r.Value
For i = 0 To UBound(vPatterns)
reg.Pattern = vPatterns(i)
reg.Global = True
For Each regMatch In reg.Execute(s)
s = Replace$(s, regMatch, _
StrConv(regMatch, vConverts(i)))
Next
Next
r.Value = s
Next r
Set reg = Nothing
Set rTarget = Nothing
End Sub
No.1
- 回答日時:
そのままでは使えないと思います。
コードを↓にアップしてみてください。
この回答への補足
了解です。
宜しくお願いします。
Sub 電子納品禁止文字置換()
Dim buf As String
Dim t As Integer
Dim myMsg As String
Dim FChr As String
Dim LChr As String
Selection.HomeKey Unit:=wdStory '文書の先頭に
With Selection.Find
.ClearFormatting
.Text = ""
.Replacement.Text = ""
.MatchFuzzy = False
'半角カタカナ
FChr = Chr("&HA6") '半角ヲ
LChr = Chr("&HDF") '半角゜
While .Execute(FindText:="[" & FChr & "-" & LChr & "]{1,}", _
Wrap:=wdFindContinue, MatchWildcards:=True) = True
Selection.Range.CharacterWidth = wdWidthFullWidth
t = t + 1
Wend
'数字
While .Execute(FindText:="[0-9]{1,}", _
Wrap:=wdFindContinue, MatchWildcards:=True) = True
Selection.Range.CharacterWidth = wdWidthHalfWidth '半角
t = t + 1
Wend
'アルファベット
While .Execute(FindText:="[A-z]{1,}", _
Wrap:=wdFindContinue, MatchWildcards:=True) = True
Selection.Range.CharacterWidth = wdWidthHalfWidth
t = t + 1
Wend
End Sub
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Word(ワード) office 2021へ自分用のクイックアクセスとマクロをコピーしたい 2 2023/03/11 21:15
- Word(ワード) Word 2016のマクロを Word 2021のWordでキー動作させたい 3 2023/04/12 16:14
- Visual Basic(VBA) 特定の文字を簡単な操作で半角スペースに変換するか削除したい 2 2022/11/01 10:35
- Visual Basic(VBA) Excel VBA 教えてください。 VBA初心者です。 詳しい方がいましたら教えてください。 下記 3 2023/04/25 11:22
- その他(プログラミング・Web制作) Pythonでexcelのvbaを作成、実行する方法について Pythonで表の自動集計プログラムを 3 2022/07/09 09:58
- ノートパソコン ノートパソコンでただ単にOfficeのExcelで簡単な表作成やWordで文書作成する程度の使用であ 8 2023/05/13 19:08
- Visual Basic(VBA) VBA アドインについて お詳しい方 ご教授をお願いします。 相談事項 現在以下の対応を実施した所、 1 2022/11/02 16:53
- ノートパソコン 大学のレポート作成専用ノートパソコンとして、VAIO SX12(Core i7、32GB、1TB-S 5 2023/06/10 11:14
- その他(Microsoft Office) Wordを変換してExcelに挿入 2 2022/07/04 23:59
- その他(Microsoft Office) Windows Update 後、Office2019(Word、Excelなど)が消えた 4 2023/01/14 10:28
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
テプラは半角数字が使えますか?
-
半角スペース
-
EXCELの文字列操作で文字数不足...
-
半角の『°(単位の度)』
-
契約書や 公文書・私文書などに...
-
℃の半角表示
-
エクセル関数で文字列の中のス...
-
【VBA】ファイルパスに半角スペ...
-
EXCEL95 VLOOKUP関数で半角と全角
-
半角の×(かける)は?
-
エクセルでひらがな・漢字はそ...
-
Excel2016 検索の窓を常時表示...
-
関数を使わずに一括で全角を半...
-
エクセルで、JIS関数、ASC関数...
-
ギリシャ文字 μの出し方
-
メールアドレスの上ハイフン入...
-
半角の漢字の入力方法
-
ビジネスの文書における、数字...
-
InputBoxの入力値を半角数字の...
-
EXCELで、セル内の半角カ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
テプラは半角数字が使えますか?
-
契約書や 公文書・私文書などに...
-
メールアドレスの上ハイフン入...
-
半角スペース
-
半角の『°(単位の度)』
-
半角の×(かける)は?
-
℃の半角表示
-
EXCELの文字列操作で文字数不足...
-
EXCEL95 VLOOKUP関数で半角と全角
-
関数を使わずに一括で全角を半...
-
エクセル関数で文字列の中のス...
-
【VBA】ファイルパスに半角スペ...
-
半角の漢字の入力方法
-
EXCELで、セル内の半角カ...
-
Excel 文字列の中から数字だけ...
-
ビジネスの文書における、数字...
-
1, (1),(1)の使い分け
-
Excel2016 検索の窓を常時表示...
-
Excel セル内の文字と数字をわ...
-
エクセルで、JIS関数、ASC関数...
おすすめ情報