3

所以有人给了我一个订单电子表格,每个订单的唯一价值是采购订单,给我电子表格的人很懒,决定订单有多个采购订单,但相同的信息他们只是用“/”分隔它们. 所以例如我的桌子看起来像这样

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 语句结合使用来分隔值。我现在很挣扎,因为我不知道从哪里开始。

4

3 回答 3

5

关于这个:

1) 将源数据导入到名为 SourceData 的新 Access 表中。

2)新建一个查询,直接进入SQL View,添加如下代码:

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;

这是访问行话中的“生成表”查询(尽管使用嵌套联合查询);对于“追加”查询,将前两行更改为

INSERT INTO ImportedData
SELECT * FROM (

(其余部分不变。)不同之处在于重新运行生成表查询将清除目标表中已经存在的任何内容,而追加查询将添加到任何现有数据。

3) 运行查询。

于 2013-11-05T20:08:28.590 回答
1

如果我必须这样做,我会

  • 将原始数据导入名为 [TempTable] 的表中。
  • 使用“仅结构”选项将 [TempTable] 复制到名为 [ActualTable] 的新表中。

然后,在 VBA 例程中,我会

  • 打开两个 DAO 记录集,rstIn用于 [TempTable] 和rstOut[ActualTable]
  • 循环遍历rstIn记录集。
  • 使用 VBASplit()函数将“/”上的 [PO] 值拆分为一个数组。
  • For Each我将用于rstOut.AddNew将记录写入 [ActualTable] 的数组项
于 2013-11-05T20:31:15.750 回答
0

在 Excel 中,试试这个:

IF(ISERROR(FIND("/",A1,1))=TRUE,A1, Left(A1, 6))

在它旁边的单元格中,输入如下内容:

IF(ISERROR(FIND("/",A1,1))=TRUE,"", Right(A1, 6))

这会将您的采购订单分成 2 列。从那里,编写一个循环,在适当的地方创建一条新记录。

于 2013-11-05T19:56:39.800 回答