前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >VBA程序:在Excel中生成奇数阶魔方

VBA程序:在Excel中生成奇数阶魔方

作者头像
fanjy
发布2022-06-04 10:06:25
9380
发布2022-06-04 10:06:25
举报
文章被收录于专栏:完美Excel

标签:VBA

大家都知道魔方,因为经常会遇到它。魔方是正方形网格,它的最小尺寸为3×3。魔方中的整数只出现一次,所有单元格都填充数字。水平行、垂直列以及主对角线和次对角线的数字加起之和都相同。这个数字和就叫做魔法常数。

下面是构造奇数阶魔方的VBA代码,即可以创建大小为3×3、5×5、7×7、9×9、……的魔方。

创建奇数阶魔方的逻辑可以百度,并已体现在VBA编码中。程序将询问所需魔方的大小,并将从单元格B2开始创建魔方,并在创建的魔方周围设置粗边框。代码中将B2作为变量,这样,如果想更改起始单元格,就可以直接修改。

代码如下:

代码语言:javascript
复制
Sub MakeOddMagicSquare()
    Application.ScreenUpdating = False
    On Error GoTo Exit Sub
    Dim Size As Long, InputNumber As Long, r AsLong, c As Long, GridSize As Long
    Dim FirstRow As Long, FirstCol As Long,LastRow As Long, LastCol As Long
    Dim OriginalRow As Long, OriginalCol As Long
    Cells.Clear
    Size = Application.InputBox("魔方大小, 数字必须是大于2的奇数", Type:=1)
    If Size = 0 Then GoTo ExitSub
    '测试大小 -数字必须是奇数且应该 >=3
    If WorksheetFunction.IsEven(Size) Or Size< 3 Then
        MsgBox ("数字必须是奇数且不小于3")
        GoTo ExitSub
    End If
    '让魔方开始于单元格B2...当然,可以只是改变FirstRow和SecondRow
    FirstRow = 2
    FirstCol = 2
    LastRow = FirstRow + Size - 1
    LastCol = FirstCol + Size - 1
    '清除魔方区域
    Range(Cells(FirstRow - 1, FirstCol - 1),Cells(LastRow + 1, LastCol + 1)).Clear
    '根据尺寸参数确定中间列,行将保持不变
    '这将是放置值1的单元格
    r = FirstRow
    c = FirstCol - 1 +WorksheetFunction.RoundUp(Size / 2, 0)
    '确定元素个数
    GridSize = Size ^ 2
    '在这里放置值1
    InputNumber = 1
    Cells(r, c) = InputNumber
    '规则是上移和右移.如果在向上和向右移动的过程中,到了中心外面,那么需要绕过去
    '如果已经填写了数字,向下继续
    Do Until GridSize = 1
        GridSize = GridSize - 1
        OriginalRow = r
        OriginalCol = c
        r = r - 1
        If r < FirstRow Then r = LastRow
        c = c + 1
        If c > LastCol Then c = FirstCol
        If Cells(r, c) <> ""Then
           r = OriginalRow + 1
           c = OriginalCol
        End If
        InputNumber = InputNumber + 1
        Cells(r, c) = InputNumber
    Loop
    '在魔方周围应用粗边框
    Range(Cells(FirstRow, FirstCol),Cells(LastRow, LastCol)).BorderAround Weight:=xlMedium
    '自动调整魔方
    Cells.EntireColumn.AutoFit
    Cells.EntireRow.AutoFit
ExitSub:
    Application.ScreenUpdating = True
End Sub

运行代码后,获取的5阶魔方如下图1所示。

图1

注:代码整理自eforexcel.com,很有意思的一段程序。

欢迎在下面留言,完善本文内容,让更多的人学到更完美的知识。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-05-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 完美Excel 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档