回答編集履歴
1
追記
answer
CHANGED
@@ -1,4 +1,69 @@
|
|
1
1
|
エクセルは、
|
2
2
|
列の幅は列に、行の幅は行に依存している(同じ列の個々のセルでセル幅が違うということはあり得ない)ので、列幅を維持したいなら列全体を、行高を維持したいなら行全体をコピーする必要があります。
|
3
3
|
両方ならシートそのものをコピーするか、
|
4
|
-
個々に行や列を設定するしかないかと思います。
|
4
|
+
個々に行や列を設定するしかないかと思います。
|
5
|
+
|
6
|
+
---------
|
7
|
+
追記
|
8
|
+
|
9
|
+
セル全体をコピーしてもいいんですね。
|
10
|
+
目から鱗です。
|
11
|
+
|
12
|
+
|
13
|
+
手動では操作したいものは、選択してエクセルに伝えますが、
|
14
|
+
VBAでは、操作したいものを文章で指示しますので、
|
15
|
+
選択したりアクティブにしたりの命令の記述は、不要です。
|
16
|
+
というか無駄な操作です。
|
17
|
+
|
18
|
+
```ExcelVBA
|
19
|
+
Sub test1()
|
20
|
+
Dim wshTemplate As Worksheet '雛形シート
|
21
|
+
Dim wshNew As Worksheet '新しく作るシート
|
22
|
+
Dim strName As String 'シート名
|
23
|
+
|
24
|
+
'準備(前提条件の整理)
|
25
|
+
strName = Worksheets("顧客管理").Range("D1").Value
|
26
|
+
With Worksheets
|
27
|
+
Set wshTemplate = .Item("基礎")
|
28
|
+
Set wshNew = .Add(after:=.Item(.Count))
|
29
|
+
End With
|
30
|
+
|
31
|
+
'転記&追記
|
32
|
+
With wshNew
|
33
|
+
wshTemplate.Cells.Copy .Cells
|
34
|
+
.Name = strName
|
35
|
+
With .UsedRange
|
36
|
+
.Cells(.Rows.Count + 1, 1).Value = strName
|
37
|
+
End With
|
38
|
+
End With
|
39
|
+
End Sub
|
40
|
+
```
|
41
|
+
|
42
|
+
ただ、
|
43
|
+
1)新しいシートを作成
|
44
|
+
2)雛形シートのセルをコピペ
|
45
|
+
だと作業が2工程になりますが、
|
46
|
+
|
47
|
+
1)雛形シートをコピー
|
48
|
+
|
49
|
+
の1工程でも同じ結果になりませんか?
|
50
|
+
シート名を変えるのは同じですし。
|
51
|
+
|
52
|
+
```ExcelVBA
|
53
|
+
Sub test2()
|
54
|
+
Dim s As String
|
55
|
+
Dim ix As Long
|
56
|
+
|
57
|
+
With Worksheets
|
58
|
+
s = .Item("顧客管理").Range("D1").Value
|
59
|
+
ix = .Count
|
60
|
+
.Item("基礎").Copy after:=.Item(ix) '←シートを丸ごとコピー
|
61
|
+
With .Item(ix + 1)
|
62
|
+
.Name = s
|
63
|
+
.Cells(.Rows.Count, 1).End(xlUp).Offset(1).Value = s
|
64
|
+
End With
|
65
|
+
End With
|
66
|
+
End Sub
|
67
|
+
```
|
68
|
+
|
69
|
+
解説が必要な部分があれば、聞いてください。
|