Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


10004 / 13644 ツリー ←次へ | 前へ→

【24273】全角を半角にするコードについて reiko 05/4/18(月) 12:57 質問[未読]
【24274】Re:全角を半角にするコードについて IROC 05/4/18(月) 13:07 回答[未読]
【24275】Re:全角を半角にするコードについて ウッシ 05/4/18(月) 13:12 回答[未読]
【24276】Re:全角を半角にするコードについて Jaka 05/4/18(月) 13:15 回答[未読]
【24277】Re:全角を半角にするコードについて ウッシ 05/4/18(月) 13:23 回答[未読]
【24324】Re:全角を半角にするコードについて reiko 05/4/19(火) 14:42 お礼[未読]

【24273】全角を半角にするコードについて
質問  reiko  - 05/4/18(月) 12:57 -

引用なし
パスワード
   こんにちは。
過去のログで英、数、カナ文字を半角にするコードを見つけて
使用してみたのですが、このコードを使って文字を入力したセルを
複数選択してクリアすると、型が一致しませんというエラーが発生
してしまいます。
これを発生させない方法はないでしょうか?

コードは以下の通りです。

Private Sub Worksheet_Change(ByVal Target As Range)
 Target.Value=StrConv(Target.Value,vbNarrow)
End Sub

どなたかよろしくお願いします。

【24274】Re:全角を半角にするコードについて
回答  IROC  - 05/4/18(月) 13:07 -

引用なし
パスワード
   >Private Sub Worksheet_Change(ByVal Target As Range)
  if target.count <> 1 then Exit sub

> Target.Value=StrConv(Target.Value,vbNarrow)
>End Sub
>

【24275】Re:全角を半角にするコードについて
回答  ウッシ  - 05/4/18(月) 13:12 -

引用なし
パスワード
   こんにちは

複数セルの変更に対応したコードにしておかないと、クリアでなくてとも同時に値を
コピペしたもエラーになりますよ。

また、Changeイベントでセルを書き換える場合は「EnableEvents = False」にして
最後に「True」に戻して下さい。

Private Sub Worksheet_Change(ByVal Target As Range)
  Dim r As Range
  If WorksheetFunction.CountBlank(Target) = Target.Count Then
    Exit Sub
  End If
  Application.ScreenUpdating = False
  Application.EnableEvents = False
  For Each r In Target
    r.Value = StrConv(r.Value, vbNarrow)
  Next
  Application.EnableEvents = True
  Application.ScreenUpdating = True
End Sub

【24276】Re:全角を半角にするコードについて
回答  Jaka  - 05/4/18(月) 13:15 -

引用なし
パスワード
   対象となるセルが2個以上だと中止する。
 If Target.Count > 1 Then Exit Sub
 Target.Value = StrConv(Target.Value, vbNarrow)

全部のセルを対象にしてまわす。
 Dim Trg As Range
 For Each Trg In Target
   Trg.Value = StrConv(Trg.Value, vbNarrow)
 Next

上記2つの内のどちらかに絞ってください。

また、エリア数も考えると大変ですから、こうした方が...。
IF Target.Areas.Count > 1 Then exit sub

【24277】Re:全角を半角にするコードについて
回答  ウッシ  - 05/4/18(月) 13:23 -

引用なし
パスワード
   こんにちは

選択した範囲が複数エリアに分かれていると「CountBlank」はエラーになりますね。

Private Sub Worksheet_Change(ByVal Target As Range)
  Dim r As Range
  On Error Resume Next
  If Target.SpecialCells(xlCellTypeConstants) Is Nothing Then
    Exit Sub
  End If
  Application.ScreenUpdating = False
  Application.EnableEvents = False
  For Each r In Target
    r.Value = StrConv(r.Value, vbNarrow)
  Next
  Application.EnableEvents = True
  Application.ScreenUpdating = True
End Sub

【24324】Re:全角を半角にするコードについて
お礼  reiko  - 05/4/19(火) 14:42 -

引用なし
パスワード
   皆様たくさんの回答ありがとうございます。
お礼が遅くなり申し訳ありません。
ウッシさんに教えて頂いた方法を試してみたところ
うまく動きました!
本当に助かりました。
またよろしくお願いします。

10004 / 13644 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free