|
▼にしもり さん:
こんにちは
v = .Range("A2", .Range("A" & .Rows.Count).End(xlUp)).Offset(, 4).Value
これを
v = .Range("A2", .Range("A" & .Rows.Count).End(xlUp)).Offset(, 15).Value
このように直されましたね。
もともとの
v = .Range("A2", .Range("A" & .Rows.Count).End(xlUp)).Offset(, 4).Value
この意味は、
A2からA列最終データまでの1列の領域の4つ右の領域、つまりE列の領域です。
そのE列の領域を取り込んだ●行1列の配列に対して
ReDim Preserve v(1 To UBound(v, 1), 1 To 3) で、列を2つ追加。(F,G列用)
その追加した2列目、3列目に、1列目の値(元のE列の値)を参照しながら
1 をセットしていって、最後に、この3列分の配列を E2:G● までに、どさっと上書き。
こんな処理です。
ところが
v = .Range("A2", .Range("A" & .Rows.Count).End(xlUp)).Offset(, 15).Value
これは E列の領域ではなく、A列から15右、つまり、P列の領域になります。
おそらく、そこは空白でしょうから海でも山でもない。したがって、2列目、3列目に1がたたない。
で、その結果の3列(1列目は空白)を、E2:G●にどさっと上書きしますのですべて空白になります。
ところで、これだけ対象が増えたということを考えますと、別の方法(正規表現といわれるもの等)が
よろしいかとは思いますが、にしもりさんにとっては、きわめてわかりにくいコードになると
思われますので、現在の処理構成のままにしてあります。
Sub Sample2()
Dim v As Variant
Dim i As Long
With Sheets(1)
v = .Range("A2", .Range("A" & .Rows.Count).End(xlUp)).Offset(, 4).Value
ReDim Preserve v(1 To UBound(v, 1), 1 To 16) '★
For i = 1 To UBound(v, 1)
If v(i, 1) Like "*海*" Then v(i, 2) = 1
If v(i, 1) Like "*山*" Then v(i, 3) = 1
If v(i, 1) Like "*川*" Then v(i, 4) = 1
If v(i, 1) Like "*池*" Then v(i, 5) = 1
If v(i, 1) Like "*森*" Then v(i, 6) = 1
If v(i, 1) Like "*林*" Then v(i, 7) = 1
If v(i, 1) Like "*木*" Then v(i, 8) = 1
If v(i, 1) Like "*空*" Then v(i, 9) = 1
If v(i, 1) Like "*星*" Then v(i, 10) = 1
If v(i, 1) Like "*月*" Then v(i, 11) = 1
If v(i, 1) Like "*光*" Then v(i, 12) = 1
If v(i, 1) Like "*夢*" Then v(i, 13) = 1
If v(i, 1) Like "*幻*" Then v(i, 14) = 1
If v(i, 1) Like "*音*" Then v(i, 15) = 1
If v(i, 1) Like "*波*" Then v(i, 16) = 1
Next
.Range("E2").Resize(UBound(v, 1), UBound(v, 2)).Value = v
End With
End Sub
|
|