数据如下 要求按Fnod排列成如下顺序格式
Fnod Tnod Id Fnod
1 2 23 1 23 333
2 3 45 2 23 45 852
2 17 98 3 45 111 511
3 2 111 4 2212 689
3 16 511 5 89 257 2212
4 5 2212 6 689 852
5 7 89
5 3 257 .
6 4 689 .
6 2 852 .
. 1 333
. . .
. . .
-----------------------
问:如何将数据按Fnod的顺序序号进行排列?即,如果出现与Fnod中的标志位 1 相同的值则将数据排列在 标志位 1 的同一行中,以此类推...
请给出vba的代码,谢谢!
Fnod Tnod Id Fnod
1 2 23 1 23 333
2 3 45 2 23 45 852
2 17 98 3 45 111 511
3 2 111 4 2212 689
3 16 511 5 89 257 2212
4 5 2212 6 689 852
5 7 89
5 3 257 .
6 4 689 .
6 2 852 .
. 1 333
. . .
. . .
-----------------------
问:如何将数据按Fnod的顺序序号进行排列?即,如果出现与Fnod中的标志位 1 相同的值则将数据排列在 标志位 1 的同一行中,以此类推...
请给出vba的代码,谢谢!
解决方案 »
- 付费控件的使用问题
- VB编译出现错误:找不到工程或库。 错误出现在Dim itmX1 As ListItem行上
- 有5年工作经验的vb程序员都没有解决的问题?
- 请教一个简单的小问题。。。
- 关于后台调用的问题.
- 怎样得到按钮的状态,比如说按下状态
- 一个数学问题……1+2=3,4+5+6=7+8,9+10+11+12=13+14+15,其计算结果是3,15,42.....那么含2003算式的结果是什么?
- 这段代码要怎样写???(新手问题)
- 问:你们觉得什么排序法最快和什么查找法最快(只写专业名词,不要写代码),实际是散分,三天后结帐。
- 在crystal report报表中如何直接打印,不用打印预览.它支不支持网络打印机.
- 请问大家谁知道文档,图片,多媒体文件怎么可以从sql数据库中显示在vb中阿,用什么控件在vb中显示阿
- 在datareport中如何来按我的SQL语句分组打印报表?
Sub Main()
Dim shtSour As Worksheet
Dim nRows As Long
Dim i As Long
Dim nFnod As Long
Dim nID As Long
Set shtSour = Worksheets("sheet1")
With shtSour
nRows = .UsedRange.Rows.Count
For i = 2 To nRows '假定第一行为标题
nFnod = .Cells(i, 1)
nID = .Cells(i, 3)
MySave nFnod, nID
Next
End With
Set shtSour = Nothing
End SubSub MySave(nFnod, nID)
Dim shtDest As Worksheet '首行非空, 为标题行
Dim nRows As Long
Dim i As Long
Dim j As Long
Set shtDest = Worksheets("sheet2")
With shtDest
nRows = .UsedRange.Rows.Count
For i = 1 To nRows '查找写在哪一行
If .Cells(i, 1) = nFnod Then Exit For
Next
If .Cells(i, 1) <> nFnod Then .Cells(i, 1) = nFnod
For j = 2 To 999 '查找写在哪一列, 并假定最多999列
If Trim(.Cells(i, j)) = "" Then Exit For
Next
.Cells(i, j) = nID
End With
Set shtDest = Nothing
End Sub已经调试通过
假定数据源在 sheet1 中
结果写在 sheet2 中
且sheet2的第1行非空
类似这样 ,自己查查msdn
首先非常谢谢你的关注可能你还不是很明白,下面我再重新讲一下,1. 好像excel做多支持256列吧?
2. 我的意思是:就如我给出的表中所示,如果标志相同(即,Fnod和Tnod的标志位)则在同一行列出
Id的值,当然不会超过256列。
你仔细看看就明白了,如上面的示例,比如标志位2,则含有标志2的Id值是 23,45,852
3. 然后再在新表中按顺序输出标志位和Id值就是这样子,明白了吗?
再举例:比如标志1 --对应的Id值--〉23,333
比如标志2 --对应的Id值--〉23,45,111,852
比如标志3 --对应的Id值--〉48,111,511,257
比如标志4 --对应的Id值--〉2212,689
......
......
......
比如标志n --对应的Id值--〉
以此类推!
你拿我的程序跑跑看
已经基本满足你的要求了,虽然只处理了Fnod字段
稍加修改就能完成满足你的要求了再有一个:同一个nod号对应的ID相同时,最终结果如何处理?
如:
F T ID
1 2 9
2 3 8
2 4 9结果为
1 9
2 9 8
3 8
4 92这一行上我理解不应出现 2 9 8 9
这样的东东不知道是不是这样?上午的程序没有消除同行重复的ID,这个改起来也不难上午给的这程序不涉及什么算法,就是遍历查找,然后写结果
楼主自己试一试
有什么问题再问好了
回复人: DawnPine(拂晓的松) ( ) 信 再有一个:同一个nod号对应的ID相同时,最终结果如何处理?
如:
F T ID
1 2 9
2 3 8
2 4 9结果为
1 9
2 9 8
3 8
4 9
----------------------------我知道,你已经理解我的意思了
我的目的就是要求结果为
1 9
2 9 8 8 9
3 8
4 9
如果要对Tnod做处理,只需在main()里的MySave那行之后再加2行:
nTnod = .Cells(i, 2)
MySave nTnod, nID
就行了,当然,nTnod最好先用Dim定义一下
我在增加了这两行之后,用你给的数据跑了一次,结果如下:nod
1 23
2 23 45 98 111 852
3 45 111 511 257
17 98
16 511
4 2212 689
5 2212 89 257
7 89
6 689 852
我的运行结果如下,不知何原因?
1 23 23 45 45 98 98 111 111 511 511 2212 2212 89 89 68 68 365 365 235 235 963 963
请看,nod只有标志1,而以上这些数字是在一行里面,而且重复出现
请赐教
这一点我在注释里说过了,可能你没注意
我把代码优化了一下:
Option ExplicitSub Main()
Dim nRows As Long
Dim i As Long
Dim nNod As Long
Dim nID As Long
Worksheets("sheet2").Rows.Delete
With Worksheets("sheet1")
nRows = .UsedRange.Rows.Count
For i = 2 To nRows '假定第一行为标题
nNod = .Cells(i, 1)
nID = .Cells(i, 3)
MySave nNod, nID
nNod = .Cells(i, 2)
MySave nNod, nID
Next
End With
End SubSub MySave(nNod As Long, nID As Long)
Dim nRows As Long
Dim i As Long
Dim j As Long
With Worksheets("sheet2")
If Trim(.Cells(1, 1)) = "" Then .Cells(1, 1) = "Nod"
nRows = .UsedRange.Rows.Count
For i = 2 To nRows '查找写在哪一行
If .Cells(i, 1) = nNod Then Exit For
Next
If .Cells(i, 1) <> nNod Then .Cells(i, 1) = nNod
For j = 2 To 256 '查找写在哪一列
If Trim(.Cells(i, j)) = "" Then Exit For
Next
.Cells(i, j) = nID
.Rows(i).Sort Key1:=.Cells(i, 1), Header:=xlYes, Orientation:=xlSortRows '按行排序
.UsedRange.Sort Key1:=.Cells(2, 1), Header:=xlYes, Orientation:=xlSortColumns
End With
End Sub最后加了排序功能, 一个是按行排序,另一个是同一行内的数据排序
如果你不需要可以不要这2行
Thank you for your help !!!