質問するログイン新規登録

回答編集履歴

1

追記

2020/08/22 00:32

投稿

mattuwan
mattuwan

スコア2167

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
+ 解説が必要な部分があれば、聞いてください。