- 締切済み
CapsLockを特定の部分だけオンにする
EXCELのシートで特定のシートだけ、セルだけCapsLockをオンにするということはできますか? それ以外のセルやシートなどではCapsLockをオフにするということはできますか?
- みんなの回答 (5)
- 専門家の回答
みんなの回答
- harukabcde
- ベストアンサー率15% (94/610)
#1 マクロを使うとセキュリティ警告が出てしまうので、使いたくないのです。。。 ---使いたくない意味が分かりません。 セキュリティレベルを下げるのも少し不安に感じています。 ---何が不安なのかが分かりません。 マクロでしか制御できませんよ。 もし、小文字を大文字にしたいだけなら、 別セルに入力し、表示したいセルに UPPER関数で大文字にしたら如何ですか。 (アルファベットの問題だけですよね?) A1に大文字で表示したい場合 で、入力をZ1にするとき A1に =upper(z1) と入力し、 A1には、CapsLock offで入力
- Wendy02
- ベストアンサー率57% (3570/6232)
>やはりマクロを使うしかないのでしょうか? >できればマクロを使いたくないので。。。 >マクロを使うとセキュリティ警告が出てしまうので、使いたくないのです。。。セキュリティレベルを下げるのも少し不安に感じています。 私の知る範囲では、VBAを使う以外には、方法はないと思います。 Officeのバージョンがいくつかは分かりませんが、「セキュリティの警告」が出る出ないというのは、あまり意味がないと思います。そのVBAが問題を起こすか起こさないかは、本来は、そのコードの内容の問題で、「警告」が出たから、問題だということではありません。それに、ダイヤログを出さない方法もいくつか用意されています。一応、セキュリティ「中」で出さないレベルに収めるなら、「個人認証」という方法があります。 悪意のあるコードなのか、そうでないのかは、VBAがある程度読める人でなければ分かりません。悪意のないコードでも、問題が発生することがあります。Officeで、VBAを使わなくて済むなら、それに越したことはありません。Officeのバージョンやその注意書きを確認し、作者不明のVBAに手を出さなければ、ふつうは問題ないはずなのです。もし、心配ならアンチウィルスで、Officeをプロテクトするのが良いのであって、「セキュリティの警告」は、単なるマクロ付きだという「警告」であって、それは何の阻止にもなりません。それに、プログラムに詳しい人が、その気になれば、そのような警告を出さないようにすることは、簡単なことだからです。 VBAをもう少し勉強なさってください。
お礼
アドバイスありがとうございます。 私自身マクロについては初心者なものですから、このような質問が出てきたのかもしれません。 もう少し勉強します。。。
- Wendy02
- ベストアンサー率57% (3570/6232)
API関数は、間違って使うと、ハングしますので、注意してお使いください。 これは、シートモジュールに設置してください。 参考: http://support.microsoft.com/kb/177674/ja 'Declare Type for Calling API Private Type OSVERSIONINFO dwOSVersionInfoSize As Long dwMajorVersion As Long dwMinorVersion As Long dwBuildNumber As Long dwPlatformId As Long szCSDVersion As String * 128 End Type 'Win32 API Declare Private Declare Function GetVersionEx Lib "kernel32" _ Alias "GetVersionExA" (lpVersionInformation As OSVERSIONINFO) As Long Private Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, _ ByVal bScan As Byte, _ ByVal dwFlags As Long, _ ByVal dwExtraInfo As Long) Private Declare Function GetKeyboardState Lib "user32" _ (pbKeyState As Byte) As Long Private Declare Function SetKeyboardState Lib "user32" _ (lppbKeyState As Byte) As Long 'Constant Const VK_NUMLOCK = &H90 Const VK_SCROLL = &H91 Const VK_CAPITAL = &H14 Const KEYEVENTF_EXTENDEDKEY = &H1 Const KEYEVENTF_KEYUP = &H2 Const VER_PLATFORM_WIN32_NT = 2 Const VER_PLATFORM_WIN32_WINDOWS = 1 Private Sub Worksheet_Activate() Dim OSVersion As OSVERSIONINFO Dim CapsLockState As Boolean OSVersion.dwOSVersionInfoSize = Len(OSVersion) GetVersionEx OSVersion Dim keys(0 To 255) As Byte GetKeyboardState keys(0) CapsLockState = keys(VK_CAPITAL) 'シートアクティベート 'CapsLock: Off to On If CapsLockState <> True Then 'Win95/98 If OSVersion.dwPlatformId = VER_PLATFORM_WIN32_WINDOWS Then keys(VK_CAPITAL) = 1 SetKeyboardState keys(0) 'WinNT ElseIf OSVersion.dwPlatformId = VER_PLATFORM_WIN32_NT Then 'Simulate Key Press keybd_event VK_CAPITAL, &H45, KEYEVENTF_EXTENDEDKEY Or _ 0, 0 'Simulate Key Release keybd_event VK_CAPITAL, &H45, KEYEVENTF_EXTENDEDKEY Or _ KEYEVENTF_KEYUP, 0 End If End If End Sub Private Sub Worksheet_Deactivate() Dim OSVersion As OSVERSIONINFO Dim CapsLockState As Boolean OSVersion.dwOSVersionInfoSize = Len(OSVersion) GetVersionEx OSVersion Dim keys(0 To 255) As Byte GetKeyboardState keys(0) CapsLockState = keys(VK_CAPITAL) 'シート・ディアクティベート 'CapsLock: On to Off If CapsLockState Then 'Win95/98 If OSVersion.dwPlatformId = VER_PLATFORM_WIN32_WINDOWS Then keys(VK_CAPITAL) = 0 SetKeyboardState keys(0) 'WinNT ElseIf OSVersion.dwPlatformId = VER_PLATFORM_WIN32_NT Then 'Simulate Key Press keybd_event VK_CAPITAL, &H45, KEYEVENTF_EXTENDEDKEY Or 0, 0 'Simulate Key Release keybd_event VK_CAPITAL, &H45, KEYEVENTF_EXTENDEDKEY _ Or KEYEVENTF_KEYUP, 0 End If End If End Sub
お礼
ありがとうございます 参考にさせていただきます。
- matsu_jun
- ベストアンサー率55% (146/265)
Excelのマクロは使えますでしょうか? 以下の方法をお試しください。 1) 目的のブックを開きます。 2) Alt + F11キーを押して、Microsoft Visual Basicを開きます。 3) 開いたMicrosoft Visual Basicの左側、「プロジェクト-VBAProject」に シート名が何かエクスプローラーのようになっていると思いますが、 その中の目的のシート名が書かれている部分をダブルクリックします。 右側が灰色から白くなり、文字を入力することができるようになります。 4) 目的に応じて、下のA)、B)いずれかをコピーして貼り付けてください。 A) 特定のシートだけCapsLockをオンしたい場合 'ここから-------------------------------------------------------------------------- Private Declare Function GetKeyboardState Lib "User32" (pbKeyState As Byte) As Long Private Keys(0 To 255) As Byte Private Sub Worksheet_Activate() GetKeyboardState Keys(0) If CBool(Keys(&H14)) = False Then SendKeys "+{CAPSLOCK}" Application.SendKeys "+{CAPSLOCK}" End If End Sub Private Sub Worksheet_Deactivate() GetKeyboardState Keys(0) If CBool(Keys(&H14)) = True Then SendKeys "+{CAPSLOCK}" Application.SendKeys "+{CAPSLOCK}" End If End Sub 'ここまで-------------------------------------------------------------------------- B) 特定のセルだけCapsLockをオンしたい場合(下の例ではセルA1になっています) 'ここから-------------------------------------------------------------------------- Private Declare Function GetKeyboardState Lib "User32" (pbKeyState As Byte) As Long Private Keys(0 To 255) As Byte Private Sub Worksheet_SelectionChange(ByVal Target As Range) Dim FCaps As Boolean FCaps = True '下の行にCapsLockをしたいセルA1が指定されています。 '変更したい時は、絶対参照($付き)で、かつ列名は大文字で指定します。 If Target.Address = "$A$1" Then FCaps = False GetKeyboardState Keys(0) If CBool(Keys(&H14)) = FCaps Then SendKeys "+{CAPSLOCK}" Application.SendKeys "+{CAPSLOCK}" End If End Sub 'ここまで-------------------------------------------------------------------------- 5) Microsoft Visual Basicを終了します。 なおソース中にも書いてありますが、Bの例で別のセルを指定したい場合は、 絶対参照かつ大文字で書いてください。例えばセルB10を指定したい場合は、 If Target.Address = "$B$10" とします。 複数のセルを指定したい場合は、上の行を必要なだけ追記してください。 If Target.Address = "$A$1" Then FCaps = False If Target.Address = "$B$10" Then FCaps = False If Target.Address = "$C$3" Then FCaps = False と3行続けて書けば、A1とB10とC3にマウスを合わせた時にCapsLockがオンします。 当然A1に合わせてからB10に合わせ直してもCapsLockはオンのままですよ。
お礼
ありがとうございます。 やはりマクロを使うしかないのでしょうか? できればマクロを使いたくないので。。。
- harukabcde
- ベストアンサー率15% (94/610)
マクロでCapsLock、NumLockキーの切り替える方法 http://www.keep-on.com/excelyou/2003lng4/200310/03100342.txt これが参考になりませんか
お礼
ありがとうございます。 マクロを使うとセキュリティ警告が出てしまうので、使いたくないのです。。。セキュリティレベルを下げるのも少し不安に感じています。
お礼
たびたびありがとうございます。 マクロをもう少し勉強しないとダメなようですね。 初心者には無理な課題だったようです。