Excel精英培训网

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

[已解决]生成的数据列数超过excel最大列

[复制链接]
发表于 2016-7-12 09:28 | 显示全部楼层 |阅读模式
本帖最后由 hanjia 于 2016-7-12 19:22 编辑

代码需要495列以上的单元格才能显示完  但是每张表从J1轻IV1只有247
所有247+247=494  所以2张表完成不了   需要3张表才能全部显示出来
现在是到 Sheet2.Range("j2").Offset(0, x - 246).Resize(UBound(brr)) = brr 就停住了
让他在到下张表继续生成
工作表101.zip (12.76 KB, 下载次数: 6)
发表于 2016-7-12 11:28 | 显示全部楼层
你的文件是xls,最大到256列,493-246=247列,从J列offset 247列为257列,超出限制。
把493改为492,或者文件改为xlsm形式的就行了。

把文件改为xlsm形式后,就不需要分几表了。

工作表101.rar

17.79 KB, 下载次数: 3

回复

使用道具 举报

 楼主| 发表于 2016-7-12 11:53 | 显示全部楼层
grf1973 发表于 2016-7-12 11:28
你的文件是xls,最大到256列,493-246=247列,从J列offset 247列为257列,超出限制。
把493改为492,或者文 ...

这些都不是目的啊
数据远不只这些,只能用分页才能完成
回复

使用道具 举报

发表于 2016-7-12 15:07 | 显示全部楼层
hanjia 发表于 2016-7-12 11:53
这些都不是目的啊
数据远不只这些,只能用分页才能完成

Sub Macro1()
Dim arr, brr, i&, j%, k%
arr = Range("a1:f" & [a65536].End(3).Row)
ReDim brr(1 To UBound(arr), 1 To 1)
arr1 = Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12)
ReDim w(0 To 494)
  For i = 0 To UBound(arr1) - 3
      For j = 1 To UBound(arr1) - 2
      If j > i Then
          For k = 2 To UBound(arr1) - 1
          If k > j Then
              For l = 3 To UBound(arr1) - 0
              If l > k Then
                   w(x) = Array(arr1(i), arr1(j), arr1(k), arr1(l))
                   x = x + 1
              End If
              Next
          End If
          Next
      End If
      Next
  Next
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
For x = 0 To UBound(w)
    For i = 2 To UBound(arr)
        s = 0
        For j = 1 To UBound(arr, 2)
            For k = 0 To UBound(w(x))
                If arr(i, j) = w(x)(k) Then s = s + 1
            Next
            If s >= 3 Then brr(i, 1) = 0: Exit For
        Next
        If s < 3 Then brr(i, 1) = brr(i - 1, 1) + 1
    Next
If x <= 246 Then
       Range("j2").Offset(0, x).Resize(UBound(brr)) = brr
ElseIf x >= 247 And x <= 493 Then
    Sheet2.Range("j2").Offset(0, x - 247).Resize(UBound(brr)) = brr
Else
    Sheet3.Range("j2").Offset(0, x - 493).Resize(UBound(brr)) = brr
End If
Next
End Sub
回复

使用道具 举报

 楼主| 发表于 2016-7-12 16:17 | 显示全部楼层

生成的数据列数超过excel最大列

scl5801 发表于 2016-7-12 15:07
Sub Macro1()
Dim arr, brr, i&, j%, k%
arr = Range("a1:f" & [a65536].End(3).Row)

先谢谢
还是不太明白你这增加法   后来我这样增加的
这样最后不知道代码会不会太长了   因为得增加10多个表
If x <= 246 Then
       Range("j2").Offset(0, x).Resize(UBound(brr)) = brr
    Else
       If x < 493 Then
       Sheet2.Range("j2").Offset(0, x - 246).Resize(UBound(brr)) = brr
      Else
       If x < 740 Then
         Sheet3.Range("j2").Offset(0, x - 493).Resize(UBound(brr)) = brr
      Else
       If x < 987 Then
         Sheet4.Range("j2").Offset(0, x - 740).Resize(UBound(brr)) = brr
      Else
         Sheet5.Range("j2").Offset(0, x - 987).Resize(UBound(brr)) = brr
      End If
    End If
    End If
    End If
回复

使用道具 举报

发表于 2016-7-12 16:18 | 显示全部楼层
xlsm表有16384 列,还不够你挥霍?
回复

使用道具 举报

 楼主| 发表于 2016-7-12 16:20 | 显示全部楼层
grf1973 发表于 2016-7-12 16:18
xlsm表有16384 列,还不够你挥霍?

是的  需要20多万呢
回复

使用道具 举报

发表于 2016-7-12 16:34 | 显示全部楼层
hanjia 发表于 2016-7-12 16:20
是的  需要20多万呢

在上一个elseif 条件下边 一直添加以下句子,改一下数值和添加的表格数就行。
ElseIf x >= 247 And x <= 493 Then
     Sheet2.Range("j2").Offset(0, x - 247).Resize(UBound(brr)) = brr
回复

使用道具 举报

 楼主| 发表于 2016-7-12 16:42 | 显示全部楼层
本帖最后由 hanjia 于 2016-7-12 16:48 编辑
scl5801 发表于 2016-7-12 16:34
在上一个elseif 条件下边 一直添加以下句子,改一下数值和添加的表格数就行。
ElseIf x >= 247 And x

是这样一直添加下去吗?????
If x <= 246 Then
        Range("j2").Offset(0, x).Resize(UBound(brr)) = brr     
  ElseIf  x >= 247  and x <= 1000 Then
        Sheet2.Range("j2").Offset(0, x - 246).Resize(UBound(brr)) = brr
        Sheet3.Range("j2").Offset(0, x - 493).Resize(UBound(brr)) = brr
        Sheet4.Range("j2").Offset(0, x - 740).Resize(UBound(brr)) = brr
        Sheet5.Range("j2").Offset(0, x - 987).Resize(UBound(brr)) = brr
       End If
Next
End Sub

回复

使用道具 举报

发表于 2016-7-12 16:49 | 显示全部楼层    本楼为最佳答案   
本帖最后由 scl5801 于 2016-7-12 16:51 编辑
hanjia 发表于 2016-7-12 16:42
是这样一直添加下去吗?????
If x = 247  and x

ElseIf x >= 247 And x <= 493 Then
      Sheet2.Range("j2").Offset(0, x - 247).Resize(UBound(brr)) = brr
ElseIf x >= 493 And x <= 700 Then
      Sheet3.Range("j2").Offset(0, x - 494).Resize(UBound(brr)) = brr
ElseIf x >= 700 And x <= 900 Then
      Sheet4.Range("j2").Offset(0, x - 701).Resize(UBound(brr)) = brr
.。。。。。。。。。。。。
ElseIf x >= n1    And x <= n 2   Then
      Sheetn.Range("j2").Offset(0, x - n1).Resize(UBound(brr)) = brr

评分

参与人数 1 +3 收起 理由
hanjia + 3 神马都是浮云

查看全部评分

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-14 21:17 , Processed in 0.354892 second(s), 13 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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