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

回答編集履歴

1

追記

2020/01/01 09:08

投稿

mattuwan
mattuwan

スコア2167

answer CHANGED
@@ -16,4 +16,58 @@
16
16
  ResizeプロパティやOffsetプロパティを使って表現できるといいかもです。
17
17
 
18
18
  参考URL>>
19
- [Excel(エクセル) VBA入門:セル範囲の指定方法](http://www.eurus.dti.ne.jp/~yoneyama/Excel/vba/vba_cell.html)
19
+ [Excel(エクセル) VBA入門:セル範囲の指定方法](http://www.eurus.dti.ne.jp/~yoneyama/Excel/vba/vba_cell.html)
20
+
21
+ > ちなみに、B列に数字が入っており、コピーしたらそこだけ数字が
22
+ 一つ増えるようにしたい場合はどうしたらよいのでしょうか?
23
+ > AutoFill .Resize(.Rows.Count * 2), xlFillMonths
24
+ > のところを変えるのでしょうか?
25
+
26
+ ```ExcelVBA
27
+ Option Explicit
28
+
29
+ Sub test2()
30
+ Dim rngFrom As Range 'コピー元セル範囲
31
+ Dim rngTo As Range '貼付け先セル範囲
32
+ Dim ixRow As Long '使用しているセル範囲の行数
33
+ Dim i As Long 'オートフィルのタイプ
34
+
35
+ 'セル範囲の取得
36
+ With ActiveSheet.UsedRange
37
+ ixRow = .Rows.Count
38
+ Set rngFrom = Intersect(.Cells, .Offset(ixRow - 3))
39
+ Set rngTo = .Cells(ixRow + 1, 1).Resize(rngFrom.Rows.Count)
40
+ End With
41
+
42
+ 'コピー
43
+ rngFrom.Copy rngTo
44
+ '値の型によりオートフィルのタイプを変える
45
+ If TypeName(rngFrom.Cells(1).Value) = "Date" Then
46
+ i = xlFillMonths
47
+ Else
48
+ i = xlFillSeries
49
+ End If
50
+ 'オートフィル
51
+ With rngFrom.Columns(1)
52
+ .AutoFill Application.Range(.Cells, rngTo), i
53
+ End With
54
+ End Sub
55
+
56
+ ```
57
+ 条件により処理が変わるなら、
58
+ IF文を使い条件分岐します。
59
+
60
+ 参考サイト
61
+ [プロパティ、メソッドの探り方 マクロ記録とF1のHelpを使う](http://www.ken3.org/vba/excel-help.html)
62
+
63
+ ↑を参考にメソッドにどういう引数を与えたらいいかヘルプで確認してください。
64
+ (ヘルプの意味が解らなかったらネットで単語を検索してみること)
65
+ 1行1行意味の理解に努めていただけたら嬉しく思います。
66
+
67
+ う~ん。
68
+ 意味的には、
69
+ B列の最後のデータが結合されているセル範囲の15列分
70
+ が、コピー元のセル範囲なので、
71
+ コードにそう書いておいたほうが後で読んだとき(半年後や1年後)にわかりやすいですね。
72
+ ただ、結合セルにoffsetプロパティ適用すると変な値を返すので、
73
+ 冗舌な表現で書くしかなくなるのでコードがきれいでなくなるのが難点かな。