Excel非表示行中のshapeが移動できない

このQ&Aのポイント
  • Excel VBAでオートシェイプを移動させている際、非表示にした行中のオートシェイプが表示されない問題が発生します。
  • shapes.Topやshapes.Leftの値は変更されており、shapes.visibleもmsoTrueになっています。
  • シートを更新しても表示されず、非表示から表示にしたらオートシェイプが出現するため、Excelの仕様や設定に問題があるのか疑問です。
回答を見る
  • ベストアンサー

Excel非表示行中のshapeが移動できない

Excel VBAで不明な点がありましたので、質問させてください。 オートシェイプ(四角形/msoRectangle)を、VBAで移動、変形させていたのですが、オートシェイプのある行を非表示にした場合、表示している行以外に移動させても、オートシェイプが表示されません。 ・shapes.Topやshapes.Leftは変更されています。 ・shapes.visibleもmsoTrueです。 ・activesheet.activateでシートを更新してみても表示されません。 ・該当行を非表示から表示にしたら、変更後の位置、大きさにオートシェイプが出現します。 これは、エクセルの仕様(バグ)なのでしょうか? それとも、何か別の設定を行えば、行を非表示にしたまま、オートシェイプを別の位置に移動(出現)させることができるのでしょうか? どうか、皆様のお知恵をお貸しください。 OSはWin7Pro 32bit、Excelは2010です。

質問者が選んだベストアンサー

  • ベストアンサー
  • chie65535
  • ベストアンサー率43% (8524/19373)
回答No.2

図形のプロパティの「セルに合わせて移動やサイズ変更をする」「セルに合わせて移動はするがサイズ変更はしない」「セルに合わせて移動やサイズ変更をしない」を変更すると「基準となるセルが非表示になると図形も非表示になる」「基準となるセルが非表示になると図形は非表示にならないが移動はする」「基準となるセルが非表示になっても図形は移動しないし非表示にもならない」になります。 ですので、図形の書式設定のプロパティを「セルに合わせて移動やサイズ変更をしない」にしておくと、セルが非表示になっても図形が巻き込まれて非表示になったりせず、常に表示されたままになります。 実は、図形には「基準となるセル」があって、このセルが非表示になったり位置が変わったりすると、連動して図形に影響が与えられます。 VBAで移動や変形を行なっても、この「基準となるセル」は変化しないため、基準セルが非表示になると、巻き添えで、図形も非表示になります。この時「図形が実際にどこにあるかは関係しない」ので、注意が必要です。

Mathmi
質問者

お礼

回答ありがとうございます。 >VBAで移動や変形を行なっても、この「基準となるセル」は変化しない >「図形が実際にどこにあるかは関係しない」 あ、なるほど。そういう理屈なんですね。 確かに、Wordの図形でも、アンカーのある行を削除すると、図形がどこにあっても削除されますものね。 Wordだとアンカーが明示できますが、Excelも同じ仕様なんですね。

Mathmi
質問者

補足

皆様素晴らしい回答でしたが、「基準セル」という概念を教えて頂いたこの回答をベストアンサーとさせて頂きます。

その他の回答 (3)

  • watabe007
  • ベストアンサー率62% (476/760)
回答No.4

>行を非表示にしたまま、オートシェイプを別の位置に移動(出現)させること 図形が非表示の10行~20行に隠れているとして 一旦、行を表示して移動を行えば Sub Test()   Application.ScreenUpdating = False   '10行~20行、再表示   Rows("10:20").Hidden = False   '図形をB30に移動   With ActiveSheet.Shapes("Rectangle 1")     .Top = Range("B30").Top     .Left = Range("B30").Left   End With   '10行~20行、非表示   Rows("10:20").Hidden = True   Application.ScreenUpdating = True End Sub

Mathmi
質問者

お礼

回答ありがとうございます。 非表示行にあるオートシェイプが動かせないなら、一旦表示させてやればいい。 考えれば単純、というかストレートな解決策なんですが、ぱっとは思いつきませんでした。

  • chie65535
  • ベストアンサー率43% (8524/19373)
回答No.3

>非表示の行にある時はオートシェイプも非表示にしたいのですが、イベント >でvisibleを変更するのも手間なので、移動だけで非表示→表示になってくれ >ればうれしかったのですが 図形が持っている「基準となるセル」は「変更できないプロパティ」なので、基準となるセルを変更する場合は「図形の切り取り」→「移動後に基準となるセルを選択する」→「図形の貼り付け」→「図形の位置を微調整」と言う処理が必要になります。 「基準となるセル」は、上記の方法以外では、変更する事は出来ません。

Mathmi
質問者

お礼

No.2と合わせて、回答ありがとうございます。 なるほど。確かにshapes.cut→range.select→pasteみたいな感じで、非表示行にあるオートシェイプを表示できました(Heightが0になっちゃってますが)。

  • watabe007
  • ベストアンサー率62% (476/760)
回答No.1

仕様みたいですね。 図形のプロパティで『セルに合わせて移動やサイズ変更をしない』 にチェックすると行を非表示にしても図形は表示されたままになっています。 Win7-Excel2013

Mathmi
質問者

お礼

回答ありがとうございます。 やはり仕様なんでしょうか。 非表示の行にある時はオートシェイプも非表示にしたいのですが、イベントでvisibleを変更するのも手間なので、移動だけで非表示→表示になってくれればうれしかったのですが……。

関連するQ&A

  • シート上のオートシェイプをすべて非表示にしたい

    マクロで ActiveSheet.Shapes.Visible = False と作って見ましたが、だめでした。 シート上のオートシェイプをすべて非表示にしたい時は、マクロではどのようにすれば良いでしょうか? よろしくお願い致します。 Excel2002 WINXP

  • エクセルでオートシェイプをデータによって移動できますか?

    エクセルでオートシェイプをデータによって自動で移動させる事は可能でしょうか? 例えば、 『血液型 : A・B・O・AB』 という項目があって、血液型によって○で囲む書式の場合に(血液型がA型ならば、Aを○で囲む)他のセルで血液型を入力して、その値が変更する事によって、囲む○(オートシェイプを使用)の位置を自動で移動させたい。 VBAはほとんどわからないので、マクロ使用程度でできたら、と思っています。 エクセルのバージョンは2003です。

  • Excelのマクロを使用してオートシェイプ図形の色を変えたいのです。

    Excelのマクロを使用してオートシェイプ図形の色を変えたいのです。 オートシェイプ図形を50個ならべて、マウスでクリックしてものは色が変わるようにしたいと思います。 マクロ記録をすると以下のようになりました。 Sub Macro1() ActiveSheet.Shapes("AutoShape 1").Select Selection.ShapeRange.Fill.ForeColor.SchemeColor = 45 Selection.ShapeRange.Fill.Visible = msoTrue Selection.ShapeRange.Fill.Solid End Sub このプログラムを50個書くわけにはいかないのですが、プログラムで処理するのに問題点が2つ出てきました。 ・オートシェイプ図形の名前が"AutoShape 1"となっていますが、これを変更したいのですが、書式設定にはありませんでした。変更するにはどうすればよいのでしょう? ・クリックしたオートシェイプ図形がどれであるかを返す関数がないと、どの図形がクリックされたかわからないのですが、これを返す関数はあるのでしょうか? よろしくお願いします。

  • エクセルでのオートシェイプの消し方

    エクセルでオートシェイプや貼り付けた図が、状況によって(計算結果により)消せれば面白い小細工が出来るのになと、ふと思いつきました。 VBAを使えば可能かもしれませんが、できれば面倒なのでVBAなしで、消す(画面外に移動でもいいのですが)ことは可能でしょうか。

  • 複数のセルのなかに該当があればオートシェイプを表示

    http://okwave.jp/qa/q8365189.html 上記質問の続きです。 画像のようなチェック表をExcelで作っています。 右側欄外に表を作成し、 ◎を付ける番号、○をつける番号をそれぞれ入力し、 「入力内容を反映」ボタンをクリックすると、 オートシェイプで配置した◎や○が表示されるようにしたいです。 VBAを以下のように作成してみたのですが、 ◎はつくのですが、 ○をつけるVBAが動きません。 どのように修正するべきでしょうか? ご教授ください! Private Sub CommandButton1_Click() '○で囲むVBA Dim c For Each c In Range("U103:Y103") If InStr(c.Value, "1") > 0 Then ActiveSheet.Shapes("1を囲む○").Visible = True Else ActiveSheet.Shapes("1を囲む○").Visible = False End If If InStr(c.Value, "2") > 0 Then ActiveSheet.Shapes("2を囲む○").Visible = True Else ActiveSheet.Shapes("2を囲む○").Visible = False End If Next c ・ ・ ・ '最も重要なものを◎で囲むVBA If Range("T103").Value = "1" Then ActiveSheet.Shapes("1を囲む◎").Visible = True Else ActiveSheet.Shapes("1を囲む◎").Visible = False End If If Range("T103").Value = "2" Then ActiveSheet.Shapes("2を囲む◎").Visible = True Else ActiveSheet.Shapes("2を囲む◎").Visible = False End If ・ ・ ・ End Sub ちなみに「'○で囲むVBA」のコードだけを残して動作させてみると、 1や2が一番右のセル(Y103)に入力されると、1を囲む○、2を囲む○がそれぞれ表示されるのですが、 それ以外のセル(U103からX103)に1や2を入力しても○は表示されません。 全コードを入力して動作させると、 1や2を一番右のセル(Y103)に入力しても○はどこにも表示されません。 よろしくお願いいたします!

  • jscriptからエクセルのオートシェイプを作成しようとしていますが、

    jscriptからエクセルのオートシェイプを作成しようとしていますが、文字サイズの変更ができません。 スクリプトは以下の通りです。 <job id="ConstJob"> <reference guid="00020813-0000-0000-C000-000000000046"></reference> <script language="JavaScript"> //エクセルオブジェクト var excel = new ActiveXObject("Excel.Application"); //表示しないで編集 excel.Visible = false; // エクセル新規作成 var book = excel.Workbooks.Add(); book.Worksheets("Sheet1").Activate; // オートシェイプの作成 var shape0 = book.Worksheets("Sheet1").Shapes.AddShape(1, 5, 5, 410, 130); shape0.TextFrame.Characters().Font.Size = 9; ……(1) shape0.TextFrame.Characters().Text = "ここにテキスト"; //エクセルの保存 var fso = new ActiveXObject("Scripting.FileSystemObject"); book.SaveAs(fso.GetFolder(".").path + "\\sample.xls"); //エクセルの終了 excel.Quit(); WScript.Echo("作業完了"); </script> </job> この状態でwsfファイルを起動させると、(1)の行でエラーを起こしてしまいます。 「Font クラスの Size プロパティを設定できません。」というエラーです。 検索するとシートの保護を解除すればいい、というページが見つかったのですが、 (参考→http://okwave.jp/qa/q2497357.html) マクロでは使えても、Jscriptで書いても動作してくれません。 解決策をご存知の方は、よろしくお願いします。

  • エクセルVBAでオートシェイプを点滅させたい。

    エクセル2000です。 ワークシートに配置したオートシェープ(「矢印」と名前を付けてあります。)をチカチカさせたいのです。 Sub マーク点滅() Dim i As Integer i = 0 Do i = i + 1 Loop Until i = 3 Sheets("AAAA").Shapes("矢印").Visible = True Sheets("AAAA").Shapes("矢印").Visible = False End Sub とやってみましたがぜんぜんだめでした。 いい方法はないでしょうか?

  • JavaScriptで書き出したオートシェイプにテキストを挿入したいの

    JavaScriptで書き出したオートシェイプにテキストを挿入したいのですができません。 先日、ExcelのシートにJavaScriptでオートシェイプを書き出す方法を質問した者です。 今度は書き出したオートシェイプにテキストを挿入したいのですが上手くいきません。 どうすれば良いのか教えてください。 ※またもやJavaScriptで解決したいです。 なお、現在悩み中のソースは以下のようです。 ※教えて頂いたソースほとんどそのままですが... function createShapes() { var excel = new ActiveXObject( "Excel.Application" ); excel.visible = true; var sheet = excel.Workbooks.Add().activeSheet; // オートシェイプ挿入:引数の105は吹き出しを示す sheet.Shapes.AddShape(105, 123, 37.5, 151.5, 94.5); // ココでメソッド、プロパティがないとエラーになってしまう...  sheet.Shapes("AutoShape 1").Characters.Text = "ほげほげ"; } よろしくお願いします。

  • オートシェイプの表示の切り替え

    はじめまして。よろしくお願い致します。 エクセル2003で、楕円などのオートシェイプをクリックすると、表示できたり非表示にしたり、切り替えれるマクロかVBAがあれば教えてください。お願い致します。

  • オートシェイプの移動

    条件付き書式を使って進捗率をデータバーで表示しています。 5行目の進捗率の右端に合わせた位置にオートシェイプで 作成した線を移動させたいのですが、 マクロで行う方法をご教授して頂けないでしょうか。 現在、手で毎日移動してます。 条件:月や曜日によって進捗率の増減があるため移動する値は一定ではありません 宜しくお願い致します。

専門家に質問してみよう