q*******n 发帖数: 360 | 1 实在是不好意思,这么个问题老是麻烦大家,都怪自己没好好学习:(
我今天一边翻书一边学着做,总算做出来了一个所谓的宏:内层do-loop循环可以运行
,可是外层的do-loop循环只走了一步,就不循环了(根据表格里的数据看,外层循环
是应该走很多步的)。麻烦大家看看是怎么回事?先谢谢了。
-------------------------
Sub ShuJuChuanShu()
注:我觉得大家的建议都很有道理,一组7800个数值,只靠手输入,真的累死人了。我
都已经想办法把它们导进excel表格里了。
Dim CodeR As String
Dim CodeS As String
i = 9 注:数据在excel中的起始位置
j = 2 注:数据在excel中的起始位置
Do
Do
CodeR = Sheet3.Cells(i, 1) 注:表三种第一列的温度值。
CodeS = Sheet2.Cells(j, 1) 注:表二中第一列的温度值。
If CodeS = CodeR Then
Sheet3.Cells(i, 5) = Sheet2.Cells(j, 2) 注:把试验结果值读取到表三中
的相应位置上。
Else
End If
j = j + 1
Loop While Sheet2.Cells(j, 1) <> "" 注:当表二中的第一列的数值(温度)
全部读完,就退出该循环
i = i + 1
Loop While Sheet3.Cells(i, 1) <> "" 注:当表三中的第一列的数值(温度)全部读
完,就退出该循环
End Sub
--------------------------------------------------------
内层循环可以走通,外层循环只走了一步,就不在向下走了(Sheet3中有很多温度数据
都没有读到),麻烦大家看看问题出在哪里了?谢谢了。 |
p**s 发帖数: 2707 | |
q*******n 发帖数: 360 | 3 恩,一开始就是使用vlookup的,但是解决不了自动保存数据问题,所以就听大家建议
写宏。
再说了,以后用excel的时候多了,现在就借机学一下吧。(我们老板有点变态,不知
道为什么组里的数据全部都是用excel的,别的什么也没有,真是的。)
【在 p**s 的大作中提到】 : 你这用个vlookup就行了,还折腾宏。。。
|
w********e 发帖数: 8594 | 4 我也推荐了你用宏解决当前的问题,但要学也学个正经的。去下载个R (http://www.r-project.org/)。免费,强大,流行,高大上的数据处理软件。学会在那里面编点简单的程序,掌握一点基本的数据处理能力,以后找工作也多一个选择。
【在 q*******n 的大作中提到】 : 恩,一开始就是使用vlookup的,但是解决不了自动保存数据问题,所以就听大家建议 : 写宏。 : 再说了,以后用excel的时候多了,现在就借机学一下吧。(我们老板有点变态,不知 : 道为什么组里的数据全部都是用excel的,别的什么也没有,真是的。)
|
s***v 发帖数: 4924 | |
H********g 发帖数: 43926 | 6 外层循环的判断似乎是表3里的格子不为空,你检查下表3的第一列是不是有没有数据的
格子?
【在 q*******n 的大作中提到】 : 实在是不好意思,这么个问题老是麻烦大家,都怪自己没好好学习:( : 我今天一边翻书一边学着做,总算做出来了一个所谓的宏:内层do-loop循环可以运行 : ,可是外层的do-loop循环只走了一步,就不循环了(根据表格里的数据看,外层循环 : 是应该走很多步的)。麻烦大家看看是怎么回事?先谢谢了。 : ------------------------- : Sub ShuJuChuanShu() : 注:我觉得大家的建议都很有道理,一组7800个数值,只靠手输入,真的累死人了。我 : 都已经想办法把它们导进excel表格里了。 : Dim CodeR As String : Dim CodeS As String
|
H********g 发帖数: 43926 | 7 用这个函数找到A列的实际长度max,然后把while改成 while i
Find the very last used cell in a Column:
Sub LastCellInColumn()
Range("A65536").End(xlup).Select
End Sub
【在 H********g 的大作中提到】 : 外层循环的判断似乎是表3里的格子不为空,你检查下表3的第一列是不是有没有数据的 : 格子?
|
s***v 发帖数: 4924 | 8 都搞不懂楼主的数据结构,楼主也不贴张屏幕截图上来。
Sheet3.Cells(i, 5) = Sheet2.Cells(j, 2) 注:把试验结果值读取到表三中
的相应位置上。
你这个内层循环,在我看来,你是反复写数据在sheet3 (9,5)=I5这个位置里,有什
么意义吗?
你这7800个数据是以什么格式存放的?你别说这7800个数据是实验之后抄在纸上,然后
人工输入excel,我靠,那太奇葩的实验了。
excel可以导入txt或者一些简单格式的数据的,根本不需要手工输入。你不是在其他帖
子说了温度没有重复的吗?那导入以后的数据你只要先排序在拷贝到需要的地方就可以
了。 |
H********g 发帖数: 43926 | 9 我昨天也建议这个了。也许是翻到7800行再贴东西有点烦人吧。
【在 s***v 的大作中提到】 : 都搞不懂楼主的数据结构,楼主也不贴张屏幕截图上来。 : Sheet3.Cells(i, 5) = Sheet2.Cells(j, 2) 注:把试验结果值读取到表三中 : 的相应位置上。 : 你这个内层循环,在我看来,你是反复写数据在sheet3 (9,5)=I5这个位置里,有什 : 么意义吗? : 你这7800个数据是以什么格式存放的?你别说这7800个数据是实验之后抄在纸上,然后 : 人工输入excel,我靠,那太奇葩的实验了。 : excel可以导入txt或者一些简单格式的数据的,根本不需要手工输入。你不是在其他帖 : 子说了温度没有重复的吗?那导入以后的数据你只要先排序在拷贝到需要的地方就可以 : 了。
|
H********g 发帖数: 43926 | 10 我觉得她是想用同一个excel文件,第3页放结果,第二页不断地反复粘数据,然后每粘
一次运行一次宏,宏就把第二页有用的东西挑出来存在第三页。她这个想法是可以的。
操作上不算太麻烦。(前面用Vlookup的问题是她每粘一次新的,vlookup一更新就把原
来刚存的丢了)
不过如果既然有表格式的结果,如果可以导出成CSV格式,用个程序批量处理CSV文件,
可以省掉这些手工粘来粘去。
【在 s***v 的大作中提到】 : 都搞不懂楼主的数据结构,楼主也不贴张屏幕截图上来。 : Sheet3.Cells(i, 5) = Sheet2.Cells(j, 2) 注:把试验结果值读取到表三中 : 的相应位置上。 : 你这个内层循环,在我看来,你是反复写数据在sheet3 (9,5)=I5这个位置里,有什 : 么意义吗? : 你这7800个数据是以什么格式存放的?你别说这7800个数据是实验之后抄在纸上,然后 : 人工输入excel,我靠,那太奇葩的实验了。 : excel可以导入txt或者一些简单格式的数据的,根本不需要手工输入。你不是在其他帖 : 子说了温度没有重复的吗?那导入以后的数据你只要先排序在拷贝到需要的地方就可以 : 了。
|
|
|
s***v 发帖数: 4924 | 11 我昨天给她这个办法
=INDEX(Sheet1!$C$1:$C$5,MATCH(A1,Sheet1!$A$1:$A$5))
但是她好像根本不看自己发的帖子,我在她现在这个新开的帖子里又放了链接,她也没
回复,我都不知道我的办法有没有帮到她。
7800行数据,她这么搞肯定不行,繁琐而且非常容易出错。我觉得应该先把excel的格
式设计好,然后再考虑怎样操作数据,但是好像她自己根本就没有概念。
粘一次数据运行一次宏太麻烦了,excel设计好然后直接导入数据,然后shift+F9运算
当前sheet就行了,如果我给的index,match够用的话,省好多事。
【在 H********g 的大作中提到】 : 我觉得她是想用同一个excel文件,第3页放结果,第二页不断地反复粘数据,然后每粘 : 一次运行一次宏,宏就把第二页有用的东西挑出来存在第三页。她这个想法是可以的。 : 操作上不算太麻烦。(前面用Vlookup的问题是她每粘一次新的,vlookup一更新就把原 : 来刚存的丢了) : 不过如果既然有表格式的结果,如果可以导出成CSV格式,用个程序批量处理CSV文件, : 可以省掉这些手工粘来粘去。
|
q*******n 发帖数: 360 | 12 嗯,先谢谢蝗虫!怎么用这个函数?是不是就是在外层循环内写入max=Range("A65536"
).End(xlup).Select,然后再改一下while就可以了?
【在 H********g 的大作中提到】 : 用这个函数找到A列的实际长度max,然后把while改成 while i: Find the very last used cell in a Column: : Sub LastCellInColumn() : Range("A65536").End(xlup).Select : End Sub
|
q*******n 发帖数: 360 | 13 嗯,表三的第一列是这样子的。
第一行:T
第二行:-50
第三行:-49.9
第四行:-49.8
等等等等一直到第7801行
第7801行:730
从第7802行开始就没有数据了,是不是就是空格子了?
【在 H********g 的大作中提到】 : 外层循环的判断似乎是表3里的格子不为空,你检查下表3的第一列是不是有没有数据的 : 格子?
|
H********g 发帖数: 43926 | 14 你程序里第二个Do前面应该加一行j=2。
不然的话从第二个i循环开始j都是在最大值,内层循环根本没执行。。
【在 q*******n 的大作中提到】 : 嗯,表三的第一列是这样子的。 : 第一行:T : 第二行:-50 : 第三行:-49.9 : 第四行:-49.8 : 等等等等一直到第7801行 : 第7801行:730 : 从第7802行开始就没有数据了,是不是就是空格子了?
|
q*******n 发帖数: 360 | 15 我看了您的回帖了, 也试过了。后来决定还是写个sub吧,因为以后还要继续处理在一
个温度下多测几次取平均值的问题。我不像你们,写个code就像玩似的,我得一步步来
,包括怎么定义数据类型这样白痴类的问题还都是昨天先翻书的。不管怎么说,先谢谢
您了,搞定了我给你们发包子。麻烦您看看我那个Sub有什么问题,谢谢了。
【在 s***v 的大作中提到】 : 我昨天给她这个办法 : =INDEX(Sheet1!$C$1:$C$5,MATCH(A1,Sheet1!$A$1:$A$5)) : 但是她好像根本不看自己发的帖子,我在她现在这个新开的帖子里又放了链接,她也没 : 回复,我都不知道我的办法有没有帮到她。 : 7800行数据,她这么搞肯定不行,繁琐而且非常容易出错。我觉得应该先把excel的格 : 式设计好,然后再考虑怎样操作数据,但是好像她自己根本就没有概念。 : 粘一次数据运行一次宏太麻烦了,excel设计好然后直接导入数据,然后shift+F9运算 : 当前sheet就行了,如果我给的index,match够用的话,省好多事。
|
x****o 发帖数: 21566 | 16 一张奔 >> 十个包子
【在 q*******n 的大作中提到】 : 我看了您的回帖了, 也试过了。后来决定还是写个sub吧,因为以后还要继续处理在一 : 个温度下多测几次取平均值的问题。我不像你们,写个code就像玩似的,我得一步步来 : ,包括怎么定义数据类型这样白痴类的问题还都是昨天先翻书的。不管怎么说,先谢谢 : 您了,搞定了我给你们发包子。麻烦您看看我那个Sub有什么问题,谢谢了。
|
w********e 发帖数: 8594 | 17 还是蝗虫有才。
【在 H********g 的大作中提到】 : 你程序里第二个Do前面应该加一行j=2。 : 不然的话从第二个i循环开始j都是在最大值,内层循环根本没执行。。
|
q*******n 发帖数: 360 | 18 你们真厉害!可能问题就出在这里。这么办吧,还是简化地说吧,我想把第一个数值写
在sheet3(9,5),第二个数值写在sheet3(10,5),第三个写在sheet3(11,5),等等一直到
第7800个数值写在sheet3(7810,5),我那个宏那里应该修改?因为运行结果就只是在
sheet3(9,5)位置显示测量值,而sheet3(10,5)一下就什么都不显示了。
【在 s***v 的大作中提到】 : 都搞不懂楼主的数据结构,楼主也不贴张屏幕截图上来。 : Sheet3.Cells(i, 5) = Sheet2.Cells(j, 2) 注:把试验结果值读取到表三中 : 的相应位置上。 : 你这个内层循环,在我看来,你是反复写数据在sheet3 (9,5)=I5这个位置里,有什 : 么意义吗? : 你这7800个数据是以什么格式存放的?你别说这7800个数据是实验之后抄在纸上,然后 : 人工输入excel,我靠,那太奇葩的实验了。 : excel可以导入txt或者一些简单格式的数据的,根本不需要手工输入。你不是在其他帖 : 子说了温度没有重复的吗?那导入以后的数据你只要先排序在拷贝到需要的地方就可以 : 了。
|
q*******n 发帖数: 360 | 19 蝗虫!您太厉害了!!!!搞定了!!!!!!
蝗虫伟大!!!
【在 H********g 的大作中提到】 : 你程序里第二个Do前面应该加一行j=2。 : 不然的话从第二个i循环开始j都是在最大值,内层循环根本没执行。。
|
H********g 发帖数: 43926 | 20 你这个宏我已经测试过了,就是在两个Do之间缺个j=2 。补上之后可以正常运行。
补上以后潜在的问题是会在碰到空格的时候会过早中止循环,建议直接写个while i<
7900, j<表3的长度。
另外如果你的温度是浮点数的话,注意浮点数比大小可能会出问题,可能需要round 一
下再比,或者规定一个允许的范围,比如写成 if abs(CodeS-CodeR)<0.0001。
【在 q*******n 的大作中提到】 : 你们真厉害!可能问题就出在这里。这么办吧,还是简化地说吧,我想把第一个数值写 : 在sheet3(9,5),第二个数值写在sheet3(10,5),第三个写在sheet3(11,5),等等一直到 : 第7800个数值写在sheet3(7810,5),我那个宏那里应该修改?因为运行结果就只是在 : sheet3(9,5)位置显示测量值,而sheet3(10,5)一下就什么都不显示了。
|
|
|
q*******n 发帖数: 360 | 21 一点小心意,请笑纳!你们真厉害,羡慕ing:)
qgmzztmdn,您好:
您转给 Huangchong,现金(伪币):100,收取手续费:1
站务
【在 H********g 的大作中提到】 : 你程序里第二个Do前面应该加一行j=2。 : 不然的话从第二个i循环开始j都是在最大值,内层循环根本没执行。。
|
q*******n 发帖数: 360 | 22 一点小心意,请笑纳!你们真厉害,羡慕ing.
qgmzztmdn,您好:
您转给 whoknowsme,现金(伪币):100,收取手续费:1
同时附加了如下留言给 whoknowsme.
谢谢帮助!
站务
【在 w********e 的大作中提到】 : 我也推荐了你用宏解决当前的问题,但要学也学个正经的。去下载个R (http://www.r-project.org/)。免费,强大,流行,高大上的数据处理软件。学会在那里面编点简单的程序,掌握一点基本的数据处理能力,以后找工作也多一个选择。
|
q*******n 发帖数: 360 | 23 一点小心意,请笑纳!你们真厉害,羡慕ing.
qgmzztmdn,您好:
您转给 sunvv,现金(伪币):100,收取手续费:1
同时附加了如下留言给 sunvv.
谢谢帮助!
站务
【在 s***v 的大作中提到】 : http://www.mitbbs.com/article/Joke/33149037_0.html : 你先试试这个办法行不行,能用excel自带的函数,那就根本没必要写sub的。
|
q*******n 发帖数: 360 | 24 嗯,嗯,听您的!
【在 H********g 的大作中提到】 : 你这个宏我已经测试过了,就是在两个Do之间缺个j=2 。补上之后可以正常运行。 : 补上以后潜在的问题是会在碰到空格的时候会过早中止循环,建议直接写个while i< : 7900, j<表3的长度。 : 另外如果你的温度是浮点数的话,注意浮点数比大小可能会出问题,可能需要round 一 : 下再比,或者规定一个允许的范围,比如写成 if abs(CodeS-CodeR)<0.0001。
|
z***i 发帖数: 8285 | 25 居然解决了,人多力量大啊
我来推荐你一个不同方案吧,非常简单,
五到十分钟可以写好测试好,而且检查起来方便
批量处理数据无压力
但是安装程序,改系统参数什么的需要二十分钟吧
创建文件夹 C:/Data/20150202,把所有原始测试结果放进去,
比如7800个*.out文件
在这里下载并安装 (Cygnus) Cygwin B20
http://www.claremontmckenna.edu/pages/faculty/alee/g++/g++.html
把下面两行########################里的东西存成文件"a2.awk"
放到C:/Data/20150202里面
########################
BEGIN {
{fileno=0}
{printf " #|%12s|%12s|%22s\n","Temp","Value","File"}
}
{ if (FNR==1) {
{FileNo=FileNo+1 }
{printf "%4i|",FileNo}
}
}
/30./,/10;/ {
if ($1==30. ) {
a1=$1
a3=$3
{printf "%12f|%12f|%22s\n",a1,a3,FILENAME}
}
}
########################
把这个拷贝到桌面 C:\cygnus\cygwin-b20\cygnus.bat
双击点开,然后在$符后输入(不包括$符自己):
$cd C:/Data/20150202
$awk -f a2.awk *.out>Results.txt
(这个*.out你要根据实际的文件后缀改)
Results.txt就是你想要的结果
嗯,嗯,听您的!
【在 q*******n 的大作中提到】 : 嗯,嗯,听您的!
|