[[20180730111506]] 『半角の大文字固定』(ババロア) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『半角の大文字固定』(ババロア)

すごく初歩的なことですがどうやるのか忘れてしまったので、教えていただけると助かります。
現在納品書を作成している所なのですが、商品名、商品番号、個数などを入力して印刷し、商品と一緒に発送するのですが、指定したセル5行目15列目から40列目の入力を半角の大文字英数字で固定したいのです。
入力規則の日本語入力をオフ(英語モード)にして英数字にはできたのですが、他にも影響が出るのであまりShift+Caps Lockで大文字固定はしたくないので指定のセルのみ固定はどのようにやればよかったでしょうか?

< 使用 Excel:Excel2016、使用 OS:Windows10 >


大文字小文字をコントロールする方法は分からないので、VBAで置換する例でも。
'データ入力規則ではIMEオフにして・・
Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Row >= 5 Then
        If Target.Column >= 15 And Target.Column <= 40 Then
            If Target.Count = 1 Then
                Application.EnableEvents = False
                Target.Value = UCase(Target.Value)
                Application.EnableEvents = True
            End If
        End If
    End If
End Sub
'しかしマクロを埋め込まなければならず、さらにCtrl+Zが使えなくなります。
(名無し) 2018/07/30(月) 11:53

Ctrl+Z(元に戻す)が使えるバージョン
環境によっては安定動作しない場合があります。

'データ入力規則ではIMEオフにして・・
Private Sub Worksheet_Change(ByVal Target As Range)

    If Target.Row >= 5 Then
        If Target.Column >= 15 And Target.Column <= 40 Then
            If Target.Count = 1 Then
                Application.EnableEvents = False
                Dim rng As Range
                Set rng = ActiveCell
                Target.Activate
                SendKeys UCase(Target.Value) & "{ENTER}"
                DoEvents
                rng.Activate
                Application.EnableEvents = True
            End If
        End If
    End If
End Sub
(名無し) 2018/07/30(月) 12:10

マクロを使うか、利用する際に大文字化することで、大文字入力でも小文字入力でもOKとするのが好みなのですが、小文字をエラーとするならば、「データの入力規則」だけで実現してはいかがでしょう?

「設定」は「ユーザー設定」として、「数式」は「=EXACT(A1,UPPER(A1))」とします(数式で普通にイコール比較すると、大文字小文字の違いは同じと判定されてしまうため)。 「日本語入力」は「半角英数字」としましょう。
(???) 2018/07/30(月) 13:10


記号を防ぐために 「日本語入力」は「半角英数字」、をお薦めしたのですが、試したところ、これでも記号が通ってしまいました。 「オフ(英語モード)」と変わりませんね。 そこは諦めてもらうという事で…。
(???) 2018/07/30(月) 13:15

お二方回答ありがとうございました。
私個人の技量の問題でうまく動作しませんでした。ですが、今後似たような問題に行きついた際は上記の方法で解決しようと思います。
今回は入力規則でIMFのオフ(英語モード)で入力の際にShiftないしShift+Caps Lockで対処しようと思います。
せっかく回答を頂いたのに設定が上手いこと行かず申し訳ありませんでした。
(ババロア) 2018/07/30(月) 14:01

〆ちゃいましたか。
カーソルが領域内にある間のみCapsLockを切り替える方法が見つかったので参考までに。
これの問題はエクセル以外のアプリにも影響が出る点ですね。

目的のシートのモジュールに貼って下さい。

Option Explicit

Private Declare Function GetKeyState Lib "user32" (ByVal nVirtKey As Long) As Integer
Private Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)
Private Const VK_CAPITAL = &H14
Private Const KEYEVENTF_KEYUP = &H2

Sub Caps_ON()

    If GetKeyState(VK_CAPITAL) = 0 Then
        keybd_event VK_CAPITAL, 0, 0, 0
        keybd_event VK_CAPITAL, 0, KEYEVENTF_KEYUP, 0
    End If
End Sub

Sub Caps_Off()

    If GetKeyState(VK_CAPITAL) = 1 Then
        keybd_event VK_CAPITAL, &H45, 0, 0
        keybd_event VK_CAPITAL, &H45, KEYEVENTF_KEYUP, 0
    End If
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

    If Target.Row >= 5 And Target.Column >= 15 And Target.Column <= 40 Then
        Call Caps_ON
    Else
        Call Caps_Off
    End If
End Sub

(名無し) 2018/07/30(月) 14:04


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.