• 締切済み

エクセルVBA 図のコピー&ペーストの方法

mitarashiの回答

  • mitarashi
  • ベストアンサー率59% (574/965)
回答No.1

>1.写真には01,02,03,04・・・・・と名称を付けております。 この部分が明確で無いので回答が付かないのでしょう。 Pictureオブジェクトの名前を付け替えられる才覚がある人なら、写真の転記もご自分でできると考えますので。 写真がSheet1のC列にあるとして、どうやって名前を付けてあるのでしょうか? 仕様の2~4だけやってみました。ご参考まで。 コードのmypicをどうやって特定するのか、仕様1が不明確です。 Sub test() Dim mypic As Picture Set mypic = Sheets("Sheet1").Pictures(1) copyToMergeCell Sheets("Sheet2").Range("B4"), mypic End Sub Sub copyToMergeCell(targetcell As Range, targetPic As Picture) Dim sh As Worksheet, currentSh As Worksheet Dim targetArea As Range Dim newPic As Picture Dim xOffset As Double, yOffset As Double Dim xScale As Double, yScale As Double, myScale As Double Dim mergeHeight As Double, mergeWidth As Double Dim i As Long, j As Long Const xSpan As Double = 5 Const ySpan As Double = 5 Application.ScreenUpdating = False Set currentSh = ActiveSheet Set sh = targetcell.Parent Set targetArea = targetcell.MergeArea targetPic.Copy sh.Activate targetcell.Select sh.PasteSpecial Format:="図 (JPEG)", Link:=False, DisplayAsIcon:=False Set newPic = Selection With targetArea For i = 1 To .Rows.Count mergeHeight = mergeHeight + .Rows(i).Height Next i For j = 1 To .Columns.Count mergeWidth = mergeWidth + .Columns(j).Width Next j End With xScale = (mergeWidth - xSpan * 2) / newPic.Width yScale = (mergeHeight - ySpan * 2) / newPic.Height If yScale < xScale Then myScale = yScale Else myScale = xScale End If With newPic .ShapeRange.ScaleWidth myScale, msoTrue, msoScaleFromTopLeft .Left = targetcell.Left + mergeWidth / 2 - .Width / 2 .Top = targetcell.Top + mergeHeight / 2 - .Height / 2 End With ActiveCell.Activate currentSh.Activate Application.ScreenUpdating = True End Sub

関連するQ&A

  • EXCELのVBAで連続コピーの方法をお願いします

    1月    1日  2日   3日  4日   加藤   午前  午後  午前  午後  (A2セル B2 C2 D2 E2セルに書込み) 鈴木   午後  午前  午後  午前  (A3セル B3 C3 D3 E3セルに書込み) SHEET1にエクセルの表を作成した後にSHEET2のA1からコピーをしSHEET1のデータは消し、次に SHEET1に2月の表を作成した後にSHEET2の1月の最後の次にコピー(すなわちA4) 以後3・4・5月と連続してコピーしたいのです。ひとことで言いますと1月から作成したリストを連続で残して置きたいのです。 宜しくお願いいたします。 エクセルは2007 と2003両方でお願いします 表現が悪くてすいません

  • エクセルやスプレッドシートの式

    エクセルやスプレッドシートの式について教えてください。 シート1にデータを入力していて、 シート2に「シート1のC列のデータを転記」 シート3に「シート1のD列のデータを転記」 シート4に「シート1のE列のデータを転記」 シート5に「シート1のF列のデータを転記」というように、 シートごとに呼び出す列を1列ずつずらしたデータを作りたいと考えています。 シート2については、手入力で作り終えたのですが、 シート3以降は「シート2をコピーして、その数式の中のCの部分を自動でDに書き換える」ようにすることは可能でしょうか? それともひとつひとつ、CをDに書き換えなくてはならないでしょうか? シートごとでもかまいませんので、一括で指定できる方法があれば教えてください。 よろしくお願いいたします。

  • excel のコピー&ペーストについて

    会社で表(Excel2000)を作らなければならなくなりました。 3列を一つの区切りとして10ケ並んでいる表で、1行目の1・4・7・・・・・を別のシートに抽出しました。これをコピーして1行目の2・5・8・・・・次に3・6・9・・・とコピー&ペーストしてゆきたいのですが、単純にコピペすると全然違うセルをペーストしてしまいます。一つ一つ指定してゆくと2日から3日この表を作るのにかかってしまうと思います。説明下手で申し訳ありませんが、これに使える関数とか方法があれば教えて下さい。

  • 【VBA】コピー&複数個所のペースト繰り返し

    下記のように、1つの値をコピーし、別シートの複数個所(同じ列の違う行)へ順次ペーストしたいのですが、貼付けデータやペースト箇所が増えた場合でも対応できるようなVBAを教えてください。 よろしくおねがいいたします。 ========================================================= Sub コピペ() '←1人目をコピー Worksheets("“コピー元シート”").Range("B7").Select Selection.Copy '←貼付け Worksheets(“貼付シート”).Range("B9", "B37", "B65", "B93", "B121", "B149", "B177").Select Selection.PasteSpecial Paste:=xlPasteFormulas '←2人目をコピー Worksheets("“コピー元シート”").Range("B8").Select Selection.Copy '←貼付け Worksheets(“貼付シート”).Range("B11", "B39", "B67", "B95", "B123", "B151", "B179").Select Selection.PasteSpecial Paste:=xlPasteFormulas '←3個の値をコピー Worksheets("“コピー元シート”").Range("B9").Select Selection.Copy '←貼付け Worksheets(“貼付シート”).Range("B13", "B41", "B69", "B97", "B125", "B153", "B181").Select Selection.PasteSpecial Paste:=xlPasteFormulas '←4個の値をコピー Worksheets("“コピー元シート”").Range("B10").Select Selection.Copy '←貼付け Worksheets(“貼付シート”).Range("B15", "B43", "B71", "B99", "B127", "B155", "B183").Select Selection.PasteSpecial Paste:=xlPasteFormulas '←5個の値をコピー Worksheets("“コピー元シート”").Range("B11").Select Selection.Copy '←貼付け Worksheets(“貼付シート”).Range("B17", "B45", "B73", "B101", "B129", "B157", "B185").Select Selection.PasteSpecial Paste:=xlPasteFormulas End Sub

  • エクセルVBAで値だけをコピーペーストする方法

    下記のマクロは、エクセルのシート「精算」のb12~bz342の範囲からからシート「集計表」のアクティブセルを始点に、空白行を除いたデーターを貼り付けます。 しかし計算式と書式を抜いた値だけを貼り付けたいので、 ActiveSheet.Pasteを ActiveSheetSpecial Paste:=xlPasteValues に書き換えたらエラーになってしまいました。 どなたか詳しい方ご教授下さい。 よろしくお願いします。 Sub 精算項目コピー() Dim 最終列 As Integer Sheets("精算").Activate 最終列 = Range("b342").End(xlUp).Row Range("b12:bz" & 最終列).Select Selection.Copy Sheets("集計表").Select ActiveSheet.Paste  ←この部分を書き換えたらエラー End Sub

  • Excelでの貼付先の指定列にコピーしない方法

    会社でExcel2003と2007を使っているのですが、貼付先の表は、よくある月別売上実績表で、4月~翌3月まで項目があり、3か月毎に小計、また半年毎の小計の計算式が入っています。元表には月のデータだけなので、そのままコピーして貼付たいのですが、貼付先の表の小計があるので3か月単位でコピペしていますが結構大変です。非表示にしてもその列にコピーされてしまいます。元表の非表示の列は可視セルの設定でコピーしないようにできるのはわかっているのですが、貼付先のほうは指定列のみコピーしないようにする方法はないのでしょうか?よろしくお願いします。

  • EXCEL VBA テーブル間のコピー

    お世話になります。 VBA初心者です。 Excelで、元データであるSheet1にあるテーブルのB列をSheet2にあるテーブルのA列に転記したいと思います。このとき、Sheet2のテーブルにはデータが入っており、そのデータと重複するものを除外したものだけをSheet2テーブルの続きから入力させるにはどうしたらよいでしょうか? なにとぞご教授のほど、お願いいたします。

  • エクセルVBAでコピーペーストのやり方を教えてください。

    エクセルの他のブックの中に複数のシートがあり、そこから任意の複数のシートの任意の範囲をコピーペーストするやり方を教えてください。できればマクロに記録したいです。 例えば、あいう.xlsというファイルにデータが入っていて、シートは、 sheet1~sheet20まであるとします。 そこから今回はsheet2のC20~E500とsheet4のC20~E500までを、かきく.xlsというファイルのsheet1にコピペしたい。 かきく.xlsのsheet1のA1~C500にあいう.xlsのsheet2のC20~E500を貼りつけ、A501~C980にあいう.xlsのsheet4のC20~E500を貼りつけるというようにしたいです。 毎回列と行の範囲はどこのシートでもC20~E500で決まっているのですが、毎回sheet2とsheet4の範囲をコピペするわけではありません。 次回はsheet1~sheet19までの範囲かもしれません。 シートを選べ、1つのシートにまとめてコピペをしてくれるようなマクロを知りたいです。 エクセルは2003もしくは2007を使っています。 よろしくお願い致します。

  • エクセルVBAの質問

    お世話になります。 下記の様な表がシート1に有り(行数は日で変動し、大体100から200行位)、F列に数字が有る場合、その行のA列、B列、E列の値をコピーして、シート2のA2からC2に貼付したいのですが、また貼付は、10行ごとに、貼付するスタート位置が変わります。 A2~A11、A16~25、A31~40という具合に10行貼り付けたら次は、5行下からまた続きを貼付ていくイメージです。 どの様な記述をしたら良いでしょうか。ご教示下さいます様宜しくお願い致します。        記 A列  B列  C列   D列   E列   F列 No  品番  品名   地区   数量  236  A6TET  みかん  市川   3本 248  A7TGR  りんご  松戸   5本 273  B9GKT  ぶどう  柏    14本   17 273  A8UFE  すいか  行徳   6本    381  C2ROF  いちご  平井   22本   20

  • エクセルVBAのコピーについて

    初心者です。 表を別のシートにコピーしたいのですが、列と行の幅がコピーされません。どうすれば列と行のコピーができるのでしょうか。 pastespecial で引数を指定するのでしょうが、formats ではないでしょう? copy destination:= で別のシートにコピーをしても罫線の行と列の幅が元の幅と異なってしまいます。教えて! エクセルで形式を選択してコピーで、すべてをコピー、でも同じ現象が起きます。列をコピーしてから、すべてをコピーするとうまく行くのですが、VBAではどう書けばいいのでしょうか。