[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『入力規則 ドロップダウンリストの幅変更』(MAKO)
いつも皆様に大変お世話になっております。
印刷時のスペースの問題で、縦に[A26:A37]でセル結合して(入力が横文字なもので)、 書式設定の配置-文字列を90度にし、そこに入力規則のドロップダウンリストを適用 させたいのですが、 A列は列幅2ポイントしかなく、ドロップダウンリストの幅が狭いために、選択ができません。
全文検索にて、同様の質問&回答をいろいろ見せていただき、幅を広げることはVBAで可能のようですが、 [[20050223121323]] 『ドロップダウンリストの幅を変更』(maru) のなかで 川野鮎太郎さんが提示されてたコード、
Private Sub Worksheet_SelectionChange(ByVal Target As Range) Dim s As Shape Dim BtnWidth As Single Dim MyName As String
On Error Resume Next MyName = ActiveSheet.Shapes(1).Name With ActiveCell Select Case (.Row >= 26) * (.Row <= 37) * (.Column = 1) Case True If .Validation.Type = xlValidateList Then Set s = ActiveSheet.Shapes(MyName) BtnWidth = s.Width - .Width s.Width = 150 s.Left = .Left + .Width - s.Width + BtnWidth Set s = Nothing '自動表示をしたくない場合はSendKeys "%{down}" を削除してください。 SendKeys "%{down}" End If End Select End With End Sub
を入れたのですが、リストの幅は変わりません。
しかし、セルを選択すると、リストが自動表示されますし、よくよく見ると、 なぜか同じ書式上の オートシェイプで貼り付けた「○」の横幅が1.5倍になってました! どなたか、原因のわかる方おられますでしょうか?
こちらでMAKOさんの仰る現象が再現できないので原因が分かりません。 もしも差し支えなければ、そのファイルを見せていただければありがたいんですけどね。 もちろん差しさわりのあるデータは削除したファイルでかまいません。 データのアップは、以下のようなことで可能です。 以前に紹介したものですので、現在は若干変更になってるかもしれません。 http://skyblue123.hp.infoseek.co.jp/Excel/YahooBc.html
(川野鮎太郎)
A26がアクティブに成っている状態で、選択している なんて事では無いのですかね?
一度別のセルを選択した後、再度A26を選択してみても 「▼」はB列に出るのでしょうか?
(HANA)
1.新規ブックを開く 2.[挿入]→[図]→[オートシェイプ]で丸いやつを貼り付ける 3.上のマクロをコピペする 4.セルA26を選択 こんな感じで再現できると思います。
>MyName = ActiveSheet.Shapes(1).Name このあたりがポイントなのかな? (アカギ)
すいません、返事が遅くなりました。みなさんコメントありがとうございます。
作成中の書式自体は会社に置いて来てしまったのですが、 アカギさんからのコメントのように、家のPCでテストしてみたところ、 オートシェイプの図形が貼り付けてある場合のみ、最初のコメントのような現象が起きるようです。
図形をはずすと、ちゃんとリストの幅が広がることも判明しました。
実は、川野鮎太郎さんのコードにたどり着く前に
[[20040211174043]]『簡易リストボックスの幅を拡大』(おれおれ) のなかで、りなさんの紹介されているコードを試してみたのですが、
イミディエイトウィンドウで?activesheet.shapes(1).nameを試してみたら、 「Drop Down」がでずに、その時はたしか「Line 1」(Excel 2003)とかしか出なかったので、 (今から考えると、他にもオートシェイプで線を張り付けていたのでそのことだったのですね) 他をいろいろ探していて、川野鮎太郎さんのコードにたどり着いた次第です。
Excel 2007だと、同様にイミディエイトウィンドウで調べると、 貼り付けた順?に認識されるのか「直線コネクタ 4」とか「円/楕円 5」とか出ます。
オートシェイプの図形を張り付けていても、ドロップダウンリストを認識させて、リストの幅だけ広げる 方法はあるのでしょうか? みなさんお知恵を貸して下さい。
(MAKO)
Shapeのほうから攻めていって見るのはどうでしょう。
'------ Private Sub Worksheet_SelectionChange(ByVal Target As Range) Dim MyShape As Shape If Target.Address(0, 0) = "A26:A37" Then For Each MyShape In ActiveSheet.Shapes With MyShape If .Top = Target.Top And .Left = Target.Left Then .Width = 150 End If End With Next End If End Sub '------
(HANA)
HANAさん、いつもありがとうございます。
ご提示いただいたコードにて解決しました!! 今後の参考までに、お伺いしたいのですが、
今回作成の書式については、対象になる入力規則を入れたセル(セル幅の狭い)は、 2箇所だけだったので、ご提示のコードをいろいろ試して、
If Target.Address(0, 0) = "A26:A37" Then For Each MyShape In ActiveSheet.Shapes With MyShape If .Top = Target.Top And .Left = Target.Left Then .Width = 150 End If End With Next End If
の部分を、アドレスを変えて2回繰り返して入れて、事なきを得たのですが、 対象のセルが多数にわたるとき、もっと簡単な方法はありますでしょうか?
(MAKO)
こんなので大丈夫ですか?
'------ Private Sub Worksheet_SelectionChange(ByVal Target As Range) Dim MyShape As Shape, Rng As String, MyRng Rng = "A26:A37,M13:M24" '←★ここに範囲を追加 For Each MyRng In Split(Rng, ",") If Target.Address(0, 0) = MyRng Then For Each MyShape In ActiveSheet.Shapes With MyShape If .Top = Target.Top And .Left = Target.Left Then .Width = 150 Exit Sub '一つ変更したら終了 End If End With Next End If Next End Sub '------
(HANA)
HANAさん、ありがとうございました!! 今後とも、ご指導よろしくお願いいたします!
(MAKO)
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.