回答編集履歴

3

重複を削除

2022/07/21 03:53

投稿

hatena19
hatena19

スコア33740

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

コード追記

2022/07/21 02:49

投稿

hatena19
hatena19

スコア33740

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

コードに間違いがあったので削除

2022/07/21 02:20

投稿

hatena19
hatena19

スコア33740

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