Excel精英培训网

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

[已解决]转弯问题

[复制链接]
发表于 2009-12-3 12:53 | 显示全部楼层 |阅读模式
本帖最后由 爱疯 于 2013-4-21 11:54 编辑

AUprzp1N.rar (9.67 KB, 下载次数: 3)

发表于 2009-12-3 13:28 | 显示全部楼层

这个有错,不看了

[此贴子已经被作者于2009-12-3 13:37:50编辑过]
回复

使用道具 举报

发表于 2009-12-3 13:29 | 显示全部楼层

Sub Turn()
    Dim x, y, r%, c%, i%

    Cells.Clear
    x = InputBox("每列多少行", , 20)
    If x = "" Or x = 0 Then End
    y = InputBox("相隔多少空列", , 0)
    If y = "" Then End
  

    For i = 1 To 56
       r = i Mod x
       If r = 0 Then r = x
       c = Int(i / (x + 0.01)) * (y + 2) + 1
        Cells(r, c).Interior.ColorIndex = i
        Cells(r, c + 1) = i
    Next i
End Sub

回复

使用道具 举报

发表于 2009-12-3 13:37 | 显示全部楼层

汗。。。被你饶进去了。

根本不要mod啥的。

Sub Turn2()
    Dim x, y, r%, c%, i%, j%, myEnd%
    Cells.Clear
    x = InputBox("每列多少行", , 20)
    If x = "" Then End
    y = InputBox("相隔多少空列", , 0)
    If y = "" Then End
    y = y + 2
    i = 1
    myEnd = (56 \ x + 1) * y
    For c = 1 To myEnd Step y
        For r = 1 To x
            Cells(r, c).Interior.ColorIndex = i
            Cells(r, c + 1) = i
            i = i + 1
            If i = 57 Then Exit Sub
        Next r
    Next c
End Sub

回复

使用道具 举报

发表于 2009-12-3 13:51 | 显示全部楼层

[em01][em01][em01][em01]学一下
回复

使用道具 举报

 楼主| 发表于 2009-12-3 14:00 | 显示全部楼层

谢谢阿木、小富康!

r = i Mod x
If r = 0 Then r = x

之前我的竟然那样,真惨不忍睹。就想这样,可惜没想出来。
c = Int(i / (x + 0.01)) * (y + 2) + 1,
教下我们吧,这是为什么呀?

4楼的阿木的方法,我也是很难理解,阿木给我们也讲讲吧

[em04]
回复

使用道具 举报

发表于 2009-12-3 14:08 | 显示全部楼层

我知道了一列几个,一共有几列的话根本不需要再去求现在那个在第几列嘛。

Sub Turn2()
    Dim x, y, r%, c%, i%, j%, myEnd%
    Cells.Clear
    x = InputBox("每列多少行", , 20)
    If x = "" Then End
    y = InputBox("相隔多少空列", , 0)
    If y = "" Then End
    y = y + 2    '间隔+原来就需要两列
    i = 1        '颜色计数,从1开始
    myEnd = (56 \ x + 1) * y       '确定一共会有几列
    For c = 1 To myEnd Step y      '列循环,间隔就是Y。从第一列开始,每次增加(间隔+原本的两列)
        For r = 1 To x             '行循环,从1一直到x
            Cells(r, c).Interior.ColorIndex = i    '填充颜色
            Cells(r, c + 1) = i                    '填充数字
            i = i + 1                              '数字增加
            If i = 57 Then Exit Sub                '判断56种颜色是否都已经填充,若是则退出程序。
        Next r
    Next c
End Sub

回复

使用道具 举报

发表于 2009-12-3 14:09 | 显示全部楼层


Sub Turn()
    Dim RoMax As Byte
    Dim Ro As Byte
    Dim Col As Byte
    Dim ColMax
    Dim Cnt As Byte
    With ThisWorkbook.Sheets(1)
        .UsedRange.Clear
        RoMax = Application.InputBox("Input max row:", Default:=20)
        ColMax = (56 \ RoMax) * 2 + 1
        For Col = 1 To ColMax Step 2
            For Ro = 1 To RoMax
                Cnt = (Col \ 2) * RoMax + Ro
                If Cnt = 57 Then Exit Sub
                .Cells(Ro, Col).Interior.ColorIndex = Cnt
                .Cells(Ro, Col + 1) = Cnt
            Next Ro
        Next Col
    End With
End Sub
回复

使用道具 举报

发表于 2009-12-3 14:12 | 显示全部楼层


Sub Turn()
    Dim RoMax As Byte
    Dim Ro As Byte
    Dim Col As Byte
    Dim ColMax
    Dim Cnt As Byte
    With ThisWorkbook.Sheets(1)
        .UsedRange.Clear
        RoMax = Application.InputBox("Input max row:", Default:=20)
        ColMax = (56 \ RoMax) * 2 + 1
        For Col = 1 To ColMax Step 2
            For Ro = 1 To RoMax
'                Cnt = (Col \ 2) * RoMax + Ro'这个地方其实都不用这样计算,可以直接从1开始计数了,所以简化成cnt=cnt+1
                Cnt = Cnt + 1
                If Cnt = 57 Then Exit Sub
                .Cells(Ro, Col).Interior.ColorIndex = Cnt
                .Cells(Ro, Col + 1) = Cnt
            Next Ro
        Next Col
    End With
End Sub
回复

使用道具 举报

发表于 2009-12-3 14:14 | 显示全部楼层

空多少列那个inputbox是不是多余了?

两列一个step是固定的呀?还是我没看懂?

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-3-29 17:38 , Processed in 0.761116 second(s), 9 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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