• ベストアンサー

Excel2003 強烈な入力規則

お世話になります。 表題の件でご相談が御座います。 「通常の入力規則」ではなく、「強烈な入力規則」の方法を模索しています。 通常の入力規則では、例え「半角英数」という設定をしていても「全角英数」をコピペで貼り付けたら 全角のまま貼り付けられてしまいますよね? これを「半角でないと貼り付けられない」では手間がかかり困るので、「半角にして張り付けてしまう」ぐらいの 強力な入力規則の方法を探しております。 そんな方法は御座いませんでしょうか? ご存知の方がいらっしゃいましたら ご教示ください。 宜しくお願い致します。

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

  • ベストアンサー
  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.3

> 入力する列は「E列」なので「e2」と変更しましたが 小文字のままだとダメなのでしょうか? やってみてダメだったでしょう? ちゃんと大文字にしてください。 > これを「E列全て」に反映させたいので ”E:E”とすれば良いでしょうか? それもダメです。 Targetのアドレスで判断しているのですから、入力先がE列全体とか広い範囲がアドレスなんてことはないでしょう? そういう場合は列で指定します。 >C、E、L、Qの各列に反映させたいと考えております C、E、L、Qの各列に指定したいなら、Cは3、Eは5、Lは12、Qは17列目ですから以下のようにします。 Private Sub Worksheet_Change(ByVal Target As Range) Select Case Target.Column Case 3, 5, 12, 17 Target.Value = StrConv(Target.Value, vbNarrow) End Select End Sub ついでなので、(というか追加で質問されそうなので)書いておきますが、単一のセルだけでなく、指定例内の一定の範囲に貼り付けられた場合にも対応するんでしたら、以下のようにします。 但し、これだと範囲内の貼り付けられたセル一個ずつ見ていかなければならないので範囲が広いとかなり遅くなってしまいます。 Private Sub Worksheet_Change(ByVal Target As Range) Select Case Target.Column Case 3, 5, 12, 17 If Target.Count = 1 Then Target.Value = StrConv(Target.Value, vbNarrow) Else With Application .ScreenUpdating = False .Calculation = xlCalculationManual For Each Tg In Target Tg.Value = StrConv(Tg.Value, vbNarrow) Next Tg .Calculation = xlCalculationAutomatic .ScreenUpdating = True End With End If End Select End Sub 上記2つのコードはどちらかしかつかえません。 ふたついっしょに同一モジュールに存在するとエラーになりますのでご注意ください。

ookami1969
質問者

お礼

何度も ご回答いただきまして誠にありがとう御座います! 上のコードで完璧でした!! ありがとう御座います。 世話のやけるヤツですみません。 目的は見事に達成されました!! ありがとう御座います。 本当ならポイントを30P差し上げたい所なのですが 20Pしか差し上げられないので 20Pでご了承ください。 何度も ご教示いただきまして本当にありがとう御座いました!!

その他の回答 (2)

  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.2

> シートは1枚しかないので「Sheet1」の所に貼り付ければOKですか? そうです。シートモジュールです。 「出来ません」とは、まったく機能せず、A1セルに全角英数のままで張り付くということでしょうか? 今、自宅のエクセル2003で、回答したコードをそのままコピペしてやってみたところ、直接入力でもコピペでもちゃんと機能して半角になりましたが・・・。(全角しかない文字は当然半角にはなりませんが)

ookami1969
質問者

お礼

再度の ご回答ありがとう御座います!! 出来ました!!! 超感動しました!!! これぞ まさしく求めていた事です!!! 入力する列は「E列」なので「e2」と変更しましたが 小文字のままだとダメなのでしょうか? 大文字に変更したら すさまじく強烈に機能してくれました!!! これを「E列全て」に反映させたいので ”E:E”とすれば良いでしょうか? それとも”E”だけでOKですか? はたまた 無駄に一番下まで反映させずに”E2:E5000”とかにしておいた方が良いでしょうか。 よろしければご教示いただけますでしょうか。 (小文字ではダメなのかと合わせてご教示いただけると大変助かります。。) 宜しくお願い致します。

ookami1969
質問者

補足

たびたび申し訳御座いません。 よく考えたら「複数の列」で ご教示いただいたコードを使用したいので (C、E、L、Qの各列に反映させたいと考えております) その方法も ご教示いただけませんでしょうか。。。 お忙しい中 大変恐縮では御座いますが 何卒 宜しくお願い致します。

  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.1

では、強烈なのを。 入力された値を半角にしてしまいます。 VBAを使うことになります。以下の手順を試してみてください。 これはA1セルを対象にしていますが、他のセルにしたければA1の部分を書き換えてください。 1.シートのタブを右クリックし、「コードの表示」を選択。 2.出てきたVisualBasicEditor(白い部分)に下記のコードをコピペ。 '*****ここから下をコピペ***** Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address(0, 0) <> "A1" Then Exit Sub Target.Value = StrConv(Target.Value, vbNarrow) End Sub '*****ここより上までをコピペ***** 3.AltキーとF11キーを同時に押してワークシートへもどります。

ookami1969
質問者

お礼

ご回答ありがとう御座います。 が、しかし。。。。 出来ませんでした。。。。 直接入力をしても コピペで貼り付けても結果は同様でした。。。 (出来ればコピーした後Enterを押してそのまま貼り付けるか Ctrl + Vで貼り付けると思いますので それ対応が望ましいのですが) シートは1枚しかないので「Sheet1」の所に貼り付ければOKですか? それとも「ThisWorkbook」でしょうか。 はたまた「標準モジュール」でしょうか。 ご教示ください。。。。 宜しくお願い致します。

関連するQ&A