• ベストアンサー

エクセルで英数字を半角にするマクロ

すでにデータが入力されたエクセルで、全角の英数字を半角にするマクロを探しています。 条件があり、なかなか合う物がなく、質問させて頂きました。 条件は ・アルファベット→半角 ・数字→半角 ・カタカナ→全角 ・伸ばし棒(例えば「データ」の「ー」)→全角 ・同一セルに上書きで変換 下の2点はできたら半角になると嬉しいです。 ・ナカグロ→半角 ・<>→半角 よろしくお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
  • kagakusuki
  • ベストアンサー率51% (2610/5101)
回答No.2

・<>→半角 となっているだけで「=」に関しては何も触れられていないという事は、「=」に関しては、全角文字を半角文字に変換したり、逆に、半角文字を全角文字に変換したりしない方が良いものと考えて宜しいのでしょうか?  又、 ・カタカナ→全角 ・伸ばし棒(例えば「データ」の「ー」)→全角 という事は、もし、半角文字のカタカナや、半角の長音記号があった場合には、それらは全て全角文字に変換しなければならないという事なのでしょうか?  又、 >すでにデータが入力されたエクセルで、 とあるだけで、どのセル、或いはセル範囲に入力されているデータを変換すれば良いのかという事が何も説明されておりませんので、マクロを起動させる前に選択されていたセル範囲内のセルに入力されているデータを、置換を行う対象とするものと考えれば宜しいのでしょうか?  その場合、次の様なVBAのマクロにされると良いと思います。 Sub Macro() Dim i, j, k(6, 1) As Integer k(0, 0) = 32380: k(0, 1) = 32381 k(1, 0) = 32168: k(1, 1) = 32177 k(2, 0) = 32135: k(2, 1) = 32160 k(3, 0) = 32102: k(3, 1) = 32127 k(4, 0) = 32443: k(4, 1) = k(4, 0) k(5, 0) = 31850: k(5, 1) = 31936 k(6, 0) = 32421: k(6, 1) = k(6, 0) For i = 0 To 6 For j = k(i, 0) To k(i, 1) Selection.Replace What:=StrConv(Chr(-j), 4 * (1 - (i > 4))), Replacement:=StrConv(Chr(-j), 8 / (1 - (i > 4))), MatchCase:=True Next j Next i End Sub

luvluna
質問者

お礼

ご回答ありがとうございます。 3点のご指摘ですが、「=」は無変換、「半角カタカナの長音記号」は全角、 「変換する範囲」は表示中のシートになります。 会社にて変換するセルを選択し上記のマクロを試したところ、条件を全てクリアできました! ありがとうございました! 大変助かりました!

その他の回答 (1)

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.1

こんばんは! 一例です。 データはA列の1行目からあるとします。 シートモジュールです。 Sub Sample1() Dim i As Long, k As Long, str As String For i = 1 To Cells(Rows.Count, "A").End(xlUp).Row For k = 1 To Len(Cells(i, "A")) str = Mid(Cells(i, "A"), k, 1) If str Like "[0-9 a-z A-Z ・ < >]" Then Cells(i, "A") = Replace(Cells(i, "A"), str, StrConv(str, vbNarrow)) Else Cells(i, "A") = Replace(Cells(i, "A"), str, StrConv(str, vbWide)) End If Next k Next i End Sub ※ 一文字ずつ舐めるように検索していますので、 そこそこ時間を要するかもしれません。m(_ _)m

luvluna
質問者

お礼

早々のご回答ありがとうございます。 会社にて試してみたのですが、なぜか反映されませんでした。 挿入から標準モジュールを出してそこへ貼り付けたのですが、 エクセルに疎いため、私の使い方が間違っていたのかもしれません>_< ご協力ありがとうございました。