Access交流中心

北京 | 上海 | 天津 | 重庆 | 广州 | 深圳 | 珠海 | 汕头 | 佛山 | 中山 | 东莞 | 南京 | 苏州 | 无锡 | 常州 | 南通 | 扬州 | 徐州 | 杭州 | 温州 | 宁波 | 台州 | 福州 | 厦门 | 泉州 | 龙岩 | 合肥 | 芜湖 | 成都 | 遂宁 | 长沙 | 株洲 | 湘潭 | 武汉 | 南昌 | 济南 | 青岛 | 烟台 | 潍坊 | 淄博 | 济宁 | 太原 | 郑州 | 石家庄 | 保定 | 唐山 | 西安 | 大连 | 沈阳 | 长春 | 昆明 | 兰州 | 哈尔滨 | 佳木斯 | 南宁 | 桂林 | 海口 | 贵阳 | 西宁 | 乌鲁木齐 | 包头 |

不规则文本,按规则的分列

周天华  发表于:2016-06-05 23:10:13  
复制

如:

来源 备注分类 备注信息 说明 姓名 日期 项目 编号 内容
1 项目:编号 项目1,0001 要求:点击下载此附件
将备注信息列按备注分类的分类分列到对应的类型列中,如右边分列后的结果。
    项目1 0001  
2 姓名:项目 张三,项目2 张三   项目2    
3 日期:编号:项目 2012年1月1日,0001,项目1   2012年1月1日 项目1 0001  
4 日期:编号:姓名 2012/2/5,0002,李四 李四 2012/2/5   0002  
5 内容 内容1         内容1
6          
7 内容:姓名 内容2,李四 李四       内容2
8 编号:项目 0002,项目2     项目2 0002  
9 编号:项目 0002,项目3     项目3 0002  
10 姓名:日期:项目:内容 张三,2012-1-1,项目2,内容2 张三 2012-1-1 项目2   内容2

 

Top
周天华 发表于:2016-06-06 13:04:42

这样的分列,如何才能做到呀




周天华 发表于:2016-06-06 13:04:44

这样的分列,如何才能做到呀




西出阳关无故人 发表于:2016-06-06 15:00:39
参考实例

周天华 发表于:2016-06-06 23:22:57

非常感谢 西出阳关无故人 ,学习了用窗体绑定表来更新数据,我死肯了用别的方法。




Public Sub 不规则分列()



    Dim j
    Dim a
    Dim b


    Dim rs As Recordset
    Set rs = New ADODB.Recordset
    rs.ActiveConnection = CurrentProject.Connection


    rs.Open "结果表", , adOpenKeyset, adLockOptimistic, adCmdTable


    Do Until rs.EOF
        rs.CancelUpdate
         a = Split(Nz(rs("备注分类")), ";")
         b = Split(Nz(rs("备注信息")), ";")
        
         If UBound(a) >= 0 Then
            For j = 0 To UBound(a)
                rs(a(j)) = b(j)
             Next j
         End If


        rs.Update
        rs.MoveNext
    Loop
    
    rs.Close
    Set rs = Nothing


End Sub



周天华 发表于:2016-06-07 10:07:51
能不能写个自定义函数,通过查询就能分列?

周天华 发表于:2016-06-07 16:17:47
求写个自定义函数,通过查询就能分列


西出阳关无故人 发表于:2016-06-09 19:35:08

在我的实例中修改如下

在模块中:

Function mysplit(ByVal Astr As String, ByVal Bstr As String, cn As String) As Variant
    Dim a
    Dim b
    Dim i
    a = Split(Nz(Astr), ";")
    b = Split(Nz(Bstr), ";")
    If UBound(a) >= 0 Then
        For i = 0 To UBound(a)
            If a(i) = cn Then
                mysplit = b(i)
            End If
        Next i
    Else
        mysplit = ""
    End If
End Function

在查询中:SELECT 原数据.序, 原数据.来源, 原数据.备注分类, 原数据.备注信息, mysplit(nz([备注分类]),[备注信息],"项目") AS 项目, mysplit([备注分类],[备注信息],"时间") AS 时间, mysplit([备注分类],[备注信息],"编号") AS 编号, mysplit([备注分类],[备注信息],"姓名") AS 姓名, mysplit([备注分类],[备注信息],"内容") AS 内容
FROM 原数据
WHERE (((原数据.备注分类) Is Not Null));



西出阳关无故人 发表于:2016-06-09 20:14:04

如果查询中没有“WHERE (((原数据.备注分类) Is Not Null))”,就在备注分类为空的时候出现“# 错误”的查询结果,希望高手解决!



周天华 发表于:2016-06-10 14:08:14
非常感谢!出现错误,我只能用   项目: IIf(IsNull([备注分类]),"",mysplit(Nz([备注分类]),[备注信息],"项目")) 来屏蔽。

总记录:9篇  页次:1/1 9 1 :