所以有人给了我订单电子表格,每个订单的唯一价值是PO,给我电子表格的人是懒惰的,并决定订单有多个PO,但相同的信息,他们只是将它们分开“/”。所以例如我的表看起来像这样
PO Vendor State
123456/234567 Bob KY
345678 Joe GA
123432/123456 Sue CA
234234 Mike CA
我希望使用“/”符号作为分隔符将PO分开,所以它看起来像这样。
PO Vendor State
123456 Bob KY
234567 Bob KY
345678 Joe GA
123432 Sue CA
123456 Sue CA
234234 Mike CA
现在,我已经集思广益了几个方法来解决这个问题。最终我想要Access中的这些数据。原始格式的数据在Excel中。我想要做的是在Access中编写一个vba函数,我可以将其与SQL语句结合使用来分隔值。我现在正在努力,因为我不知道从哪里开始。
答案 0 :(得分:5)
关于此:
1)将源数据导入名为SourceData的新Access表。
2)创建一个新查询,直接进入SQL视图并添加以下代码:
SELECT * INTO ImportedData
FROM (
SELECT PO, Vendor, State
FROM SourceData
WHERE InStr(PO, '/') = 0
UNION ALL
SELECT Left(PO, InStr(PO, '/') - 1), Vendor, State
FROM SourceData
WHERE InStr(PO, '/') > 0
UNION ALL
SELECT Mid(PO, InStr(PO, '/') + 1), Vendor, State
FROM SourceData
WHERE InStr(PO, '/') > 0) AS CleanedUp;
这是Access术语中的'make table'查询(尽管有嵌套的联合查询);对于'追加'查询,改为将前两行改为
INSERT INTO ImportedData
SELECT * FROM (
(其余部分不会改变。)不同之处在于,重新运行make表查询将清除目标表中已有的内容,而追加查询会添加到任何现有数据。
3)运行查询。
答案 1 :(得分:1)
如果我必须这样做,我会
然后,在VBA例程中我会
rstIn
,为[ActualTable]打开rstOut
rstIn
记录集。Split()
功能将“/”上的[PO]值拆分为数组。For Each
数组项我会用rstOut.AddNew
将记录写入[ActualTable] 答案 2 :(得分:0)
在Excel中,试试这个:
IF(ISERROR(FIND("/",A1,1))=TRUE,A1, Left(A1, 6))
在旁边的单元格中,输入以下内容:
IF(ISERROR(FIND("/",A1,1))=TRUE,"", Right(A1, 6))
这会将您的PO分成两列。从那里开始写一个循环,在适当的时候创建一个新的记录。