エクセルのマクロで図形描画を結合したセルに移動する方法

このQ&Aのポイント
  • エクセルを使用して図面中の図形描画で描かれた四角のオブジェクトを結合したセル(G7:H8)の中央に移動させるマクロを組む方法について説明します。
  • マクロを組み実行すると動作はOKですが、保存の際にエラーが発生し修復する必要があります。修復したレコードは「/xl/drawings/drawing1.xml」内のスケッチ(図形描画)です。
  • 以下のマクロコードを使用して図形を移動させることができます。 Sub 打合図() ' ' 打合図 Macro ' ActiveSheet.Shapes.Range(Array("AutoShape 12")).Select Selection.Cut Range("G7:H8").Select ActiveSheet.Paste With Selection .Top = (Range("G9").Top - Range("G7").Top - .Height) / 2 + Range("G7").Top .Left = (Range("I7").Left - Range("G7").Left - .Width) / 2 + Range("G7").Left End With Range("N8").Select End Sub
回答を見る
  • ベストアンサー

エクセルのマクロについて

エクセル2010を使用しています。 図面中の図形描画で描かれた四角のオブジェクトを 結合したセル(G7:H8)の中央に移動させるマクロを組みました。 マクロを組み実行したところ、動作はOKなのですが、 保存の際エラーが発生し修復しますか?となってしまいます。 続行すると、 修復されたレコード: /xl/drawings/drawing1.xml パーツ内のスケッチ (図形描画) と表示されます。 作成したマクロは以下の通りです。 おかしいところをご指摘ください。 よろしくお願いします。 Sub 打合図() ' ' 打合図 Macro ' ActiveSheet.Shapes.Range(Array("AutoShape 12")).Select Selection.Cut Range("G7:H8").Select ActiveSheet.Paste With Selection .Top = (Range("G9").Top - Range("G7").Top - .Height) / 2 + Range("G7").Top .Left = (Range("I7").Left - Range("G7").Left - .Width) / 2 + Range("G7").Left End With Range("N8").Select End Sub

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

  • ベストアンサー
  • mt2008
  • ベストアンサー率52% (885/1701)
回答No.1

当方の環境(Win7SP1+Excel2010)ではエラーもなく保存できました。 コード中でAutoShape 12を削除しているので、今回コードが提示されていない部分で問題が起きているのかもしれません。 以下の様にカット&ペーストではなく、単なる移動にするとどうでしょう? Sub 打合図()   ActiveSheet.Shapes.Range(Array("AutoShape 12")).Select   With Selection     .Top = (Range("G9").Top - Range("G7").Top - .Height) / 2 + Range("G7").Top     .Left = (Range("I7").Left - Range("G7").Left - .Width) / 2 + Range("G7").Left   End With   Range("N8").Select End Sub

konkichikonkon
質問者

お礼

ありがとうございます。 コピーペーストして実行しました。 動作は問題ないのですが、やはり保存の際 エラーが発生してしまいます。 AutoShape 12が何かに引っかかるのでしょうか。

その他の回答 (1)

  • mt2008
  • ベストアンサー率52% (885/1701)
回答No.2

移動だけでも駄目でしたか。 と、なるとAutoShape12またはブック自体が破損している可能性も考えた方が良さそうですね。 次の方法を試してください。 1.Excelを起動。 2.「ファイルを開く」で今回のブックを選択し、<開く>ボタンの右にある▼を押してメニューを出す。 3.メニューから「開いて修復する」で、ブックを開き修復する。 一応、念のためにブックのコピーを取ってから試してください、

konkichikonkon
質問者

お礼

マクロの登録を一度すべて消去し、 一旦xlsの拡張子で保存しました。 その後、再度マクロを貼り付けxls形式で 保存したところ上手くいきました。 動作も良好です。 xlsmの拡張子にするとなぜか調子が 悪いみたいです。 ありがとうございます。

関連するQ&A

  • 図形をコピーするマクロ(エクセル)

    以下のマクロで、シート上にある図形(四角形 1)を、選択状態にあるセルの上に移動させることができます。 Sub test() Dim seru As Range On Error GoTo Errorline Set seru = Range(ActiveCell.Address) ActiveSheet.Shapes("四角形 1").Select With Selection.ShapeRange .Left = seru.Left .Top = seru.Top End With Errorline: End Sub 移動ではなくコピーにするには、どう変えればいいでしょうか?

  • Excelマクロ ○印図形を消したい

    ○印図形を消したい Private Sub CommandButton2_Click() ' ○印をつける Dim a As Range If TypeName(Selection) = "Range" Then Set a = Selection ActiveSheet.Shapes.AddShape(msoShapeOval, a.Left, _ a.Top, a.Width, a.Height).Select Selection.ShapeRange.Fill.Visible = msoFalse a.Select End If End Sub Private Sub CommandButton3_Click() 上記のマクロでつけた○印を下記のようなマクロで(指定の範囲のセルにつけた○印を全て)消したいのですが、上記のマクロは問題なく動作するのですが、下記のマクロがうまく動きません、どこをどのように変更したらよいのでしょうか?、どなたかご教示ください。 ' 指定したセル範囲にある図形を削除する() ' ○印の削除 指定セル範囲 = "U32:X41" With ActiveSheet Set セル範囲 = .Range(指定セル範囲) For Each 図形 In .Shapes If 図形.Type = msomsoPicture Then Set 共有セル範囲 = Intersect(Range(図形.TopLeftCell, _ 図形.BottomRightCell), セル範囲) If Not (共有セル範囲 Is Nothing) Then 図形.Delete End If End If Next End With End Sub

  • Excelの罫線に関するマクロ

    Excelの罫線に関するマクロ 罫線を引き、それを赤くするマクロを作ったのですが、赤罫線の下にもうひとつ罫線が表示されてしまいます。どこを削除すればよいのでしょうか。 ご教示お願いいたします。 Sub 罫線() Dim T1 As Single, L1 As Single Dim T2 As Single, L2 As Single Dim myShp As Shape With Range("c15") T1 = .Top L1 = .Left End With With Range("d14") T2 = .Offset(1, 1).Top L2 = .Offset(1, 1).Left End With Set myShp = ActiveSheet.Shapes.AddLine(L1, T1, L2, T2) ActiveSheet.Shapes.AddLine(L1, T1, L2, T2).Select With Selection.ShapeRange.Line .Visible = msoTrue .Style = msoLineSolid .Weight = 5# .ForeColor.SchemeColor = 10 End With End Sub よろしくお願いします。

  • EXCLの自動マクロ記録を簡潔に編集をお願いします。

    すみません教えてください。  収支会計.XLSの売上台帳のシートを別ファイル確定申告2.xlsの売上作業範囲シートに貼り付けたく自動マクロを記録したのですが、いまいち動きがぎこちなく重く何とかスムーズに出来ないでしょうか? Sub 売り上げ書き込み() ' ' 売り上げ書き込み Macro ' Range("A2:F251").Select Selection.Delete Shift:=xlUp Application.Left = 20.8 Application.Top = 34 Windows("収支会計.XLS").Activate With ActiveWindow .Top = 3.4 .Left = 9.4 End With Sheets("売上台帳").Select ActiveWindow.SmallScroll Down:=-55 ActiveWindow.ScrollRow = 1 With ActiveWindow .Top = 87.4 .Left = 37 End With Range("D5:H1004").Select Selection.Copy Windows("確定申告2.xls").Activate Range("B2").Select ActiveSheet.Paste Range("A2").Select Windows("収支会計.XLS").Activate Range("C5:C430").Select Application.CutCopyMode = False Selection.Copy Windows("確定申告2.xls").Activate ActiveSheet.Paste Range("H8").Select End Sub 宜しくお願いします。

  • 図形を作成するマクロ

    Sub test() ActiveSheet.Shapes.AddShape(msoShapeOval, Selection.Left,Selection.Top, 72, 72).Select End Sub アクティブセルの左上に合わせて円を作成するマクロですが。 "Selection"のところに"x"という変数を用いる場合は、どのような宣言が必要になるでしょうか? ちなみに以下ではエラーになりました。 x = Range(ActiveCell.Address)

  •  エクセルに写真を挿入するマクロを組んでいます。

     エクセルに写真を挿入するマクロを組んでいます。 2003までは問題なく動作していたマクロが、 2007では位置調整がうまく行きません。  そこでネットで検索して With Selection .Left = Range("C6").Left .Top = Range("C" & rowa).Top End With のように Selection.Left を使えば解決するとありましたが、 (1)WIN VISTAのエクセル2007では おなじひとつのエクセルファイルの あるシートではコード通りが位置でるのに 違うシートでは縦位置がずれる。 (2)WIN XPのエクセル2007では すべてのシートで縦位置がずれる。 ただし、ずれの位置は(1)よりは少ない。 といずれのOSでも不具合が出ます。  事情によりエクセル2007でこのマクロを使用しなければならなくなり 非常に困っております。 どなたか解決方法をご存知の方、よろしくお願いします。  なお、(2)のWIN XPでは、エクセル2003も入っており、 その中では、全く問題なくマクロが動作しています。 実際のコードは下の通りです。 Sub 写真呼出(koumoku, jpgf, tr As Variant) Dim rowa As String ActiveWindow.ScrollColumn = 1 ActiveWindow.ScrollRow = tr ←選択したセルの行ナンバー ActiveSheet.Pictures.Insert(motopath & "写真\" & koumoku & "\" & jpgf & ".JPG").Select Selection.Name = "写真" Selection.ShapeRange.LockAspectRatio = msoTrue '縦横比の固定 Selection.ShapeRange.Height = 480 'Selection.ShapeRange.IncrementLeft 100 ←不具合が出たので止めた部分 'Selection.ShapeRange.IncrementTop 40  ←不具合が出たので止めた部分 rowa = tr + 2 With Selection .Left = Range("C6").Left .Top = Range("C" & rowa).Top End With End Sub

  • エクセル2007のマクロで画像挿入がうまくいきません。

    エクセル2007のマクロで画像挿入がうまくいきません。 写真のサイズ縦横比がセルにあっていないので伸びてしまいます。 下記のプログラムでサイズ変更も可能でしょうか? フォームのボタンの上に張り付けた場合、ボタンを隠す事は 出来ますか? ボタンの色は変更できるのでしょうか? いろいろわがままな質問で申し訳ありません。 マクロ初心者です。 Sub Pic_in2007() fname = Application.GetOpenFilename ActiveSheet.Pictures.Insert(fname).Select Selection.ShapeRange.LockAspectRatio = msoFalse Selection.ShapeRange.Height = range("B5:C6").height Selection.ShapeRange.Width = range("B5:C6").width Selection.ShapeRange.left = range("B5:C6").left Selection.ShapeRange.top = range("B5:C6").top End Sub

  • エクセル・マクロ CSVファイルの読込方法と改行

    マクロがうまく作成出来ずにいます。 是非、教えて頂けないでしょうか、宜しくお願い致します。 マクロでやりたい事は二つあります。 (1)あるシステムよりRドライブ内にデータを落とし、その後エクセルシートへ貼り付ける作業を行っているのですが、この作業をマクロで出来るようにしたいです。 ただ、データを落とした段階では拡張子表示にしても何もついていないデータになっていますが、中身からしておそらくCSV形式のデータだと思います。 (2)シート(1)、(2)、(3)にあるデータをシート(4)に順番に貼り付けていきたいのですが、(1)のシートのデータと(2)の間に空白の行を一行、(2)と(3)の間にも空白の行を一行としていきたいのです。 (2)に関しては途中までマクロを書いたのですが、エラーが出てうまくいきません。 作成したマクロは以下です。 Sheets("summary").Activate Range("A3").Select Range(Selection, ActiveCell.SpecialCells(xlLastCell)).Select Selection.ClearContents 'AUD シート Sheets("AUD").Activate ActiveSheet.Range("A1").Select ActiveSheet.Range("A1:P1").Select ActiveSheet.Range(Selection, Selection.End(xlDown)).Select Selection.Copy Sheets("summary").Activate ActiveSheet.Range("A3").Select ActiveSheet.Paste With Selection.Borders(xlEdgeLeft) .LineStyle = xlContinuous .Weight = xlMedium .ColorIndex = xlAutomatic End With With Selection.Borders(xlEdgeTop) .LineStyle = xlContinuous .Weight = xlMedium .ColorIndex = xlAutomatic End With With Selection.Borders(xlEdgeBottom) .LineStyle = xlContinuous .Weight = xlMedium .ColorIndex = xlAutomatic End With With Selection.Borders(xlEdgeRight) .LineStyle = xlContinuous .Weight = xlMedium .ColorIndex = xlAutomatic End With Application.CutCopyMode = False ActiveCell.Select ActiveSheet.Range(Selection.End(xlDown)).Select Cells.Replace What:=Chr(10), Replacement:="<br>" 最後の数行でエラーが出ます。 マクロの初心者でこんな事もわからないのかと思われるかもしれませんが、 どうぞ宜しくお願い致します。

  • Excel マクロ 任意のセルから実行したい

    こんにちは、Excel2003を使用しています。 ExcelでK55からE55までのセルの値を削除して(空白にして) それぞれに「---を引いた透明のダイアローグボックス」を コピーしていくマクロを作成したことがあります。 このときは開始するセルがK55と決まっていたのですが 今度は任意のセルから(たとえば選択したセルの右隣とか) 実行したいのですがどのようにマクロを作ればよいでしょうか ご存じの方お教えください。 なお参考に上記のマクロを記載します。 Range("E55:J55").Select Selection.ClearContents Range("H55").Select ActiveSheet.Shapes.AddTextbox(msoTextOrientationHorizontal, 672#, 729#, _ 81#, 13.5).Select Selection.Characters.Text = "" With Selection.Font .Name = "MS Pゴシック" .FontStyle = "標準" .Size = 11 .Strikethrough = False .Superscript = False .Subscript = False .OutlineFont = False .Shadow = False .Underline = xlUnderlineStyleNone .ColorIndex = xlAutomatic End With Selection.ShapeRange.Fill.Visible = msoFalse 'Selection.ShapeRange.Fill.Solid 'Selection.ShapeRange.Fill.Transparency = 0# Selection.ShapeRange.Line.Weight = 0.75 Selection.ShapeRange.Line.DashStyle = msoLineSolid Selection.ShapeRange.Line.Style = msoLineSingle Selection.ShapeRange.Line.Transparency = 0# Selection.ShapeRange.Line.Visible = msoFalse ActiveSheet.Shapes("Text Box 12").Select Selection.Characters.Text = "---" With Selection.Characters(Start:=1, Length:=3).Font .Name = "MS Pゴシック" .FontStyle = "標準" .Size = 11 .Strikethrough = False .Superscript = False .Subscript = False .OutlineFont = False .Shadow = False .Underline = xlUnderlineStyleNone .ColorIndex = xlAutomatic End With Selection.HorizontalAlignment = xlCenter Range("K55").Select ActiveSheet.Shapes("Text Box 12").Select Selection.Copy Range("I55").Select ActiveSheet.Paste Range("H55").Select ActiveSheet.Paste Range("G55").Select ActiveSheet.Paste Range("F55").Select ActiveSheet.Paste Range("E55").Select ActiveSheet.Paste Range("E56").Select Selection.Copy Range("F56:J56").Select ActiveSheet.Paste Application.CutCopyMode = False Range("E56:J56").Select Selection.Copy Range("E57:E59").Select ActiveSheet.Paste Application.CutCopyMode = False Range("K59").Select End Sub

  • エクセル テキスト追加マクロで”実行時エラー”発生

    エクセル テキスト追加マクロで”実行時エラー”発生 保護されたスケジュール表の上へ、マクロでテキストボックスを追加しようとしてます。 別マクロで行挿入マクロがありますが、これを実行した後にテキスト追加マクロを実行すると 実行時エラー'2147024809(80070057)':選択した図形はロックされています。 が表示されます。 これを解決する方法をご教授ください。 追加されたテキストボックスは、位置変更とテキスト編集ができるようにしたいと思います。 ◇行挿入◇ Sub 行挿入() With ActiveSheet .Protect Password:="Pass", UserInterfaceonly:=True '処理 End With End Sub ◇テキストボックス追加◇ Sub テキスト追加() ActiveSheet.Shapes.AddTextbox(msoTextOrientationHorizontal, _ Selection.Left + 3, Selection.Top + Selection.Height - 11, _ 50#, 12#).Select End Sub

専門家に質問してみよう