「教えて!ピックアップ」リリース!

エクセルシートの全角の英数字を一括で半角に変換するVBAをNETで見つけたのですが、このVBAを他のエクセルでも使えるようにしようと思い、下記のコードを「個人用Book」にコピペしたのですが、処理途中でハングアップしてしまいます。
どこを修正すれば良いのか教えてください。


'■Activeブックのすべてのシートの「全角カタカナ」を「半角カタカナ」にする。
Public Sub Call_value_half_to_full()
Dim ws As Worksheet
Dim rng As Range

For Each ws In ActiveWorkbook.Worksheets
If ws.Visible = True Then
For Each rng In ActiveSheet.UsedRange
'■全角カタカナを半角カタカナにする 全角カタカナに変換したい場合はvbWide
rng.Value = StrConv(rng.Value, vbNarrow)
Next
End If
Next ws
End Sub

A 回答 (4件)

こんにちは。



For Each rng In ActiveSheet.UsedRange



For Each rng In ws.UsedRange

がまずポイント。

問題点は、記号やカタカナなども全て半角になってしまうこと。

よくあるのは英数のみ半角化でしょうか。
その場合は、正規表現を使う必要があります。

ご提示のソースで、UsedRange はシート内の使用済みセル全てを対象としますから、データがそれなりにあるシートだと時間はかかるでしょうねぇ、、

時間短縮には工夫か必要で、1度配列にセルの内容を読み込んで、その配列内を同様に半角化処理、ついでセルに書き戻す様にします。
    • good
    • 0
この回答へのお礼

ご回答ありがとございます。

ご回答の
>For Each rng In ws.UsedRange
を試してみたのですが、最初はうまく行くのですが、何度か違うファイルで試すとエラーになってしまいます。

他にどこか修正すべき箇所があるのでしょうか?
カタカナも半角に統一したいのでこのコードが使えるとありがたいのですが。

お礼日時:2022/07/08 14:47

エラーの内容を記載して貰えると回答付きやすいですよ


恐らくパスワード保護関連のエラーではないですか?
    • good
    • 0

書き忘れました


不特定ブック、シートを変更するのだから、
Application.EnableEvents などの抑止も必要かと・・
    • good
    • 1

こんにちは


Public Sub Call_value_half_to_full() は 
どのように呼んでいる(実行している)のでしょう
ActiveWorkbookは1つです
プロシージャに引数などを加えて、明示的にブックを特定するなどしてみては?
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング