2007年6月30日土曜日

第14回目 データ処理マクロの基礎2-2

○第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 件のコメント: