3

誰かが注文のスプレッドシートをくれました。各注文の一意の値は 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 にあります。私がやりたかったのは、値を区切るために SQL ステートメントと組み合わせて使用​​できる vba 関数を Access で作成することです。どこから始めればいいのかわからないので、現時点では苦労しています。

4

3 に答える 3

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 用語での「テーブル作成」クエリです (ただし、ネストされたユニオン クエリを使用します)。'append' クエリの場合は、上の 2 行を次のように変更します。

INSERT INTO ImportedData
SELECT * FROM (

(残りは変更されません。)違いは、テーブル作成クエリを再実行すると、宛先テーブルに既にあったものがすべてクリアされるのに対し、追加クエリは既存のデータに追加されることです。

3) クエリを実行します。

于 2013-11-05T20:08:28.590 に答える
1

もし私がそれをしなければならなかったなら、私はそうするだろう

  • 生データを [TempTable] という名前のテーブルにインポートします。
  • 「構造のみ」オプションを使用して、[TempTable] を [ActualTable] という名前の新しいテーブルにコピーします。

次に、VBAルーチンで私は

  • rstIn[TempTable] と [ActualTable] のrstOut2つの DAO レコードセットを開きます。
  • レコードセットをループしrstInます。
  • VBASplit()関数を使用して、「/」の[PO]値を配列に分割します。
  • For EachrstOut.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))

これにより、PO が 2 つの列に分割されます。そこから、必要に応じて新しいレコードを作成するループを作成します。

于 2013-11-05T19:56:39.800 に答える