質問編集履歴
2
コード削除
title
CHANGED
File without changes
|
body
CHANGED
@@ -1,5 +1,3 @@
|
|
1
|
-
下記のようなマクロコードがあります。
|
2
|
-
実行すると結合した任意のセルに写真を貼り付けてくれます。
|
3
1
|
複数選択で一括で貼り付けることができるとっても便利なコードなのですがこれを変更したいです。
|
4
2
|
1、貼り付けた写真を結合セルの中央に持ってきたい。
|
5
3
|
2、複数選択し貼り付けるとき任意の順番で貼り付けたい。
|
@@ -9,173 +7,6 @@
|
|
9
7
|
|
10
8
|
こんな機能付けるコードは、難しいでしょうか?
|
11
9
|
------------------------------------------------
|
12
|
-
'写真ファイルや図形ファイルなどの複数画像を一括で選択し、セルの行順(または任意のセル)に挿入します。
|
13
|
-
'セルのサイズに合わせて画像のサイズ縮小(または拡大)することもできます。
|
14
|
-
|
15
|
-
Dim n, fi, cc As Range, ya, ca, g, ok, fl, l
|
16
|
-
Sub 複数画像の挿入()
|
17
|
-
Dim a, c, sr, sc, s, rr, pkfile, ar, ac, z, rc, ccc, ca0
|
18
|
-
On Error GoTo err
|
19
|
-
Set a = Application.InputBox("画像を挿入するセルを選択してください" _
|
20
|
-
& Chr(13) & Chr(10) & "複数選択可 (ShiftキーまたはCtrlキーで選択)" _
|
21
|
-
, "複数画像の一括挿入(セル選択)", Selection.Address, , , , , 8)
|
22
|
-
Application.ScreenUpdating = False
|
23
|
-
a.Select
|
24
|
-
sr = Selection.Row
|
25
|
-
sc = Selection.Column
|
26
|
-
rr = sr
|
27
|
-
pkfile = Application.GetOpenFilename _
|
28
|
-
("すべての図(*.emf;*.wmf;*.jpg;*.jpeg;*.jfif;*.jpe;*.png;*.bmp;*.gif;*.eps), *.emf;*.wmf;*.jpg;*.jpeg;*.jfif;*.jpe;*.png;*.bmp;*.gif;*.eps", 2, "挿入する図の選択(複数選択可)", , True)
|
29
|
-
If Not IsArray(pkfile) Then MsgBox "ファイルが指定されていません", , "複数画像の一括挿入": End
|
30
|
-
For fi = 1 To UBound(pkfile)
|
31
|
-
If pkfile(fi) = False Then MsgBox "ファイルが指定されていません", , "複数画像の一括挿入": End 'キャンセルの場合終わる
|
32
|
-
Next fi
|
33
|
-
n = ActiveSheet.Pictures.Count
|
34
|
-
Application.DisplayAlerts = False
|
35
|
-
z = MsgBox("画像のサイズをセルに合わせますか", vbYesNo, "複数画像の挿入")
|
36
|
-
ok = 0
|
37
|
-
If Application.Version < 12 Then
|
38
|
-
If MsgBox("縦横比を保持しますか", 4, "複数画像の一括挿入") = 6 Then ok = 0 Else ok = 1
|
39
|
-
End If
|
40
|
-
If z = 6 Then ya = MsgBox("画像圧縮しますか", vbYesNo, "複数画像の挿入")
|
41
|
-
l = MsgBox("元の画像へのリンクを作成しますか", 4 + 256)
|
42
|
-
|
43
|
-
ar = a.Address
|
44
|
-
ac = Range(ar).Count
|
45
|
-
fi = 1
|
46
|
-
If ac > 1 Then GoTo ech Else GoTo pc
|
47
|
-
ech:
|
48
|
-
ca0 = ""
|
49
|
-
For Each cc In ActiveSheet.Range(ar)
|
50
|
-
ca = Range(cc.Address).MergeArea.Address
|
51
|
-
rc = Range(ca).Rows.Count
|
52
|
-
|
10
|
+
1,2,3を、解決することが出来たのでコード削除しました。
|
53
|
-
If rc > 1 Or cc > 1 Then
|
54
|
-
ca = Cells(Range(ca).Row + rc - 1, Range(ca).Column + ccc - 1).Address
|
55
|
-
End If
|
56
|
-
If ca0 = ca Then GoTo mne
|
57
|
-
ca0 = ca
|
58
|
-
ca = Range(cc.Address).MergeArea.Address
|
59
|
-
Range(ca).Select
|
60
|
-
|
61
|
-
' cc.Select
|
62
|
-
g = ActiveSheet.Shapes.AddPicture( _
|
63
|
-
Filename:=pkfile(fi), _
|
64
|
-
LinkToFile:=False, _
|
65
|
-
SaveWithDocument:=True, _
|
66
|
-
Left:=Selection.Left, _
|
67
|
-
Top:=Selection.Top, _
|
68
|
-
Width:=400#, _
|
69
|
-
Height:=300#).Name
|
70
|
-
'図のサイズを元のサイズに戻します
|
71
|
-
|
72
|
-
With ActiveSheet.Shapes(g)
|
73
|
-
.ScaleHeight 1!, msoTrue
|
74
|
-
.ScaleWidth 1!, msoTrue
|
75
|
-
End With
|
76
|
-
|
77
|
-
fl = pkfile(fi)
|
78
|
-
'右のセルにファイル名を表示
|
79
|
-
Cells(Range(ca).Row, Range(ca).Column + 1) = fl
|
80
|
-
|
81
|
-
If z = 6 Then セルにサイズを合わせる
|
82
|
-
fi = fi + 1
|
83
|
-
If fi = UBound(pkfile) + 1 Then GoTo en
|
84
|
-
mne:
|
85
|
-
Next
|
86
|
-
Application.DisplayAlerts = True
|
87
|
-
a.Select
|
88
|
-
Exit Sub
|
89
|
-
|
90
|
-
pc:
|
91
|
-
For fi = 1 To UBound(pkfile)
|
92
|
-
ca = Cells(rr, sc).Address
|
93
|
-
Range(ca).Select
|
94
|
-
g = ActiveSheet.Shapes.AddPicture( _
|
95
|
-
Filename:=pkfile(fi), _
|
96
|
-
LinkToFile:=False, _
|
97
|
-
SaveWithDocument:=True, _
|
98
|
-
Left:=Selection.Left, _
|
99
|
-
Top:=Selection.Top, _
|
100
|
-
Width:=400#, _
|
101
|
-
Height:=300#).Name
|
102
|
-
'図のサイズを元のサイズに戻します
|
103
|
-
|
104
|
-
With ActiveSheet.Shapes(g)
|
105
|
-
.ScaleHeight 1!, msoTrue
|
106
|
-
.ScaleWidth 1!, msoTrue
|
107
|
-
End With
|
108
|
-
|
109
|
-
fl = pkfile(fi)
|
110
|
-
'右のセルにファイル名を表示
|
111
|
-
Cells(Range(ca).Row, Range(ca).Column + 1) = fl
|
112
|
-
|
113
|
-
If z = 6 Then セルにサイズを合わせる
|
114
|
-
rr = rr + 1
|
115
|
-
Next fi
|
116
|
-
Exit Sub
|
117
|
-
en:
|
118
|
-
Application.DisplayAlerts = True
|
119
|
-
Application.ScreenUpdating = False
|
120
|
-
|
121
|
-
a.Select
|
122
|
-
Exit Sub
|
123
|
-
err: MsgBox "選択が正しくありません", , "複数画像の一括挿入"
|
124
|
-
End Sub
|
125
|
-
|
126
|
-
Sub セルにサイズを合わせる()
|
127
|
-
Dim c As Range, cm As Range
|
128
|
-
Dim rX As Single, rY As Single, r As Single
|
129
|
-
|
130
|
-
Application.ScreenUpdating = False
|
131
|
-
' For Each c In Selection
|
132
|
-
|
133
|
-
' Set cm = c.MergeArea
|
134
|
-
Set cm = Range(ca)
|
135
|
-
' If c.Address = cm.Item(1).Address Then
|
136
|
-
' If Application.Dialogs(xlDialogInsertPicture).Show = False Then Exit Sub
|
137
|
-
ActiveSheet.Shapes(g).Select
|
138
|
-
With Selection
|
139
|
-
rX = cm.Width / .Width
|
140
|
-
rY = cm.Height / .Height
|
141
|
-
If ok = 0 Then
|
142
|
-
If rX < rY Then
|
143
|
-
cx = .Width * rX
|
144
|
-
cy = .Height * rX
|
145
|
-
Else
|
146
|
-
cx = .Width * rY
|
147
|
-
cy = .Height * rY
|
148
|
-
End If
|
149
|
-
Else
|
150
|
-
cx = cm.Width
|
151
|
-
cy = cm.Height
|
152
|
-
End If
|
153
|
-
.Width = cx
|
154
|
-
.Height = cy
|
155
|
-
.Left = cm.Left
|
156
|
-
.Top = cm.Top + cm.Height - .Height
|
157
|
-
If ya = 6 Then 図の圧縮
|
158
|
-
End With
|
159
|
-
' End If
|
160
|
-
' Next
|
161
|
-
Set cm = Nothing
|
162
|
-
Application.ScreenUpdating = True
|
163
|
-
End Sub
|
164
|
-
Sub 図の圧縮()
|
165
|
-
Selection.Cut
|
166
|
-
Range(ca).Select
|
167
|
-
ActiveSheet.PasteSpecial Format:="図 (JPEG)"
|
168
|
-
If l = 6 Then
|
169
|
-
ActiveSheet.Hyperlinks.Add Anchor:=Selection.ShapeRange.Item(1), Address:=fl
|
170
|
-
Else
|
171
|
-
Cells(Range(ca).Row, Range(ca).Column + 1) = ""
|
172
|
-
End If
|
173
|
-
g = Selection.ShapeRange.Name
|
174
|
-
|
175
|
-
End Sub
|
176
|
-
------------------------------------------
|
11
|
+
-------------------------------------------------
|
177
|
-
下記、サイトからの引用のようです。
|
178
|
-
http://kiyopon.sakura.ne.jp/soft/fukuzu.htm
|
179
|
-
(先輩が、作成したものではなかったようです)
|
180
|
-
|
12
|
+
画像を、載せたかったのですがまた載せられない状態になっているので時間をおいて載せたいと思います。
|
181
|
-
なので、私も私仕様にしたいのでご教示願います。
|
1
引用追記
title
CHANGED
File without changes
|
body
CHANGED
@@ -173,4 +173,9 @@
|
|
173
173
|
g = Selection.ShapeRange.Name
|
174
174
|
|
175
175
|
End Sub
|
176
|
-
------------------------------------------
|
176
|
+
------------------------------------------
|
177
|
+
下記、サイトからの引用のようです。
|
178
|
+
http://kiyopon.sakura.ne.jp/soft/fukuzu.htm
|
179
|
+
(先輩が、作成したものではなかったようです)
|
180
|
+
「エクセルの学校」にも、ここからの引用でこのコードをそのまま貼り付け各自の仕様にするために質問しているようです。
|
181
|
+
なので、私も私仕様にしたいのでご教示願います。
|