Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 2161|回复: 0

求大神改善三链数法代码

[复制链接]
发表于 2016-2-27 21:04 | 显示全部楼层 |阅读模式
本帖最后由 lingyuncelia1 于 2016-2-29 10:08 编辑

1.jpg
本人想写一个数独的三链数法代码。
在前9个单元格中,红色数字是候选数,候选数是大于一位的,每个格的红色数的数字绝不重复(如B1:157,绝对不会出现155之类),且是升序排列的(如B1:157,绝对不会是175或751之类)。如果我们发现前9格有三个格子只使用了三个候选数(肉眼发现是457),那么这三个格子(最后3格的数字全部包含于K1内的457)必然正好是这三个数字,那么在这9格中,其它格子不会出现这三个候选数(因此B1的数字5与7去掉,F1的4去掉),这就是三链数法。
如上图,运行以下代码,变右图: 2.jpg
Sub ba()
Dim reg, s As Range, m, n As Integer
Set reg = CreateObject("vbscript.regexp")
With reg
    .Global = True
    .Pattern = "[" & [k1] & "]"
    For Each s In Range("a1:i1")
        Set m = .Execute(s.Value)
        If Len(s) = 3 And m.Count = 3 Then s.Font.Size = 36
        If Len(s) = 2 And m.Count = 2 Then s.Font.Size = 36
        If s.Font.Size = 36 Then n = n + 1
    Next
End With
Set reg = Nothing
If n = 3 Then
a = Mid(Cells(1, 11).Text, 1, 1)
b = Mid(Cells(1, 11).Text, 2, 1)
c = Mid(Cells(1, 11).Text, 3, 1)
For Each s In Range("a1:i1")
  If s.Font.Size = 11 Then s.Value = Replace(s.Text, a, ""): s.Value = Replace(s.Text, b, ""): s.Value = Replace(s.Text, c, "")
Next
Else
For Each s In Range("a1:i1")
If s.Font.Size = 36 Then s.Font.Size = 11
Next
End If
End Sub

但是,如果将代码改成以下这样则无效,为什么呢?

Sub ba()
Dim reg, s As Range, m, n As Integer
For a = 1 To 7
For b = a + 1 To 8
  For c = b + 1 To 9
Set reg = CreateObject("vbscript.regexp")
With reg
    .Global = True
    .Pattern = "[a & b & c]"
    For Each s In Range("a1:i1")
        Set m = .Execute(s.Value)
        If Len(s) = 3 And m.Count = 3 Then s.Font.Size = 36
        If Len(s) = 2 And m.Count = 2 Then s.Font.Size = 36
        If s.Font.Size = 36 Then n = n + 1
    Next
End With
Set reg = Nothing
If n = 3 Then
For Each s In Range("a1:i1")
  If s.Font.Size = 11 Then s.Value = Replace(s.Text, a, ""): s.Value = Replace(s.Text, b, ""): s.Value = Replace(s.Text, c, "")
Next
Else
For Each s In Range("a1:i1")
If s.Font.Size = 36 Then s.Font.Size = 11
Next
End If
  Next c
Next b
Next a
End Sub





小夜曲.zip

17.09 KB, 下载次数: 1

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-5-3 05:59 , Processed in 0.359806 second(s), 13 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表