Excel精英培训网

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

[已解决]大师帮忙看一下我该怎么判断?

[复制链接]
发表于 2011-12-19 16:38 | 显示全部楼层 |阅读模式
Sub tt()
    Dim x As Integer, s As Integer
    For x = 2 To 10 Step 1
    For s = 2 To 100 Step 1
    If Sheet("sheet1").Range("a2:a100") <> "" And Sheet("sheet1").Range("b2:b100") <> "" Then
           Range("c" & x) = Evaluate("=MAX((Sheet1!A$2:A$65=A" & x & ")*(Sheet1!B$2:B$57=B" & x & ")*Sheet1!C$2:C$65)")
    ElseIf Sheet("sheet1").Range("a2:a100") = "" And Sheet("sheet1").Range("b2:b100") = "" Then
           Range("c" & x) = ""
    Next x
    Next s
    End If
End Sub
最佳答案
2012-1-21 02:52
本帖最后由 happym8888 于 2012-1-21 10:56 编辑

不是大师,互相学习吧,看你的代码:
  1. Sub tt()
  2. Dim x As Integer, s As Integer
  3. For x = 2 To 10 Step 1
  4. For s = 2 To 100 Step 1
  5. If Sheet("sheet1").Range("a2:a100") <> "" And Sheet("sheet1").Range("b2:b100") <> "" Then
  6. Range("c" & x) = Evaluate("=MAX((Sheet1!A$2:A$65=A" & x & ")*(Sheet1!B$2:B$57=B" & x & ")*Sheet1!C$2:C$65)")
  7. ElseIf Sheet("sheet1").Range("a2:a100") = "" And Sheet("sheet1").Range("b2:b100") = "" Then
  8. Range("c" & x) = ""
  9. Next x
  10. Next s
  11. End If
  12. End Sub
复制代码

1. 首先,Sheet("sheet1")这种表达方法不对,应该是Sheets("sheet1"),有4处要修改;
2. 其次,下面的Next x和 Next s要互换位置;
3. End IF要挪动到循环语句的里面去,就是放在两个Next的上面一行;
4. Range("a2:a100") <> "" 这个表达方法不对,不等号前面是一个区域,不是一个单元格,试想一下,要是这个区域里面有的是空、有的有数据,这个不等号到底成立不成立呢?再说,你的循环变量s怎么没有派上用处啊?猜想一下估计把Range("a2:a100") 改成Range("a" & s) 会符合你的本意;
5. =MAX((Sheet1!A$2:A$65=A" & x & ")*(Sheet1!B$2:B$57=B" & x & ")*Sheet1!C$2:C$65)这段代码不怎么看得懂,单元格区域等于某一单元格、然后还有单元格区域相乘,以前没见过,但是用EXCEL试着等一等、乘一乘还真是没出错,很奇怪,看来这段代码的精华就在这里了;
6. 看来你是初次编程序,所以有些语法结构不清楚,但是看你的精华代码、可能和行列式、高次阶乘有关,估计你是个纯数学专家,上手应该很快,假以时日,你必定成为一代代码高手,到时一定向你请教。


excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2011-12-20 20:06 | 显示全部楼层
回复

使用道具 举报

发表于 2012-1-21 02:52 | 显示全部楼层    本楼为最佳答案   
本帖最后由 happym8888 于 2012-1-21 10:56 编辑

不是大师,互相学习吧,看你的代码:
  1. Sub tt()
  2. Dim x As Integer, s As Integer
  3. For x = 2 To 10 Step 1
  4. For s = 2 To 100 Step 1
  5. If Sheet("sheet1").Range("a2:a100") <> "" And Sheet("sheet1").Range("b2:b100") <> "" Then
  6. Range("c" & x) = Evaluate("=MAX((Sheet1!A$2:A$65=A" & x & ")*(Sheet1!B$2:B$57=B" & x & ")*Sheet1!C$2:C$65)")
  7. ElseIf Sheet("sheet1").Range("a2:a100") = "" And Sheet("sheet1").Range("b2:b100") = "" Then
  8. Range("c" & x) = ""
  9. Next x
  10. Next s
  11. End If
  12. End Sub
复制代码

1. 首先,Sheet("sheet1")这种表达方法不对,应该是Sheets("sheet1"),有4处要修改;
2. 其次,下面的Next x和 Next s要互换位置;
3. End IF要挪动到循环语句的里面去,就是放在两个Next的上面一行;
4. Range("a2:a100") <> "" 这个表达方法不对,不等号前面是一个区域,不是一个单元格,试想一下,要是这个区域里面有的是空、有的有数据,这个不等号到底成立不成立呢?再说,你的循环变量s怎么没有派上用处啊?猜想一下估计把Range("a2:a100") 改成Range("a" & s) 会符合你的本意;
5. =MAX((Sheet1!A$2:A$65=A" & x & ")*(Sheet1!B$2:B$57=B" & x & ")*Sheet1!C$2:C$65)这段代码不怎么看得懂,单元格区域等于某一单元格、然后还有单元格区域相乘,以前没见过,但是用EXCEL试着等一等、乘一乘还真是没出错,很奇怪,看来这段代码的精华就在这里了;
6. 看来你是初次编程序,所以有些语法结构不清楚,但是看你的精华代码、可能和行列式、高次阶乘有关,估计你是个纯数学专家,上手应该很快,假以时日,你必定成为一代代码高手,到时一定向你请教。


回复

使用道具 举报

发表于 2012-7-11 20:07 | 显示全部楼层
高手看程序,不需要看疗效的啊,牛
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-17 18:26 , Processed in 0.261240 second(s), 9 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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