@@sum3311 お世話になっています。 試してみた所、無事望むような動きになりました。ありがとうございます。 ただ Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Target.Address = "$B$3" Then ActiveSheet.Shapes("ボタン").Visible = True Else ActiveSheet.Shapes("ボタン").Visible = False End If のボタンの表示非表示がどのように書き換えればいいか分かりません。 自分でも調べてみたのですがいまいちうまくいかなかったのでよろしければ回答いただけるとありがたいです。
お試しいただけて良かったです。 SelectionChangeの部分は、ボタンを表示したままで良ければ プロシージャーごと削除してしまえば簡単ですが 対象のセルを選択したときだけそのボタンを表示したい、であれば こちらでできると思います。 お試しくださいね。 Private Sub Worksheet_SelectionChange(ByVal Target As Range) Dim shp As Shape Dim w As String w = Replace(Target.Address, "$", "") '$を除いて「B2」や「B7」にしています For Each shp In ActiveSheet.Shapes If shp.Name = "ボタン" & w Then '「ボタン」+選択されたセルの場合は表示します shp.Visible = True ElseIf Left(shp.Name, 3) = "ボタン" Then 'それ以外の「ボタン」で始まる画像は非表示です shp.Visible = False End If Next End Sub
めちゃめちゃ参考になりました!
これで仕事がもっと効率よくできるようになります!
ありがとうございます!
コメントありがとうございます!
お役に立てて良かったです。
動画ありがとうござます。
作ったのですが下の行にオートフィル出来得ないでしょうかq
リストの元になるセルが増えたらリストボックスも自動的に増える、という事でしょうか?
もしそうでしたら、名前の定義でセル範囲を指定することでできます。
今回の例の場合で、シート名がSheet1でしたら
=OFFSET(Sheet1!$E$3,0,0,COUNTA(Sheet1!$E:$E)-1)
と名前の定義で登録して、その名前をリストボックスのListFillRangeに入力すると、元のセル範囲に連動してリストが拡張します。
動画とても参考になりました。
質問なのですが今回の様なプルダウンリストを複数のセルに適応しようと思った場合、都度動画手順のように追加したいセルをVBA内で選択して増やしていくしかないでしょうか。
素人の為解決方法が思いつきません。もしよろしかったら回答お願いします。
コメントありがとうございます。
色々試してみましたら、こんな感じでできそうでした。
1.プルダウンのボタンの画像名を「ボタンB2」「ボタンB7」など、「ボタン」+対象のセル名にする
2.「リスト表示非表示」プロシージャーの先頭に以下を追加
Dim 対象セル As String
対象セル = Replace(Application.Caller, "ボタン", "") '(a)
ActiveSheet.Shapes("リスト").Top = Range(対象セル).Top + Range(対象セル).Height '(b)
Range("A1").Value = 対象セル '(c)
3.「セルの値表示」プロシージャーの
Range("B2").Value = セルの値
を
Range(Range("A1").Value).Value = セルの値
に変更
その他、Range("B2")となっているところを Range(Range("A1").Value) に変更
(a) Application.CallerでVBAの呼び出し元のオブジェクト名を取得できますので、
そのオブジェクト名にB2、B7など対象のセル名を仕込んでおく所がポイントです。
(b) そしてActiveSheet.Shapes("リスト").Topでリストの位置を対象のセルの下に移動させています。
(c) 対象のセル名をA1セルに保存しておき、以降の処理でそちらをもとにセルの値を変えています。
わかりやすくA1にしましたが、実際にするときは遠くの非表示セルなどにしてください。
コメントが長くならないように縦方向だけ対応してみましたが、
リストのLeftなどを指定すると、横方向へのコピーにも対応できそうです。
リストのListFillRangeを変えてリストの内容を変えることもできますが、
若干動作が不安定でしたので、リストを変えるときは別のリストボックスを用意したほうが良いかもしれません。
・・・かえって面倒になってしまったかもしれませんが、
適応させるセルがたくさんの場合は効率が良いかもしれませんので、お試しくださいね。
@@sum3311 お世話になっています。
試してみた所、無事望むような動きになりました。ありがとうございます。
ただ
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Address = "$B$3" Then
ActiveSheet.Shapes("ボタン").Visible = True
Else
ActiveSheet.Shapes("ボタン").Visible = False
End If
のボタンの表示非表示がどのように書き換えればいいか分かりません。
自分でも調べてみたのですがいまいちうまくいかなかったのでよろしければ回答いただけるとありがたいです。
お試しいただけて良かったです。
SelectionChangeの部分は、ボタンを表示したままで良ければ
プロシージャーごと削除してしまえば簡単ですが
対象のセルを選択したときだけそのボタンを表示したい、であれば
こちらでできると思います。
お試しくださいね。
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim shp As Shape
Dim w As String
w = Replace(Target.Address, "$", "") '$を除いて「B2」や「B7」にしています
For Each shp In ActiveSheet.Shapes
If shp.Name = "ボタン" & w Then
'「ボタン」+選択されたセルの場合は表示します
shp.Visible = True
ElseIf Left(shp.Name, 3) = "ボタン" Then
'それ以外の「ボタン」で始まる画像は非表示です
shp.Visible = False
End If
Next
End Sub
こんばんわ。こちら無料エクセルでは出来ないですよね?
無料版のExcelはマクロが使えなかったと思いますので
残念ながら今回の方法では出来ないと思います・・・