[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『選択範囲を画像でコピーすると小さくなる』(アクア)
sheet1の左上から、縦にtatemasu数(およそ300行)、横にyokomasu数(およそ1200列)の範囲をコピーし、chartオブジェクトに貼り付ける、ということを以下のVBAで実行しようとしました。
しかし、クリップボードに貼り付けられた範囲は、とても小さなものとなってしまい、chartオブジェクトに貼られた画像も小さくなってしまいます。
Copypictureを実行した直後のクリップボードの画像は既に予期したものより小さく、作成したchartオブジェクトの大きさは予期した画像のサイズと同じになっておりました。以上のことから、クリップボードへのコピーが何らかの理由でおかしいと思うのですが…。
何卒、改善策をご教授下さいませ。
Set rg = Sheets("sheet1").Range(Sheets("sheet1").Cells(1, 1), Sheets("sheet1").Cells(tatemasu, yokomasu))
rg.CopyPicture appearance:=xlScreen, Format:=xlPicture
Set cht = Sheets("sheet1").ChartObjects.Add(0, 0, rg.Width, rg.Height).Chart
cht.Parent.Select
cht.Paste
< 使用 Excel:Excel2016、使用 OS:Windows10 >
こんばんは! 以下はHelpからですが、、 xlScreenは、 ピクチャは画面の表示にできる限り近い形でコピーされます。 とあります。 画面の表示サイズを変えてみてはどうでしょうか?
または、、xlPrinterにしてみるとか。。。
XlPictureAppearance 列挙 ピクチャをコピーする方法を指定します。 バージョン情報 追加バージョン: Excel 2007
名前 値 説明 xlPrinter 2 ピクチャは印刷するときと同じ形でコピーされます。 xlScreen 1 ピクチャは画面の表示にできる限り近い形でコピーされます。 (SoulMan) 2020/04/23(木) 20:21
1200列選択しても、私のexcel環境上ではCopyPictureとしては約24570points(標準幅でQM列)までしか貼り付けられませんでした。
当然、セルコピーでは貼り付けられるので、PAINTに貼り付けてみましたが、やはり、QM列まででしか貼りつきませんでした。
QM列サイズから余裕を見て、A:QL幅の24516ポイントずつまでに分割して貼り付けてみました。
分割を跨いでobjectがあるとこの方法ではだめな場合があるかもしれません。
chartの右に余裕が無いと全ては貼り付けられないようなので4ポイント大きくしました。
Sub test()
Dim sp As Chart Dim r As Range Dim ret Dim wMax As Double Dim c As Long, l As Long Dim lpic As Double, hosei As Double On Error Resume Next ActiveSheet.ChartObjects.Delete ActiveSheet.Shapes(1).Delete On Error GoTo 0 wMax = 24516 '24571.5 Cells.ClearContents With Range("A1").Resize(300, 1200) For Each r In .Rows(1).Cells r.Value = Split(r.Address(0, 0), "1")(0) r.Offset(.Rows.Count - 1).Value = r.Value Next ActiveSheet.Shapes.AddShape msoShapeOval, 20, 42, .Width, 200 Set sp = ActiveSheet.ChartObjects.Add(.Offset(, .Columns.Count + 5).Left, 0, .Width + 4, .Height).Chart sp.ChartArea.Format.Line.Visible = msoFalse sp.ChartArea.Format.Fill.Visible = msoFalse c = 1 Set r = .Resize(, c) Do Until .Columns.Count < c For i = c To .Columns.Count - 1 l = l + 1 If wMax < r.Resize(, l).Width Then Exit For Next If l < 2 Then Exit Do Set r = r.Resize(, l - 1) ret = r.CopyPicture(xlScreen, xlPicture) Debug.Print r.Address(0, 0), r.Columns.Count, l = 0 sp.Parent.Select sp.Paste If lpic = 0 Then Selection.ShapeRange.IncrementLeft -20 lpic = Selection.ShapeRange.Left hosei = -1.5 '不明現物合わせ Else Selection.Left = lpic + hosei hosei = hosei * 2 '不明現物合わせ End If lpic = lpic + Selection.Width '+ hosei c = i - 1 Set r = r.Offset(, r.Columns.Count).Resize(, 1) Application.Goto r Debug.Print r(1).Address(0, 0) Loop sp.Parent.Left = 0 sp.Parent.Top = .Offset(1).Top End With Application.Goto Range("QL1") '最初の分割点の手前 End Sub
< 使用 Excel:Excel2016、使用 OS:Windows10(32)>
(kazuo) 2020/04/24(金) 07:43
あまり大きな横幅は自動ではクリップボードにコピーできないものとして考えます。
また、kazuo様のマクロは非常に参考になりました。今回の件では使用できませんでしたが、似たような案件で参考にさせて頂きたく存じます。
(アクア) 2020/04/24(金) 16:33
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.