回答編集履歴
3
重複を削除
test
CHANGED
@@ -1,13 +1,7 @@
|
|
1
1
|
`Cells(r, 2).Copy` の r はセル(Rangeオブジェクト)です。Cellsの引数は行番号, 列番号 の数値になります。
|
2
2
|
数値にしなければならないところに、Rangeオブジェクトを置いてますのでエラーになります。
|
3
3
|
|
4
|
-
その他、意味を理解せずに適当にどこからか引っ張ってきた無意味
|
4
|
+
その他、意味を理解せずに適当にどこからか引っ張ってきた無意味なコードが散見されます。
|
5
|
-
一度基礎から学習するか、ひとつひとつのコードをヘルプ等で理解することをお勧めします。
|
6
|
-
|
7
|
-
`Cells(r, 2).Copy` の r はセル(Rangeオブジェクト)です。Cellsの引数は行番号, 列番号 の数値になります。
|
8
|
-
数値にしなければならないところに、Rangeオブジェクトを置いてますのでエラーになります。
|
9
|
-
|
10
|
-
その他、意味を理解せずに適当にどこからか引っ張ってきた無意味にコードが散見されます。
|
11
5
|
一度基礎から学習するか、ひとつひとつのコードをヘルプ等で理解することをお勧めします。
|
12
6
|
|
13
7
|
---
|
2
コード追記
test
CHANGED
@@ -4,5 +4,32 @@
|
|
4
4
|
その他、意味を理解せずに適当にどこからか引っ張ってきた無意味にコードが散見されます。
|
5
5
|
一度基礎から学習するか、ひとつひとつのコードをヘルプ等で理解することをお勧めします。
|
6
6
|
|
7
|
+
`Cells(r, 2).Copy` の r はセル(Rangeオブジェクト)です。Cellsの引数は行番号, 列番号 の数値になります。
|
8
|
+
数値にしなければならないところに、Rangeオブジェクトを置いてますのでエラーになります。
|
9
|
+
|
10
|
+
その他、意味を理解せずに適当にどこからか引っ張ってきた無意味にコードが散見されます。
|
11
|
+
一度基礎から学習するか、ひとつひとつのコードをヘルプ等で理解することをお勧めします。
|
12
|
+
|
13
|
+
---
|
14
|
+
これって簡単そうで意外と難しいですね。最初、ループで上から移動しながら"HighBlack"なら上下にコピーするコードにしたら、
|
15
|
+
次のセルの値が"HighBlack"に代わるのでそれ以降はすべてコピーすることになってしまいます。
|
16
|
+
|
17
|
+
対策はいろいろありますが、最初に対象セル範囲を配列に格納しておいて、そちらで一致するかをチェックするコードにしてみました。
|
18
|
+
|
19
|
+
```vba
|
20
|
+
Sub 六つに割り当て1()
|
21
|
+
Dim ary() As Variant
|
22
|
+
ary = Range("B7", Cells(Rows.Count, 2).End(xlUp)).Value '処理対象セル範囲を配列に
|
23
|
+
|
24
|
+
Dim i As Long
|
25
|
+
For i = 1 To UBound(ary)
|
26
|
+
If ary(i, 1) = "HighBlack" Then
|
27
|
+
Cells(i, 2).Resize(6).Value = ary(i, 1) '上6行分に張り付け
|
28
|
+
Cells(i + 7, 2).Resize(5).Value = ary(i, 1) '下5行分に張り付け
|
29
|
+
End If
|
30
|
+
Next
|
31
|
+
End Sub
|
32
|
+
```
|
7
33
|
|
8
34
|
|
35
|
+
|
1
コードに間違いがあったので削除
test
CHANGED
@@ -4,24 +4,5 @@
|
|
4
4
|
その他、意味を理解せずに適当にどこからか引っ張ってきた無意味にコードが散見されます。
|
5
5
|
一度基礎から学習するか、ひとつひとつのコードをヘルプ等で理解することをお勧めします。
|
6
6
|
|
7
|
-
現状のコードから無駄なコードを削除して、まとめた参考コードが下記になります。
|
8
|
-
|
9
|
-
```vba
|
10
|
-
Sub 六つに割り当て()
|
11
|
-
Dim r As Range, myRange As Range
|
12
|
-
Set myRange = Intersect(Range("B:B"), UsedRange) '使用済みセル範囲のB列
|
13
|
-
'対象セル範囲を1セルずつ繰り返し処理
|
14
|
-
For Each r In myRange
|
15
|
-
If r.Value = "HighBlack" Then
|
16
|
-
r.Copy
|
17
|
-
r.Offset(-6).Resize(6).PasteSpecial '上6行分に張り付け
|
18
|
-
r.Offset(1).Resize(5).PasteSpecial '下5行分に張り付け
|
19
|
-
Application.CutCopyMode = False
|
20
|
-
End If
|
21
|
-
Next r
|
22
|
-
End Sub
|
23
|
-
```
|
24
|
-
|
25
|
-
"HighBlack"のセルが6行目より上にある場合は、エラーになりますので、可能性があるなら対策するコードを追加する必要があります。
|
26
7
|
|
27
8
|
|