用VB6对次数归类,实现追加50分
本人不会VB6,请写代码,只说方法者勿答,谢谢合作。不要被这么多的描述吓着,看到最后全明白。概念:什么是次数?例如,某个excel单元格里的数据是4(6),037(4),...
本人不会VB6,请写代码,只说方法者勿答,谢谢合作。不要被这么多的描述吓着,看到最后全明白。
概念:什么是次数?
例如,某个excel单元格里的数据是4(6),037(4),59(3),6(1),8(0),表示数字4是6次;0、3、7都是4次;5、9都是3次;6是1次;8是0次;
特别注意当1次的数字位于数据的最末端时,1次有两种格式!以34为例,一种写法是34 另一种写法带次数和逗号34(1),
有的朋友已经注意到了4(6),037(4),59(3),6(1),8(0), 这个6带了次数和逗号是因为它不是位于数据的最末端,它的后面还有0次的,若没有0次的,那么上面的数据就有两种写法4(6),037(4),59(3),6 或 4(6),037(4),59(3),6(1),
代码一定要使这两种一次的格式的统计结果一样,否则程序错误,切记切记!!除了1次的有这两种格式外,其它的包括0次的,都是小括号内注明次数,且小括号后有逗号。
要求:
从excel里手动复制多个单元格中的数据,粘贴到VB6的文本框(文本框允许多行),按一个按钮后,将某个名次里面有1个数、2个数、3个数、4个数分开,大于4个数的越界不统计,在弹出的记事本里将它们分开。
注意事项:
<1>单元格中的数据格式是文本格式;有的数字加粗;加前景色;加底色;其它;由于仅是对次数进行归类,所以数据的格式不要影响代码执行的结果。
<2>注意从excel不同的行不同的列复制的数据是被制表键和回车键隔开的,不是空格键!!当然代码在满足必要条件制表键和回车键时,能支持空格键更好,这样可以防止出错。
<3>单元格可以为空
<4>单元格可以有文字、符号等非数字的内容
<5>小括号和逗号均为英文输入法下的
<6>小括号内的次数在0与50之间,包括0和50
举例:
下面是从excel复制的一小段数据(实际数据约占有6000多个单元格),位于<>里面的文字是注释,是为了让你更明白的,原始数据并没有这些文字。
09(2),46 <本行名次1次的和2次的都有两个数,都满足,注意1次的格式>
2(3),3(2),14589(1), <名次有1个数的是2和3,1次的有5个数字,越界不统计它>
<本行代表某单元格没有数据>
0(13),268(2),139(1), <名次有1个数的是0,有2个数的是268139>
69(3),478(2), <名次有2个数的是69,有3个数的是478>
07(3),36(2),14(1), <名次有2个数的全部满足>
6(3),078(2),2349 <名次有1个数的是6,有2个数的是078,有4个数的是2349>
1349 <名次有4个数的都满足,它们都是1次的>
5(3),2(2),013489(1), <名次有1个数的52,1次的大于4个数,越界不统计>
1349(2),0278(1), <下面的以此类推>
57(16),4(5),68(4),013(0),
567(4),148(3),39(2),0(0),
158(4),369(3),047(2),
4(6),037(4),59(3),126(2),8(1),
则在弹出的记事本里的统计结果与格式为:
名次里面有1个数的是:
2306524048
名次里面有2个数的是:
09466907361457683959
名次里面有3个数的是:
268139478078013567148158369047037126
名次里面有4个数的是:
2349134913490278
请自己在excel里按照原则随意举例验证,通过后再贴出来,拜谢。
如果一个单元格中的数据很长,粘贴到VB6的文本框,文本框的一行却容纳不下时,要允许换行,且换行不能对统计结果造成影响,这一点非常重要,特此补上。 展开
概念:什么是次数?
例如,某个excel单元格里的数据是4(6),037(4),59(3),6(1),8(0),表示数字4是6次;0、3、7都是4次;5、9都是3次;6是1次;8是0次;
特别注意当1次的数字位于数据的最末端时,1次有两种格式!以34为例,一种写法是34 另一种写法带次数和逗号34(1),
有的朋友已经注意到了4(6),037(4),59(3),6(1),8(0), 这个6带了次数和逗号是因为它不是位于数据的最末端,它的后面还有0次的,若没有0次的,那么上面的数据就有两种写法4(6),037(4),59(3),6 或 4(6),037(4),59(3),6(1),
代码一定要使这两种一次的格式的统计结果一样,否则程序错误,切记切记!!除了1次的有这两种格式外,其它的包括0次的,都是小括号内注明次数,且小括号后有逗号。
要求:
从excel里手动复制多个单元格中的数据,粘贴到VB6的文本框(文本框允许多行),按一个按钮后,将某个名次里面有1个数、2个数、3个数、4个数分开,大于4个数的越界不统计,在弹出的记事本里将它们分开。
注意事项:
<1>单元格中的数据格式是文本格式;有的数字加粗;加前景色;加底色;其它;由于仅是对次数进行归类,所以数据的格式不要影响代码执行的结果。
<2>注意从excel不同的行不同的列复制的数据是被制表键和回车键隔开的,不是空格键!!当然代码在满足必要条件制表键和回车键时,能支持空格键更好,这样可以防止出错。
<3>单元格可以为空
<4>单元格可以有文字、符号等非数字的内容
<5>小括号和逗号均为英文输入法下的
<6>小括号内的次数在0与50之间,包括0和50
举例:
下面是从excel复制的一小段数据(实际数据约占有6000多个单元格),位于<>里面的文字是注释,是为了让你更明白的,原始数据并没有这些文字。
09(2),46 <本行名次1次的和2次的都有两个数,都满足,注意1次的格式>
2(3),3(2),14589(1), <名次有1个数的是2和3,1次的有5个数字,越界不统计它>
<本行代表某单元格没有数据>
0(13),268(2),139(1), <名次有1个数的是0,有2个数的是268139>
69(3),478(2), <名次有2个数的是69,有3个数的是478>
07(3),36(2),14(1), <名次有2个数的全部满足>
6(3),078(2),2349 <名次有1个数的是6,有2个数的是078,有4个数的是2349>
1349 <名次有4个数的都满足,它们都是1次的>
5(3),2(2),013489(1), <名次有1个数的52,1次的大于4个数,越界不统计>
1349(2),0278(1), <下面的以此类推>
57(16),4(5),68(4),013(0),
567(4),148(3),39(2),0(0),
158(4),369(3),047(2),
4(6),037(4),59(3),126(2),8(1),
则在弹出的记事本里的统计结果与格式为:
名次里面有1个数的是:
2306524048
名次里面有2个数的是:
09466907361457683959
名次里面有3个数的是:
268139478078013567148158369047037126
名次里面有4个数的是:
2349134913490278
请自己在excel里按照原则随意举例验证,通过后再贴出来,拜谢。
如果一个单元格中的数据很长,粘贴到VB6的文本框,文本框的一行却容纳不下时,要允许换行,且换行不能对统计结果造成影响,这一点非常重要,特此补上。 展开
2个回答
展开全部
Option Explicit
'判断字符串是不是合法,同时处理字符串
Private Function IsValue(pString As String) As Boolean
Dim x As Long
pString = Trim(pString)
x = InStr(pString, "(")
Select Case x
Case 0
If Len(pString) > 4 Then Exit Function
Case 2 To 5
pString = Mid(pString, 1, x - 1)
Case Is > 5
Exit Function
End Select
IsValue = IsNumeric(pString)
End Function
Private Sub Command1_Click()
Dim pString As String
Dim arr() As String
Dim pCount
Dim tmp1 As String, tmp2 As String, tmp3 As String, tmp4 As String
Dim i As Long
Dim x As Long
'初始化与统计相关的变量
tmp1 = "名次里面有1个数的是:" & vbCrLf
tmp2 = "名次里面有2个数的是:" & vbCrLf
tmp3 = "名次里面有3个数的是:" & vbCrLf
tmp4 = "名次里面有4个数的是:" & vbCrLf
pCount = Array(tmp1, tmp2, tmp3, tmp4)
'将text1中枝皮的换行符替换成","号
pString = Replace(Text1, vbCrLf, ",")
'去除制表斗旦符
pString = Replace(pString, vbTab, vbNullString)
'按逗号分组处理
arr = Split(pString, ",")
For i = 0 To UBound(arr)
If IsValue(arr(i)) Then
x = Len(arr(i)) - 1
pCount(x) = pCount(x) & arr(i)
End If
Next
'将结果写入txt
Dim hFile As Long
hFile = FreeFile
Open "D:\ttt.txt" For Output As hFile
Print #hFile, Join(pCount, vbCrLf)
Close
Shell "NOTEPAD.EXE " & "空搭扰D:\ttt.txt", vbNormalNoFocus
End Sub
Private Sub Form_Load()
Dim sFile As String
Dim hFile As Long
hFile = FreeFile
Open "D:\tt.txt" For Binary As hFile
sFile = Space(LOF(hFile))
Get #hFile, , sFile
Close
Text1 = sFile
End Sub
测试文本内容:
09(2),46
2(3),3(2),14589(1),
0(13), ,268(2), , 139(1),
69(3),478(2),
07(3),36(2),14(1),
6(3),078(2),2349
1349
5(3),2(2),013489(1),
1349(2),0278(1),
57(16),4(5),68(4),013(0),
567(4),148(3),39(2),0(0),
158(4),369(3),047(2),
4(6),037(4),59(3),126(2),8(1),
'判断字符串是不是合法,同时处理字符串
Private Function IsValue(pString As String) As Boolean
Dim x As Long
pString = Trim(pString)
x = InStr(pString, "(")
Select Case x
Case 0
If Len(pString) > 4 Then Exit Function
Case 2 To 5
pString = Mid(pString, 1, x - 1)
Case Is > 5
Exit Function
End Select
IsValue = IsNumeric(pString)
End Function
Private Sub Command1_Click()
Dim pString As String
Dim arr() As String
Dim pCount
Dim tmp1 As String, tmp2 As String, tmp3 As String, tmp4 As String
Dim i As Long
Dim x As Long
'初始化与统计相关的变量
tmp1 = "名次里面有1个数的是:" & vbCrLf
tmp2 = "名次里面有2个数的是:" & vbCrLf
tmp3 = "名次里面有3个数的是:" & vbCrLf
tmp4 = "名次里面有4个数的是:" & vbCrLf
pCount = Array(tmp1, tmp2, tmp3, tmp4)
'将text1中枝皮的换行符替换成","号
pString = Replace(Text1, vbCrLf, ",")
'去除制表斗旦符
pString = Replace(pString, vbTab, vbNullString)
'按逗号分组处理
arr = Split(pString, ",")
For i = 0 To UBound(arr)
If IsValue(arr(i)) Then
x = Len(arr(i)) - 1
pCount(x) = pCount(x) & arr(i)
End If
Next
'将结果写入txt
Dim hFile As Long
hFile = FreeFile
Open "D:\ttt.txt" For Output As hFile
Print #hFile, Join(pCount, vbCrLf)
Close
Shell "NOTEPAD.EXE " & "空搭扰D:\ttt.txt", vbNormalNoFocus
End Sub
Private Sub Form_Load()
Dim sFile As String
Dim hFile As Long
hFile = FreeFile
Open "D:\tt.txt" For Binary As hFile
sFile = Space(LOF(hFile))
Get #hFile, , sFile
Close
Text1 = sFile
End Sub
测试文本内容:
09(2),46
2(3),3(2),14589(1),
0(13), ,268(2), , 139(1),
69(3),478(2),
07(3),36(2),14(1),
6(3),078(2),2349
1349
5(3),2(2),013489(1),
1349(2),0278(1),
57(16),4(5),68(4),013(0),
567(4),148(3),39(2),0(0),
158(4),369(3),047(2),
4(6),037(4),59(3),126(2),8(1),
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
光点科技
2023-08-15 广告
2023-08-15 广告
通常情况下,我们会按照结构模型把系统产生的数据分为三种类型:结构化数据、半结构化数据和非结构化数据。结构化数据,即行数据,是存储在数据库里,可以用二维表结构来逻辑表达实现的数据。最常见的就是数字数据和文本数据,它们可以某种标准格式存在于文件...
点击进入详情页
本回答由光点科技提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询