プロが教えるわが家の防犯対策術!

Excelで、あるセルに入力規則「リスト」を設定しています。
(aaa,bbb,cccが選択できるものとします。)

aaaが選択されている状態から、bbbに選択を変えたいとき、
キーボードから、これらの選択を変える場合、
・Alt+↓
・↓
・Enter
の手順で変更できることを知りました。

この操作を、VBAを使って、ワンクリックでできないか模索中です。
図形を挿入し、そこにマクロを登録して実行を試していますが、
Application.SendKeys ("%({Down}){Down}{Enter}"), True
としてもうまくいきません。

アドバイスを頂けると幸いです。
よろしくお願いします。

主な使用環境
Windows7,Office Professional Plus 2010

A 回答 (1件)

こんばんは。



私の知っている限りでは、SendKeys は使いませんね。
SendKeys は、位置が定まらないからです。子Window を取るとか、セル位置情報で、SendKeys を送ろうと考える人もいるとは思いますが、sどうも、位置決めができないようで、私は、そういう方法は見たことがありません。もしかしたら、UWSC なら可能なのかもしれません。

予め値がわかっている場合は、バカにされたと思うかもしれませんが、直接、セルに
 Range("A1").Value = "bbb"
としてしてしまいます。

そうではないという時には、以下のようなスタイルになります。
Cells(1) としているのは、入力規則のセルが、複数ある時があるからです。他の方法もあるのかもしれませんが、私が覚えているのはこのような古典的スタイルです。一応、常識的なエラー処置はしたつもりが、一部余計なものもあるかもしれません。

Const SEL As Long = 1 '選択番号
この部分をワークシート上などに置いてもよいと思います。

'//
Sub TestMacro1()
 Dim rngCnd As Variant
 Dim myList As Variant
 Const SEL As Long = 1 '選択番号
 On Error Resume Next
 Set rngCnd = ActiveCell.SpecialCells(xlCellTypeAllValidation).Cells(1)
 If Err <> 0 Then MsgBox "入力規則セルが見つかりません。", vbExclamation: Exit Sub
 On Error GoTo 0
 If TypeName(rngCnd) = "Range" Then
  myList = Mid(rngCnd.Validation.Formula1, 2)
 End If
 If Range(myList).Rows.Count >= SEL And SEL > 0 Then
  rngCnd.Value = Range(myList).Cells(SEL).Value
  Else
  MsgBox "その選択は出来ません。", vbExclamation
 End If
End Sub
    • good
    • 0
この回答へのお礼

ご回答ありがとうございました。
エラー回避まで作成頂き、助かります。
>予め値がわかってるxxx
のコメントを参照し、リストに用いている、ワークシート内のリスト範囲から
直接値を入れる方法で解決しました。

お礼日時:2017/01/08 22:56

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!