プロが教える店舗&オフィスのセキュリティ対策術

業務効率化を目指し、エクセルでよく使用する文章、単語をサジェスト機能のようなもので、簡単に入力できるようにしようとしています。

VBA、マクロを使用して解決を試みておりますが、無知なもので、以下のふたつのサイト様を参考に作成させていただきました。

1.Google 検索の「サジェスト機能」を, Excel のシート上にVBAで作る (セルの内容に応じて入力規則を動的に変える方法)
http://language-and-engineering.hatenablog.jp/en …

2.エクセルでグーグルサジェストっぽい入力をする
http://suugleblog.blogspot.jp/2012/02/blog-post_ …

2.のサイト様のStep4を、以下のように変更しました。

「Private Sub Worksheet_Change(ByVal target As Range)

'辞書(住所の候補)を設定する:郵便番号データから候補表示
'DicSheetNameは辞書のシート名、
'DicRangeAddressは辞書の範囲を指定する
'
Const DicSheetName = "注釈リスト" ' ="郵便番号データ"を"注釈リスト"へ変更した
Const DicRangeAddress = "B4:B600" '="A:A"を"B4:B600"へ変更した

If target.Count > 1 Then
'選択セルが2つ以上は無効
Set target = Nothing
Exit Sub

ElseIf Application.Intersect(target, Range("B21:P21,B22:P22,B23:P23,B24:P24,B25:P25,B26:P26,B27:P27,B28:P28,B29:P29,B30:P30,B31:P31,B32:P32,B33:P33,B34:P34,B35:P35,B36:P36,B37:P37,B38:P38,B39:P39")) Is Nothing Then '("A4")を("B21:P21~B39:P39")へ変更
'※入力セル以外の変更では無効(targetと共有するセル範囲がない)
Exit Sub

Else
'入力されたアドレスが住所入力のアドレスの場合に候補を表示
Call 入力候補表示(DicSheetName, DicRangeAddress, target)
End If

End Sub」

添付画像B22:P22に「重」と打つと、サジェスト機能の様に、入力候補が出てくるようにすることができました。
この操作を行いたい行がB21:P21からB39:P39まではこの機能が適用されるようにすることができましたが、範囲をB79:P79まで増やすと、反映されなくなってしまいました。

フォーマットは変更することができないため(行数を減らすなど)、VBA、マクロでどうにか解決したく、試行錯誤を繰り返しておりますが、私の知識、力ではどうにもうまくいきません。
どのようにすれば解決できるでしょうか。
皆様お力をお貸しいただきたいです。宜しくお願いいたします。反

「エクセルでサジェスト機能っぽいこと。セル」の質問画像

A 回答 (1件)

試したわけではないのですが、範囲をダラダラ書き込んだため命令文が文字数オーバーしたのでは?


「ElseIf Application.Intersect(Target, Range("B21:P79")) Is Nothing Then」のようにすればよいのでは?
    • good
    • 0
この回答へのお礼

お礼が遅くなり申し訳ございません。

アドバイス頂いたように ("B21:P79") と入力し直すと、解決できました。
複数のセルを結合したものが何行もあるので、この方法はできないと勝手に思い込み、
試しておりませんでした。
助かりました。ありがとうございました。

お礼日時:2017/10/25 12:30

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

このQ&Aを見た人はこんなQ&Aも見ています