○第14回目 データ処理マクロの基礎2-2
続きです。
今回は行単位で検査を行なう部分です。
大体のところは変わらないのですが、最小単位の検査で、行でなく列を動かして探すということです。
ですから本体は変わりません。
まず最初は、1が一行目にあるかどうかを見ればいいのです。
ii=1
flag=1
for j=0 to 8
if cells(4,3+j) = ii then
flag=9
exit for
end if
next j
検査結果を入れる場所は、O15なのでcells(15,15)=cells(14+ii,15)となります。
if flag=9 then
cells(15,15)=9
else
cells(15,15)=1
end if
ここに、数値が1-9まで動くことから、for文で包み込みます。
for i=0 to 8
ii=i+1
flag=1
for j=0 to 8
if cells(4,3+j) = ii then
flag=9
exit for
end if
next j
' 検査結果を入れる場所は、15からなのでcells(14+ii,15)となります。
if flag=9 then
cells(14+ii,15)=9
else
cells(14+ii,15)=1
end if
next i
これで、次に、行を動かしていくのです。
前回と同様に、kのfor文で包み込みます。
for k=0 to 8
for i=0 to 8
ii=i+1
flag=1
for j=0 to 8
if cells(4,3+j) = ii then '=⇒4を動かす必要がある⇒4+k
flag=9
exit for
end if
next j
'検査結果を入れる場所は、O15なのでcells(15,15)=cells(14+ii,15)となります。
if flag=9 then
cells(14+ii,15)=9 '=⇒14+iiを工夫する必要がある⇒14+ii+k*9
else
cells(14+ii,15)=1 '=⇒14+iiを工夫する必要がある⇒14+ii+k*9
end if
next i
next k
この文を前回のものに追加すると、列、行での検査が終わります。
※ご注意
これは数独の解法の解説ではありません。あくまでもセルのコントロールの仕方を説明しているのですので、誤解なきように。

0 件のコメント:
コメントを投稿