| 
    
     |  | ▼にしもり さん: 
 こんにちは
 
 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
 
 |  |