[[20161022210858]] 『押したボタンの右側にセル挿入』(とし) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『押したボタンの右側にセル挿入』(とし)

フォームボタンを押すと、ボタンの位置を取得し、ボタンを置いているセルの右側のセルを挿入させたいと思っています。

現在作成中の表が、J6〜J107までボタンを置き、そのボタンを押すと、
ボタンの右隣3つのセル(ボタンと同じ行の列KLMのセル)が挿入されるというものです。

まずはボタンが置かれている位置を取得できるコードからと思い
検索したところこちらの掲示版で、下記のコードを見つけましたので
使わせてもらったのですが
「指定したアイテムの名前が見つかりませんでした。」
とエラーが出てしまい、つまづいてしまいました。
みなさまのアドバイスを頂けたらと思います。

Sub ボタン1_Click()

    MsgBox ActiveSheet.Shapes(Application.Caller).Top
    MsgBox ActiveSheet.Shapes(Application.Caller).Left
 End Sub

< 使用 Excel:Excel2013、使用 OS:Windows8 >


 フォームボタンを使うことの是非はさておいて、
 こんなことでしょうか?
 Sub ボタン1_Click()
     Dim r As Range
     Set r = ActiveSheet.Shapes(Application.Caller).TopLeftCell
     r.Offset(, 1).Resize(1, 3).Insert Shift:=xlToRight, _
                                CopyOrigin:=xlFormatFromLeftOrAbove
 End Sub

 例えばダブルクリックのイベントプロシージャも考えられます。
 

(γ) 2016/10/22(土) 22:03


 Application.Caller は、シート上のボタンを含む図形に、実行すべきマクロが登録されていて
 その図形がクリックされたときに、図形名が格納されて、そのマクロが実行されます。
 で、そのマクロ内で、Application.Callerを参照することで、その図形が取得できるわけです。

 このマクロを、単独で動かした場合は、Application.Callerは、エラー値になっています。

 したがって ActiveSheet.Shapes(エラー値) ですから、そんな図形はないよと叱られます。

 ボタンに、このマクロを マクロ登録し、ボタンをクリックしてみてください。

(β) 2016/10/22(土) 22:03


γさんもコメントされていますが、こんなのは使えませんか。
 一部のセルをダブルクリックしたときだけマクロを実行する
http://www.relief.jp/itnote/archives/013874.php

(マナ) 2016/10/22(土) 22:07


βさんの指摘で理由がわかりました。
私にはちょっと盲点でしたね、まさかという。
 
フォームボタンはいくつ置くんでしょうか。
コピーするのも手間じゃないですか?
マナさんも言及されているようにイベントプロシージャを使ったほうが楽だと思います。
ユーザーが自分だけなら、その動作を承知しているわけだし、
多数のユーザーなら、シートにその旨を目立つように書いておけばいいでしょう。

(γ) 2016/10/22(土) 22:46


 ボタン配置は、その数が 102個ですから、 シートも重くなるでしょうし、シート作成も大変でしょう。
 また、追加時にも、(あたりまえですが)ボタンの追加が必要。
 ボタンの配置位置が、ちょっとずれると、正しい位置の取得ができなくなるリスクもあります。

 メリットとしては、ボタンを追加するだけで、コードはそのまま変更しなくてもいいということはありますが。

 γさん、マナさんがいわれるように、是非、ダブルクリック処理を検討願います。
 そうしておけば、コードで、ダブルクリックされたセル領域を判定しているところの、セル領域記述をなおせばいいので
 保守性ということでは、むしろ、コード変更が不要なボタン方式よりベターかも。
 その領域に、たとえば、特殊な色の背景色をつけておけば、コードでは領域規定をせず、ダブルクリックされたセルの色を判定して
 処理することもできます。

 つまり、ダブルクリック方式でも、領域の変更時、コード変更なしで、シートの色をつけたり消したりするだけで OKになります。
 また、操作者も、ダブルクリックする領域が視覚的にわかるので、操作性も、ボタン方式と比較して遜色はないと思いますね。

(β) 2016/10/23(日) 00:00


こんにちは。

つぎのようなのをお勧めします。
 表の、J1にボタンを置き、そのボタンを押すと、 カーソルのある行の
 ボタンの右隣3つの列(カーソルの行の列KLMのセル)が挿入されるというもの。
(表の行数が多い場合は、ウィンドウ枠の固定を行ってください)

理由は、ボタンが1つで済むことと
セルのダブルクリックには、エクセル標準で他の機能が割り当てられているので
できれば、その機能をつぶしたくないからです(自分ひとりだけで使っている分には
割り切って使うのはアリですが、将来、ほかのひとにも使ってもらおうかと
なったときに、ユーザーさんの負担が少し増える 可能性があります)。

( 佳 ) 2016/10/23(日) 08:56


色々と提案がありますが、
そもそも、セルの挿入がなぜ必要で、
なぜそのような大袈裟な手当が必要なんでしょうか。
データの持ち方の改善で対応出来るかも。

(γ) 2016/10/23(日) 09:54


多くのアドバイスありがとうございます。
γさんβさんマナさんからご指摘を頂きました、イベントプロシージャを使うことにしました。
γさんのコードを参考にさせてもらい下記のように作ってみました。

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)

  Dim myTarget As Range
    Set myTarget = Application.Intersect(Target, Range("J6:J107"))

    If myTarget Is Nothing Then
        Exit Sub
    Else
      myTarget.Offset(, 1).Resize(1, 3).Insert Shift:=xlToRight, _
                                CopyOrigin:=xlFormatFromLeftOrAbove

    End If
End Sub

このようなセルの挿入の表をつくっているのが、
定期的に行わないといけない仕事の期間を記録していまして、
列     J  K   L  M  


名前 部署  開始日〜終了日 開始日〜終了日 開始日〜終了日・・・・・

列K、L、Mのセルを最新の日付にしたいのでセルを挿入して日付をずらそうと考えました。
分かりにくくて申し訳ないです。 
この後、挿入したセルの罫線を引くコードをいれようと思います。
たくさんのアドバイスありがとうございました。

(とし) 2016/10/23(日) 19:10


>CopyOrigin:=xlFormatFromLeftOrAbove

この設定を変えて試してみてはどうでしょうか。

あと,End Ifの前に、 

Cancel=true

を入れるのが普通かと思います。

(マナ) 2016/10/23(日) 19:47


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.