回答編集履歴

1

追記

2020/01/01 09:08

投稿

mattuwan
mattuwan

スコア2163

test CHANGED
@@ -35,3 +35,111 @@
35
35
  参考URL>>
36
36
 
37
37
  [Excel(エクセル) VBA入門:セル範囲の指定方法](http://www.eurus.dti.ne.jp/~yoneyama/Excel/vba/vba_cell.html)
38
+
39
+
40
+
41
+ > ちなみに、B列に数字が入っており、コピーしたらそこだけ数字が
42
+
43
+ 一つ増えるようにしたい場合はどうしたらよいのでしょうか?
44
+
45
+ > AutoFill .Resize(.Rows.Count * 2), xlFillMonths
46
+
47
+ > のところを変えるのでしょうか?
48
+
49
+
50
+
51
+ ```ExcelVBA
52
+
53
+ Option Explicit
54
+
55
+
56
+
57
+ Sub test2()
58
+
59
+ Dim rngFrom As Range 'コピー元セル範囲
60
+
61
+ Dim rngTo As Range '貼付け先セル範囲
62
+
63
+ Dim ixRow As Long '使用しているセル範囲の行数
64
+
65
+ Dim i As Long 'オートフィルのタイプ
66
+
67
+
68
+
69
+ 'セル範囲の取得
70
+
71
+ With ActiveSheet.UsedRange
72
+
73
+ ixRow = .Rows.Count
74
+
75
+ Set rngFrom = Intersect(.Cells, .Offset(ixRow - 3))
76
+
77
+ Set rngTo = .Cells(ixRow + 1, 1).Resize(rngFrom.Rows.Count)
78
+
79
+ End With
80
+
81
+
82
+
83
+ 'コピー
84
+
85
+ rngFrom.Copy rngTo
86
+
87
+ '値の型によりオートフィルのタイプを変える
88
+
89
+ If TypeName(rngFrom.Cells(1).Value) = "Date" Then
90
+
91
+ i = xlFillMonths
92
+
93
+ Else
94
+
95
+ i = xlFillSeries
96
+
97
+ End If
98
+
99
+ 'オートフィル
100
+
101
+ With rngFrom.Columns(1)
102
+
103
+ .AutoFill Application.Range(.Cells, rngTo), i
104
+
105
+ End With
106
+
107
+ End Sub
108
+
109
+
110
+
111
+ ```
112
+
113
+ 条件により処理が変わるなら、
114
+
115
+ IF文を使い条件分岐します。
116
+
117
+
118
+
119
+ 参考サイト
120
+
121
+ [プロパティ、メソッドの探り方 マクロ記録とF1のHelpを使う](http://www.ken3.org/vba/excel-help.html)
122
+
123
+
124
+
125
+ ↑を参考にメソッドにどういう引数を与えたらいいかヘルプで確認してください。
126
+
127
+ (ヘルプの意味が解らなかったらネットで単語を検索してみること)
128
+
129
+ 1行1行意味の理解に努めていただけたら嬉しく思います。
130
+
131
+
132
+
133
+ う~ん。
134
+
135
+ 意味的には、
136
+
137
+ B列の最後のデータが結合されているセル範囲の15列分
138
+
139
+ が、コピー元のセル範囲なので、
140
+
141
+ コードにそう書いておいたほうが後で読んだとき(半年後や1年後)にわかりやすいですね。
142
+
143
+ ただ、結合セルにoffsetプロパティ適用すると変な値を返すので、
144
+
145
+ 冗舌な表現で書くしかなくなるのでコードがきれいでなくなるのが難点かな。