SSブログ

エクセル小僧:全角英数字を半角英数字に変換(正規表現) [コンピューター]

正規表現を使用して、記号を含む全角英数字を半角英数字に変換するマクロを作成しました。

ほとんどパクリですが。。。

【目的】
・『今年』という名前のセルに全角数字で年の数字が入っている。
・年は平成。西暦2016年なら、『28』。
・これを半角数字に変換して、今年かどうか判定したい。

・マクロ2は、引数の文字列中の全角英数字を半角英数字に変換するマクロです。
・マクロ1は、全角の年(例:28)を『今年』のセルから取ってきて、マクロ2で半角数字(例:28)に変換し、今年かどうか判定します。

【マクロ1】

Sub Sample1()
  '【変数】
  Dim myYear1 As Integer ' 年
  ' 【実行コード】
  ' 『今年』セルの平成XX年(例:28)を半角数字(28)に変換後、0を足して数値化
  myYear1 = zen2han(Range("今年").Value) + 0
  ' Dateから得られる西暦年の今年(例:2016)から1988を引いて平成XX年(28)にし、
  ' myYear1と一致しない場合は、今年のファイルでないことを警告
  If myYear1 <> (Year(Date) - 1988) Then MsgBox ("今年のファイルじゃない!(平成" & Range("今年").Value & "年)")
End Sub

【マクロ2】

Function zen2han(ByVal ZenSuu1 As String) As String
  '【機能】文字列中の全角英数字を半角英数字に変換(28→28)
  '【引数】
  ' ZenSuu1 :全角数字(28)
  '【変数】
  Dim i As Integer
  Dim myStr As String ' 文字列
  Dim re1 As Object ' 正規表現オブジェクト
  Dim Match, Matches As Object ' パターンにマッチした文字
  '【コード】
  Set re1 = CreateObject("VBScript.RegExp") ' 正規表現オブジェクトを生成
  With re1
   .Pattern = "[\uFF01-\uFF5E]+" 'パターン:unicodeの『!』(FF01)から『~』(FF5E)までの全角文字、1文字以上
   .Global = True ' 文字列全体を検索
  End With
  myStr = ZenSuu1 ' 引数の文字列を代入
  If Len(myStr) > 0 Then ' 1文字以上なら実行
    Set Matches = re1.Execute(myStr) ' マッチングを実行。結果をMatchesコレクションとして返す
    ' マッチしたすべての全角文字列(Matchesコレクション中のMatchオブジェクト)を半角文字列に置換
    For Each Match In Matches
      ' Replace(A, B, C) : Aの文字列の中から、Bの文字列を検索し、Cの文字列で置き換える
      ' StrConv(A, vbNarrow) : Aの文字列を半角文字列に変換
      myStr = Replace(myStr, Match.Value, _
                      StrConv(Match.Value, vbNarrow))
    Next Match
    zen2han = myStr ' マッチした文字列を半角に変換した文字列を返す
   Else
     ' 引数の文字列が無い場合
     MsgBox ("文字列がありません。")
     zen2han = "####"
   End If
End Function
ヤバイぜ!(10)  コメント(2)  トラックバック(0) 
共通テーマ:パソコン・インターネット

ヤバイぜ! 10

コメント 2

cheese999

ヤバイぜ! ありがとうございます[__猫]

マクロ1は引数がありませんでしたね。
誤記修正しました。(^_0)ノ
by cheese999 (2016-05-03 21:40) 

cheese999

説明を追加しました。(^_0)ノ
by cheese999 (2016-05-05 20:52) 

コメントを書く

お名前:[必須]
URL:
コメント:
画像認証:
下の画像に表示されている文字(英大文字の「オー」、英小文字の「ユー」、アラビア数字の「ハチ」、アラビア数字の「イチ」、アラビア数字の「ニ」)を入力してください。

Facebook コメント

トラックバック 0

トラックバックの受付は締め切りました

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。