如何拆分Access字段内的多行内容并分别存入对应新字段
Access 多行字段拆分到独立字段解决方案
以下操作默认你的多行字段的换行符为 Access 标准换行符vbCrLf(ASCII 13 + ASCII 10,即回车+换行组合),如果是其他来源导入的特殊换行符,按需调整拆分字符即可。
方法1:内置函数直接实现(无需编码)
假设你的原表名为源表,存储多行内容的原字段名为multiline_field,直接新建选择查询,在字段栏输入对应提取表达式即可:
- 提取第一行(field-1):
field-1: IIf(InStr([multiline_field], Chr(13) & Chr(10)) > 0, Left([multiline_field], InStr([multiline_field], Chr(13) & Chr(10)) - 1), [multiline_field]) - 提取第二行(field-2):
field-2: IIf(InStr([multiline_field], Chr(13) & Chr(10))>0, IIf(InStr(InStr([multiline_field],Chr(13) & Chr(10))+2,[multiline_field],Chr(13) & Chr(10))>0, Mid([multiline_field],InStr([multiline_field],Chr(13) & Chr(10))+2,InStr(InStr([multiline_field],Chr(13) & Chr(10))+2,[multiline_field],Chr(13) & Chr(10)) - InStr([multiline_field],Chr(13) & Chr(10))-2), Mid([multiline_field],InStr([multiline_field],Chr(13) & Chr(10))+2)), Null) - 提取第三行、第四行的逻辑和第二行一致,只是嵌套的
InStr起始位置逐层后移即可。
如果需要将拆分结果永久存入表中,将查询类型改为「生成表查询」,指定新表名后运行即可。
方法2:VBA 自定义函数实现(推荐,逻辑更简洁)
对于行数较多的场景,自定义函数可大幅简化表达式,后续维护成本更低:
- 按
Alt + F11打开 VBA 编辑器,点击「插入」-「模块」 - 粘贴以下代码到模块中:
Function GetLineByNum(strSource As String, lineNum As Integer) As Variant Dim lineArr() As String ' 按换行符拆分字符串为数组 lineArr = Split(strSource, vbCrLf) ' 数组下标从0开始,判断目标行是否存在 If lineNum - 1 <= UBound(lineArr) Then GetLineByNum = Trim(lineArr(lineNum - 1)) Else GetLineByNum = Null End If End Function
- 保存模块后关闭 VBA 编辑器,回到查询设计界面,直接调用函数提取对应行即可:
- field-1:
GetLineByNum([multiline_field], 1) - field-2:
GetLineByNum([multiline_field], 2) - field-3:
GetLineByNum([multiline_field], 3) - field-4:
GetLineByNum([multiline_field], 4)
注意事项
- 如果你的数据是从其他系统导入,换行符仅为换行
Chr(10),将代码中Split的第二个参数改为Chr(10)即可 - 原字段为空或行数不足时,函数会自动返回Null,无需额外做判空处理
内容的提问来源于stack exchange,提问作者Faruk_Khan
相关产品推荐
相关产品推荐

