- ベストアンサー
エクセル、マクロ詳しい方に質問
例えばA1のセルに数字の1を入れたら そのA1セルの文字の真上に (透過処理を行っている)オートシェイプを表示させることは可能でしょうか なおかつ、表示されたオートシェイプに邪魔されることなく 数字を変更させることができるようになりますか また数字を入れた後、その数字を消したら 表示されたオートシェイプも一緒に消えるようにしたいのです これは出来るがこれは出来ないなどでもいいです 計算式やマクロ何を使ってもいいですが、 できるだけ単純なものがよいです 難しいと思いますがお願いします
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
結論から言うと・・ > A1のセルに数字の1を入れたらそのA1セルの文字の真上に > (透過処理を行っている)オートシェイプを表示させる →可能です。 (私なら)マクロを使います。 > 表示されたオートシェイプに邪魔されることなく > 数字を変更させることができるように →オートシェイプの形状・大きさに依りますが、基本的には可能です 普通にオートシェイプを置いた時のことを考えて頂ければわかると思いますが、 背景が透明のオートシェイプの場合、その線以外の場所をクリックすると、 その下のセルを選択できます。 マクロでオートシェイプを置こうと、それは変わりません。 > その数字を消したら > 表示されたオートシェイプも一緒に消えるように →可能です。 (私なら)マクロを使います。 そんなわけでマクロ(VBA・VBE)の使い方は別途お調べいただくとして、 該当シートのモジュールに以下を貼ります。 Private Sub Worksheet_Change(ByVal Target As Range) Dim TLeft As Single, TTop As Single Dim TWidth As Single, THeight As Single Dim TAddress As String On Error Resume Next With Target TLeft = .Left: TTop = .Top TWidth = .Width: THeight = .Height TAddress = .Address End With If Target.Value = 1 Then ActiveSheet.Shapes.AddShape(msoShapeSun, TLeft, TTop, TWidth, THeight).Select With Selection .ShapeRange.Fill.Visible = msoFalse .Name = TAddress End With Range(TAddress).Select ElseIf Target.Value = "" Then ActiveSheet.Shapes(TAddress).Delete End If End Sub 任意のセルに「1」を「数値として」入力すると、 そのセルに合うようにオートシェイプが置かれます。 背景を透明にしているので「線以外の場所」をクリックすると その下のセルを選択できます。 この「1」を削除(Deleteボタンのみ)すると、オートシェイプも消えます。 ちなみにこのコードだと「1」以外の数字には反応しません。 他の図形にしたい・色を変えたい・「1」以外にも反応させたい などなどは、別途お調べくださいませ。
その他の回答 (1)
- tsubuyuki
- ベストアンサー率45% (699/1545)
>> 他の図形にしたい・色を変えたい・「1」以外にも反応させたい >> などなどは、別途お調べくださいませ。 と書いておきましたが、ご理解いただけなかったようで。 ご自身でメンテナンス出来ないようなら、マクロは使わない方が良いです。 私はプロ(代金を徴収してお教えする立場)ではありませんので、 個別にゼロからお教えする気もありませんし、 個別に細やかなサポートをする気もありません。 「学習のお手伝い」になれば幸いと思い、回答しているだけです。 おそらく、他の回答者さんも同様の考えと思います。 以上を念頭に、ヒントだけ。 エクセルには「マクロの記録」と言う機能があります。 WEBで検索すると使い方を解説しているサイトがジャンジャンヒットしますので、 まずはご自身で調べて、その使い方は理解してください。 さて、「マクロの記録」機能を使って、お望みの操作をしていきます。 > ・大きさや形を決まった図形を別のセルに用意しておきそれをそのまま表示させる 「別のセルに図形を用意しておく」「そのまま表示させる」、というキーワードから、 用意した図形をコピー・貼り付けする動作だと推測できます。 「マクロの記録」を起動し、 ・用意した図形をコピー ・別のセルに貼り付ける と言う動作をし、「マクロの記録」を終了します。 すると、今の動作を行うコードが出来ているので、 お好みのセルをコピー元に出来るように、前のコードを参考にしながら改編してください。 > ・図形を赤色で表示させる すいませんが、これにはマクロは関係なさそうです。 「用意しておいた図形」の枠線を赤にしておけば良いだけです。 そもそも白や透明で、コピー後に色を変えるのであればこの操作も必要かもしれません。 でも、これも「マクロの記録」でベースを作ることは可能です。 前のコードと組み合わせて改編してください。 > ・1~300まで対応できる 意味が不明瞭です。 1~300行でしょうか?1~300列でしょうか? このどちらかだとする場合、 変更されたセルはTargetと言う変数に格納されますから、 行であればTarget.Row、列であればTarget.Columnで取得できます。 「これが300以下の時に処理(それ以外はスルー)」と言う条件を付ければ出来ます。 例えば、 If Targer.Row >= 300 then 処理 End If と言う感じです。 よく使う処理ですから、覚えるためにもご自身で調べる方が良いでしょう。 調べて、試して、その上で「何をどうしたが、ここがわからない」のであれば 回答者さんも快くアドバイスをくれるでしょう(私も同様です)。 「初心者だからゼロから作り上げてくれ」と言うのは根本的なところで間違えていますよ。
お礼
自分で言うのもなんですが、ごもっともです それにも関わらず、色々と教えてくださり助かりました 貴重なお時間を割いて頂き 丁寧に分かりやすくご説明して頂いた事に感謝します
お礼
詳しくご回答ありがとうございます。 もしよろしければ、 ・大きさや形を決まった図形を別のセルに用意しておきそれをそのまま表示させるマクロ ・図形を赤色で表示させるマクロ ・1~300まで対応できるマクロ を回答して頂いたマクロにプラスして教えていただければ本当に助かります。