回答編集履歴

1

追記

2019/07/31 10:04

投稿

mattuwan
mattuwan

スコア2167

answer CHANGED
@@ -4,4 +4,60 @@
4
4
  For~Next文で繰り返し列を移動しながら最終行を探索し、
5
5
  If~Then~文で比較して大きい方を変数に書き換えて記録していきます。
6
6
 
7
- こんな説明でわかりますか?
7
+ こんな説明でわかりますか?
8
+
9
+ その後、質問者さんの反応がないけど、、、、
10
+ ループして最大値を探すのは、If~Then~や変数の使い方も含めて、基本中の基本なので、
11
+ 自分で思いついて、自分で書けるようになりましょう。
12
+ この辺は経験なので、試験用の勉強だけでは辛いかもです。
13
+
14
+ 他の方も書いておられますが、僕が書いたらこんな感じ、、、、
15
+
16
+ ```ExcelVBA
17
+ Sub test1()
18
+ Dim rngTable As Range '表のセル範囲(シート上の使用している範囲)
19
+ Dim rngTarget As Range 'コピーしたいセル範囲
20
+ Dim c As Range '各セル
21
+ Dim ix As Long '行番号
22
+ Dim ixMax As Long '最大データ行番号
23
+
24
+ '表のセル範囲を取得して変数に記録
25
+ Set rngTable = Sheets("Sheet1").UsedRange
26
+
27
+ '列毎に繰り返し見て行き最大データ行を調べる
28
+ For Each c In rngTable.Columns
29
+ ix = c.Cells(c.Cells.Count + 1, 1).End(xlUp).Row
30
+ If ixMax < x Then ixMax = ix
31
+ Next
32
+
33
+ '取得した最大行番号でコピー
34
+ With rngTable
35
+ .Range(.Cells(2, 1), .Cells(ixMax + 1, .Columns.Count)).Copy
36
+ End With
37
+
38
+ '貼付
39
+ With Sheets("Sheet2")
40
+ .Paste .Range("A2")
41
+ End With
42
+ End Sub
43
+ ```
44
+
45
+ 自分でループ処理を書かなければ、こんな感じですかね。。。
46
+ ```ExcelVBA
47
+ Sub test2()
48
+ Dim rngTable As Range: Set rngTable = ActiveSheet.UsedRange
49
+ Dim rngBottom As Range
50
+
51
+ With rngTable
52
+ With .SpecialCells(xlCellTypeConstants)
53
+ Set rngBottom = .Areas(.Areas.Count).EntireRow
54
+ End With
55
+ Set rngBottom = Intersect(.Cells, rngBottom)
56
+ End With
57
+ Application.Range(rngTable.Rows(2), rngBottom).Select
58
+ End Sub
59
+ ```
60
+ 勘で書いたので、もしかしたら不具合があるかもです。
61
+ シート上の値の配置パターンにより、意図しない結果になる場合は、
62
+ その配置のパターンをお教え下さい。
63
+ 暇があれば対応策を考えてみます。