Redian新闻
>
还是那个excel问题,做了个宏,麻烦帮忙检查一下,谢谢了。
avatar
还是那个excel问题,做了个宏,麻烦帮忙检查一下,谢谢了。# Joke - 肚皮舞运动
q*n
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中有很多温度数据
都没有读到),麻烦大家看看问题出在哪里了?谢谢了。
avatar
p*s
2
你这用个vlookup就行了,还折腾宏。。。
avatar
q*n
3
恩,一开始就是使用vlookup的,但是解决不了自动保存数据问题,所以就听大家建议
写宏。
再说了,以后用excel的时候多了,现在就借机学一下吧。(我们老板有点变态,不知
道为什么组里的数据全部都是用excel的,别的什么也没有,真是的。)

【在 p**s 的大作中提到】
: 你这用个vlookup就行了,还折腾宏。。。
avatar
w*e
4
我也推荐了你用宏解决当前的问题,但要学也学个正经的。去下载个R (http://www.r-project.org/)。免费,强大,流行,高大上的数据处理软件。学会在那里面编点简单的程序,掌握一点基本的数据处理能力,以后找工作也多一个选择。

【在 q*******n 的大作中提到】
: 恩,一开始就是使用vlookup的,但是解决不了自动保存数据问题,所以就听大家建议
: 写宏。
: 再说了,以后用excel的时候多了,现在就借机学一下吧。(我们老板有点变态,不知
: 道为什么组里的数据全部都是用excel的,别的什么也没有,真是的。)

avatar
H*g
6
外层循环的判断似乎是表3里的格子不为空,你检查下表3的第一列是不是有没有数据的
格子?

【在 q*******n 的大作中提到】
: 实在是不好意思,这么个问题老是麻烦大家,都怪自己没好好学习:(
: 我今天一边翻书一边学着做,总算做出来了一个所谓的宏:内层do-loop循环可以运行
: ,可是外层的do-loop循环只走了一步,就不循环了(根据表格里的数据看,外层循环
: 是应该走很多步的)。麻烦大家看看是怎么回事?先谢谢了。
: -------------------------
: Sub ShuJuChuanShu()
: 注:我觉得大家的建议都很有道理,一组7800个数值,只靠手输入,真的累死人了。我
: 都已经想办法把它们导进excel表格里了。
: Dim CodeR As String
: Dim CodeS As String

avatar
H*g
7
用这个函数找到A列的实际长度max,然后把while改成 while iFind the very last used cell in a Column:
Sub LastCellInColumn()
Range("A65536").End(xlup).Select
End Sub

【在 H********g 的大作中提到】
: 外层循环的判断似乎是表3里的格子不为空,你检查下表3的第一列是不是有没有数据的
: 格子?

avatar
s*v
8
都搞不懂楼主的数据结构,楼主也不贴张屏幕截图上来。
Sheet3.Cells(i, 5) = Sheet2.Cells(j, 2) 注:把试验结果值读取到表三中
的相应位置上。
你这个内层循环,在我看来,你是反复写数据在sheet3 (9,5)=I5这个位置里,有什
么意义吗?
你这7800个数据是以什么格式存放的?你别说这7800个数据是实验之后抄在纸上,然后
人工输入excel,我靠,那太奇葩的实验了。
excel可以导入txt或者一些简单格式的数据的,根本不需要手工输入。你不是在其他帖
子说了温度没有重复的吗?那导入以后的数据你只要先排序在拷贝到需要的地方就可以
了。
avatar
H*g
9
我昨天也建议这个了。也许是翻到7800行再贴东西有点烦人吧。

【在 s***v 的大作中提到】
: 都搞不懂楼主的数据结构,楼主也不贴张屏幕截图上来。
: Sheet3.Cells(i, 5) = Sheet2.Cells(j, 2) 注:把试验结果值读取到表三中
: 的相应位置上。
: 你这个内层循环,在我看来,你是反复写数据在sheet3 (9,5)=I5这个位置里,有什
: 么意义吗?
: 你这7800个数据是以什么格式存放的?你别说这7800个数据是实验之后抄在纸上,然后
: 人工输入excel,我靠,那太奇葩的实验了。
: excel可以导入txt或者一些简单格式的数据的,根本不需要手工输入。你不是在其他帖
: 子说了温度没有重复的吗?那导入以后的数据你只要先排序在拷贝到需要的地方就可以
: 了。

avatar
H*g
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或者一些简单格式的数据的,根本不需要手工输入。你不是在其他帖
: 子说了温度没有重复的吗?那导入以后的数据你只要先排序在拷贝到需要的地方就可以
: 了。

avatar
s*v
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文件,
: 可以省掉这些手工粘来粘去。

avatar
q*n
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

avatar
q*n
13
嗯,表三的第一列是这样子的。
第一行:T
第二行:-50
第三行:-49.9
第四行:-49.8
等等等等一直到第7801行
第7801行:730
从第7802行开始就没有数据了,是不是就是空格子了?

【在 H********g 的大作中提到】
: 外层循环的判断似乎是表3里的格子不为空,你检查下表3的第一列是不是有没有数据的
: 格子?

avatar
H*g
14
你程序里第二个Do前面应该加一行j=2。
不然的话从第二个i循环开始j都是在最大值,内层循环根本没执行。。

【在 q*******n 的大作中提到】
: 嗯,表三的第一列是这样子的。
: 第一行:T
: 第二行:-50
: 第三行:-49.9
: 第四行:-49.8
: 等等等等一直到第7801行
: 第7801行:730
: 从第7802行开始就没有数据了,是不是就是空格子了?

avatar
q*n
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够用的话,省好多事。

avatar
x*o
16
一张奔 >> 十个包子

【在 q*******n 的大作中提到】
: 我看了您的回帖了, 也试过了。后来决定还是写个sub吧,因为以后还要继续处理在一
: 个温度下多测几次取平均值的问题。我不像你们,写个code就像玩似的,我得一步步来
: ,包括怎么定义数据类型这样白痴类的问题还都是昨天先翻书的。不管怎么说,先谢谢
: 您了,搞定了我给你们发包子。麻烦您看看我那个Sub有什么问题,谢谢了。

avatar
w*e
17
还是蝗虫有才。

【在 H********g 的大作中提到】
: 你程序里第二个Do前面应该加一行j=2。
: 不然的话从第二个i循环开始j都是在最大值,内层循环根本没执行。。

avatar
q*n
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或者一些简单格式的数据的,根本不需要手工输入。你不是在其他帖
: 子说了温度没有重复的吗?那导入以后的数据你只要先排序在拷贝到需要的地方就可以
: 了。

avatar
q*n
19
蝗虫!您太厉害了!!!!搞定了!!!!!!
蝗虫伟大!!!

【在 H********g 的大作中提到】
: 你程序里第二个Do前面应该加一行j=2。
: 不然的话从第二个i循环开始j都是在最大值,内层循环根本没执行。。

avatar
H*g
20
你这个宏我已经测试过了,就是在两个Do之间缺个j=2 。补上之后可以正常运行。
补上以后潜在的问题是会在碰到空格的时候会过早中止循环,建议直接写个while i<
7900, j另外如果你的温度是浮点数的话,注意浮点数比大小可能会出问题,可能需要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)一下就什么都不显示了。

avatar
q*n
21
一点小心意,请笑纳!你们真厉害,羡慕ing:)
qgmzztmdn,您好:
您转给 Huangchong,现金(伪币):100,收取手续费:1
站务

【在 H********g 的大作中提到】
: 你程序里第二个Do前面应该加一行j=2。
: 不然的话从第二个i循环开始j都是在最大值,内层循环根本没执行。。

avatar
q*n
22
一点小心意,请笑纳!你们真厉害,羡慕ing.
qgmzztmdn,您好:
您转给 whoknowsme,现金(伪币):100,收取手续费:1
同时附加了如下留言给 whoknowsme.
谢谢帮助!
站务

【在 w********e 的大作中提到】
: 我也推荐了你用宏解决当前的问题,但要学也学个正经的。去下载个R (http://www.r-project.org/)。免费,强大,流行,高大上的数据处理软件。学会在那里面编点简单的程序,掌握一点基本的数据处理能力,以后找工作也多一个选择。
avatar
q*n
23
一点小心意,请笑纳!你们真厉害,羡慕ing.
qgmzztmdn,您好:
您转给 sunvv,现金(伪币):100,收取手续费:1
同时附加了如下留言给 sunvv.
谢谢帮助!
站务

【在 s***v 的大作中提到】
: http://www.mitbbs.com/article/Joke/33149037_0.html
: 你先试试这个办法行不行,能用excel自带的函数,那就根本没必要写sub的。

avatar
q*n
24
嗯,嗯,听您的!

【在 H********g 的大作中提到】
: 你这个宏我已经测试过了,就是在两个Do之间缺个j=2 。补上之后可以正常运行。
: 补上以后潜在的问题是会在碰到空格的时候会过早中止循环,建议直接写个while i<
: 7900, j: 另外如果你的温度是浮点数的话,注意浮点数比大小可能会出问题,可能需要round 一
: 下再比,或者规定一个允许的范围,比如写成 if abs(CodeS-CodeR)<0.0001。

avatar
z*i
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 的大作中提到】
: 嗯,嗯,听您的!
相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。