我在表中有一个全名的数据。这些名称包含“姓氏,名字中间名”,我需要从全名中提取名字,姓氏和中间名并将它们存储在不同的字段中。
例如,我在表中的全名是-
威廉姆斯,罗伯特·克
温彻斯特(Sam T)
我需要将它们存储为
FirstName Last_Name MName
Robert Williams K
Sam Winchester T
我正在女士访问权限的某些表上执行此操作。谁能帮我实现这个目标。
答案 0 :(得分:0)
您可以执行此操作,但前提是您的数据一致。
那
威廉姆斯,罗伯特
或
罗伯特
那么,每个全名都输入得很好吗?以我的经验,这是非常罕见的。
因此,这里面临的挑战不是代码或将全部3个部分拆分出来的更新,而是处理没有全部3个设置的数据。
以下代码应该可以工作,并且会尝试处理丢失的部分,但是该代码的工作方式在很大程度上取决于全名数据的质量和一致性。
因此,此代码可以放在标准代码模块中,并将每一行数据处理到字段中。您可以将光标放在代码模块中的任何位置,然后按f5键,它将运行。
我很强烈(但实际上很强)建议您在数据库副本上测试他的代码,以防万一将数据弄得无法修复。
Sub SpltNames()
Dim rstData As DAO.Recordset
Dim strTable As String
Dim vBuf As Variant ' array to hold 3 parts
Dim vBuf2 As Variant ' for first and middle initials
Set rstData = CurrentDb.OpenRecordset("tblCustomers")
Do While rstData.EOF = False
rstData.Edit
' split the 3 parts into the 3 fields.
If InStr(rstData!FullName, ",") = 0 Then
' name has no , so assume just a last name
rstData!Last_name = Trim(rstData!FullName)
Else
' data has a , - split into parts
vBuf = Split(rstData!FullName, ",")
Select Case UBound(vBuf)
Case 0
' no comma, assume just a last name
rstData!Last_name = vBuf(0)
Case 1
' 2 values, like Kallal, Albert, or Kallal, Albert D.
rstData!Last_name = Trim(vBuf(0))
' take second part, and check for space for middle
vBuf2 = Split(Trim(vBuf(1)), " ")
Select Case UBound(vBuf2)
Case 0
' no middle, just take first name
rstData!FirstName = Trim(vBuf2(0))
Case 1
' a space between first and middle, save both
rstData!FirstName = Trim(vBuf2(0))
rstData!MName = Trim(vBuf2(1))
End Select
End Select
End If
rstData.Update ' save data
rstData.MoveNext ' move on to next recod
Loop
rstData.Clone
MsgBox "done processing"
End Sub
答案 1 :(得分:0)
这是非VBA解决方案的尝试:
YourTable
更改+--------------------+
| Name |
+--------------------+
| Williams, Robert K |
| Winchester, Sam T |
| Smith, John |
| Jack A |
| Harry |
| ,Thomas T |
+--------------------+
以适合您的表名。
如果没有逗号,则表示该名称是名字(可能是中间名)。
假定中间的首字母始终为1个字符
给出示例数据:
+--------+------------+-------+
| FName | LName | MName |
+--------+------------+-------+
| Robert | Williams | K |
| Sam | Winchester | T |
| John | Smith | |
| Jack | | A |
| Harry | | |
| Thomas | | T |
+--------+------------+-------+
上面的查询将产生:
{{1}}