|
▼M さん:
こんばんは。
>
>基準になる表が必要な事が良く分かりました。
>それを別シートに作成して活用する事ですね。汎用性があって今後また
>他のところにも、使わせていただきます。
>素晴らしいマクロに、ちょっとついていけないのが事実です。
素晴らしいか否かはともかく、M さんが投稿されたコードと比較して
私が投稿したコードのアルゴリズムは単純です。
M さんのやろうとしている事は
かなりややこしいんですよ!!
これは、
>>Sub 表の補完作成1()
>
>Dim i As Integer
>
For i = Cells(65536, 2).End(xlUp).Row to 5 step -1
>
>If Cells(i, 1) = "102" Then
>Cells(i, 1).Offset(1).Select
>
>If Selection.Value <> "103" Then
>Range(Selection, Selection.Offset(, 5)).Select
> Selection.Insert shift:=xlDown
>ActiveCell.Value = "103"
>ActiveCell.Offset(, 1).Value = "PPP"
>ActiveCell.Offset(, 2).Value = "0"
>ActiveCell.Offset(, 3).Value = "0"
>ActiveCell.Offset(, 4).Value = "0"
>ActiveCell.Offset(, 5).Value = "0"
>End If
>End If
>
>If Cells(i, 1) = "104" Then
>Cells(i, 1).Offset(1).Select
>
>If Selection.Value <> "105" Then
>Range(Selection, Selection.Offset(, 5)).Select
> Selection.Insert shift:=xlDown
>ActiveCell.Value = "105"
>ActiveCell.Offset(, 1).Value = "EEE"
>ActiveCell.Offset(, 2).Value = "0"
>ActiveCell.Offset(, 3).Value = "0"
>ActiveCell.Offset(, 4).Value = "0"
>ActiveCell.Offset(, 5).Value = "0"
>End If
>End If
>
>If Cells(i, 1) = "107" Then
>Cells(i, 1).Offset(1).Select
>
>If Selection.Value <> "108" Then
>Range(Selection, Selection.Offset(, 5)).Select
> Selection.Insert shift:=xlDown
>ActiveCell.Value = "108"
>ActiveCell.Offset(, 1).Value = "GGG"
>ActiveCell.Offset(, 2).Value = "0"
>ActiveCell.Offset(, 3).Value = "0"
>ActiveCell.Offset(, 4).Value = "0"
>ActiveCell.Offset(, 5).Value = "0"
>
>End If
>End If
>
>Next
>End Sub
とすれば、動作すると思いますが、
これだと汎用性はないですよね?
これを私はこういうアルゴリズムで作成する事はないですが、
'=============================================================
Sub 表の補完作成1()
Dim i As Long
Dim chkarray1 As Variant
Dim chkarray2 As Variant
Dim jdx As Long
chkarray1 = Array(101, 102, 103, 104, 105, 107, 108, 109)
chkarray2 = Array("AAA", "BBB", "PPP", "DDD", "EEE", "FFF", "GGG", "HHH")
jdx = UBound(chkarray1)
i = Cells(65536, 1).End(xlUp).Row
Do Until jdx < 0
With Cells(i, 1)
If .Value <> chkarray1(jdx) Then
.Offset(1).EntireRow.Insert shift:=xlDown
.Offset(1, 0).Value = chkarray1(jdx)
.Offset(1, 1).Value = chkarray2(jdx)
.Offset(1, 2).Resize(, 4).Value = 0
Else
If i >= 5 Then i = i - 1
End If
End With
jdx = jdx - 1
Loop
End Sub
これで確認してみて下さい。
アルゴリズムは、こっちの方がややこしいですよ!!
|
|