回答編集履歴

4

説明追記

2020/08/06 13:55

投稿

hatena19
hatena19

スコア34075

test CHANGED
@@ -35,3 +35,9 @@
35
35
 
36
36
 
37
37
  [最終行・最終列の取得方法(End,CurrentRegion,SpecialCells,UsedRange)|VBA技術解説](https://excel-ubara.com/excelvba4/EXCEL222.html)
38
+
39
+
40
+
41
+ 上記でも解説されてますが、UsedRange だと書式を設定(罫線とか背景色等)すると、そこも範囲になります。
42
+
43
+ データが入力されている領域の最終列ということなら、CurrentRegion を使った方かいいでしょう。

3

説明追記

2020/08/06 13:55

投稿

hatena19
hatena19

スコア34075

test CHANGED
@@ -25,3 +25,13 @@
25
25
  last = r.Columns(r.Columns.Count).Column
26
26
 
27
27
  ```
28
+
29
+
30
+
31
+ 最終列の番号取得には他にもいろいろな方法があります。
32
+
33
+ また、注意点もあります。下記に詳しく解説されています。
34
+
35
+
36
+
37
+ [最終行・最終列の取得方法(End,CurrentRegion,SpecialCells,UsedRange)|VBA技術解説](https://excel-ubara.com/excelvba4/EXCEL222.html)

2

コード修正

2020/08/06 13:49

投稿

hatena19
hatena19

スコア34075

test CHANGED
@@ -1,11 +1,27 @@
1
1
  ```vba
2
2
 
3
- ' Set r = Worksheets("城").UsedRange.Select
3
+ Dim r As Range
4
4
 
5
- ' .Select が不要、Select はメソッド(選択するという動作)であってオブジェクトではない
5
+ ' Dim last As Range
6
6
 
7
+ ' 列番号は数値なので Range型ではなく、Long型
8
+
9
+ Dim last As Long
10
+
11
+
12
+
13
+ ' Set r = Worksheets("城").UsedRange.Select
14
+
15
+ ' .Select が不要、Select はメソッド(選択するという動作)であってオブジェクトではない
16
+
7
- Set r = Worksheets("城").UsedRange
17
+ Set r = Worksheets("城").UsedRange
18
+
19
+
20
+
21
+ ' last = Range("r").Column
22
+
23
+ ' Range("r") などという指定はできない
24
+
25
+ last = r.Columns(r.Columns.Count).Column
8
26
 
9
27
  ```
10
-
11
- ここが通っても後がエラーになりますけど。

1

説明追記

2020/08/06 13:37

投稿

hatena19
hatena19

スコア34075

test CHANGED
@@ -7,3 +7,5 @@
7
7
  Set r = Worksheets("城").UsedRange
8
8
 
9
9
  ```
10
+
11
+ ここが通っても後がエラーになりますけど。