- ベストアンサー
Word作成の置換マクロをEXCELでも使用したい。
Wordで作成した置換マクロをEXCELでも使用する方法を教えてください。 WordのマクロをエクスポートしてEXCELでインポートしましたが うまく動きません。 同じofficeなのに対応はしていないのでしょうか??
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは。 #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
その他の回答 (4)
- Wendy02
- ベストアンサー率57% (3570/6232)
こんばんは。 先ほど、同様のマクロ(記号も含めたもの)を書きましたので、 「QNo.4086577 EXCEL 「ASC」関数 英数字の全角を半角に変換するよい方法があれば教えてください 」 http://oshiete1.goo.ne.jp/qa4086577.html こちらのほうも、一読ください。
- Wendy02
- ベストアンサー率57% (3570/6232)
こんにちは。 >記号は半角にしたいです。 >どの行と置き換えればいいですか?? 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 で個々に置き換えてあげる方法が一番楽かもしれません。
- KenKen_SP
- ベストアンサー率62% (785/1258)
こんにちは。 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
- marbin
- ベストアンサー率27% (636/2290)
そのままでは使えないと思います。 コードを↓にアップしてみてください。
補足
了解です。 宜しくお願いします。 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
お礼
いつもすいません。。 (_ _(--;(_ _(--; ペコペコ 記号は半角にしたいです。 どの行と置き換えればいいですか??