掲示板

Microsoft Excelで、編集を制限したい(数字のみ入力)

スクリーンショット_2025-10-27_124417.png

Excelです(Microsoft Excel for Microsoft 365)。
スプレッドシートの中で、セルごとに、特定の部分の編集を制限したいです(数字のみ入力)。今までは次の手順で設定していました。
*データ>データの入力規則>設定
*日本語入力を無効に設定

今日、同様の作業をしていたら、できませんでした。そこで、ネットで検索したところ、Microsoft Excel for Microsoft 365では、最近の更新で「日本語入力を無効にする」設定(IMEモード設定)がなくなったとか聞きました。

私は今までは、データ入力する際に、A列は日本語オンで、B列はオフで・・・と細かく設定して、いちいちIMEの入力を切り替えなくていいようにしてました。

スクリーンショット_2025-10-27_133952.png

どうしよう・・・と思いました。それで、上の画像のような設定を、数字だけ入力したいセルへ設定してみました。

ですが、日本語入力のオンオフが自動で切り替わるわけでなく、ただエラーメッセージが出るだけでした。

スクリーンショット_2025-10-27_134221.png

再試行を押して、IMEを切り替えて、数字データを入力。タブキーで隣のセルへ移動して、またIMEを切り替えて(今度は日本語オンに)、という作業が必要になりました(これ面倒)。

VBAでIME制御するしか方法はないのでしょうか?


7 件のコメント
1 - 7 / 7
>VBAでIME制御するしか方法はないのでしょうか?

それが良いでしょう。
入力時に IME を自動的にオフにできます。

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
' A1:B10のセルではIMEを無効化
If Not Intersect(Target, Range("A1:B10")) Is Nothing Then
Application.SendKeys ("{F10}") ' IMEオフ
End If
End Sub

例えば、ですけど。

スクリーンショット_2025-10-27_172550.png

>> 電人 さん

ありがとうございます。
やってみたのですが、へんなマークがでます。
ネット等で調べて自分で作ったコードも、似たような黄色のマークがでます。

自分で作ったコードは・・・

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
' A列:日本語入力オン
If Not Intersect(Target, Range("A:A")) Is Nothing Then
Application.SendKeys ("{IMEON}")
' B列:英数字入力オン(日本語オフ)
ElseIf Not Intersect(Target, Range("B:B")) Is Nothing Then
Application.SendKeys ("{IMEOFF}")
End If
End Sub

ただのマネですが・・・
AIに聞いたら、コード作ってくれました。今度は「E列だけ日本語入力オン、それ以外はオフ」とお願いしました。すると・・・
#If VBA7 Then
Private Declare PtrSafe Function ImmGetContext Lib "imm32.dll" (ByVal hwnd As LongPtr) As LongPtr
Private Declare PtrSafe Function ImmSetOpenStatus Lib "imm32.dll" (ByVal hIMC As LongPtr, ByVal fOpen As Long) As Long
Private Declare PtrSafe Function ImmReleaseContext Lib "imm32.dll" (ByVal hwnd As LongPtr, ByVal hIMC As LongPtr) As Long
#Else
Private Declare Function ImmGetContext Lib "imm32.dll" (ByVal hwnd As Long) As Long
Private Declare Function ImmSetOpenStatus Lib "imm32.dll" (ByVal hIMC As Long, ByVal fOpen As Long) As Long
Private Declare Function ImmReleaseContext Lib "imm32.dll" (ByVal hwnd As Long, ByVal hIMC As Long) As Long
#End If

(つづく)
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim hwnd As LongPtr
hwnd = Application.hwnd

' E列(列番号5)のとき:IMEオン
If Not Intersect(Target, Range("E:E")) Is Nothing Then
Call SetIME(hwnd, True)
Else
' その他の列ではIMEオフ
Call SetIME(hwnd, False)
End If
End Sub

Private Sub SetIME(ByVal hwnd As LongPtr, ByVal status As Boolean)
Dim hIMC As LongPtr
hIMC = ImmGetContext(hwnd)
ImmSetOpenStatus hIMC, status
ImmReleaseContext hwnd, hIMC
End Sub

(おわり)
これで、希望のことはできました。ですが、
*最初の二つはなぜ止まったのか。
*3番目のコード長すぎ・・・

スクリーンショット_2025-11-01_121147.png

日本語入力のオン/オフについてです。
みなさんはどうやってますか?

私は今まで、「半角/全角」キーで変換してました。キーボードの左角上にあるキー(「Esc」の下)です。たまたま別件で(下記スレッドで)、Web検索していたら別な方法を見つけました。
●Microsoft Excelで、編集を制限したい(数字のみ入力)
https://king.mineo.jp/reports/321904

ホームポジションを崩さずに変換できるのでとても便利でした。
macの変換方法と同じだそうです。

IMEを右クリック>設定>キーとタッチのカスタマイズ
無変換キーを「IME-オフ」に
変換キーを「IME-オン」に

以上です。すごく便利です。
コメントするには、ログインまたはメンバー登録(無料)が必要です。