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

回答編集履歴

2

コード追加

2019/12/24 03:58

投稿

hatena19
hatena19

スコア34367

answer CHANGED
@@ -10,4 +10,21 @@
10
10
 
11
11
  hoge.Value = 123
12
12
  hoge.Areas(2)(1) = 55 '2つ目のエリア(C1:C3)の最初のセル(C1)
13
+ ```
14
+
15
+ > A列HITで、offset(1,5)と取得しなければならないが、
16
+ A列とE列のみを引っ張り、offset(1,2)のように取得したいため
17
+
18
+ 2だろうが5だろうがマジックナンバーには変わりないので、
19
+ 可読性を重視したいということなら、私なら下記のような実装にするかな。
20
+ ```vba
21
+ With ThisWorkbook.Worksheets("Sheet1")
22
+ Dim keyRng As Range: Set keyRng = .Range("A1:A1000")
23
+ Dim valueRng As Range: Set valueRng = .Range("E1:E1000")
24
+ End With
25
+
26
+ Dim FoundCell As Range
27
+ Set FoundCell = keyRng.Find(What:="hoge")
28
+
29
+ valueRng(FoundCell.Row) = "HIT"
13
30
  ```

1

サンプルコード追記

2019/12/24 03:58

投稿

hatena19
hatena19

スコア34367

answer CHANGED
@@ -1,4 +1,13 @@
1
1
  Rangeは配列ではないですからね。
2
2
  `hoge(1, 2) = 55`は、実際は`hoge.Cells.Item(1, 2) = 55`です。(.Cells.Itemは既定のプロパティなので省略できる)
3
3
  [Range.Item プロパティ (Excel) | Microsoft Docs](https://docs.microsoft.com/ja-jp/office/vba/api/excel.range.item)
4
- 上記のヘルプに「返される範囲の最初の領域の左上のセルへの相対的な1ベースのオフセットです。」との記述があります。
4
+ 上記のヘルプに「返される範囲の最初の領域の左上のセルへの相対的な1ベースのオフセットです。」との記述があります。
5
+
6
+ 極力シンプルに記述するなら下記のような感じでしょうか。
7
+ ```vba
8
+ Dim hoge As Range
9
+ Set hoge = ThisWorkbook.Worksheets("Sheet1").Range("A1:A3,C1:C3")
10
+
11
+ hoge.Value = 123
12
+ hoge.Areas(2)(1) = 55 '2つ目のエリア(C1:C3)の最初のセル(C1)
13
+ ```