0

複数の Excel ファイルのデータを Access テーブルに集約する必要があるプロジェクトを開始したばかりです。注意が必要なのは、私の Excel データがテーブルではなく、マインスイーパのような混乱状態 (地雷がランダムに配置されている場所) になることです。もちろん、完全にランダムではありません...

各 Excel ファイルは、基本的に、予算情報やその他のデータを含むプロジェクトの追跡フォームです。FORM であるということは、論理的ではなく視覚的に配置されていることを意味します。さらに、データは 4 つの個別のワークシートにまたがっています。

このデータを Access に効率的に取り込むための提案はありますか?

前提:
1) 各 Excel ファイルは、Access では 1 行のデータのみになります。
2) データが毎回まったく同じセルに入力されるように、各 Excel ファイルはロックされます。

これらの仮定に基づいて、個々のセルを参照する適切なヘッダー値を持つ非表示のワークシートを作成して、統合されたデータ テーブルを作成することを考えていました。次に、Access からマクロを作成して、目的のブックを選択し、その非表示のテーブルから新しいレコードをインポートできるようにしました。もちろん、Excel テーブルから 1 つまたは複数のレコードをインポートする方法に関する情報はたくさんあります。

私が考慮すべき代替方法はありますか?私が概説した手順を簡素化するためのトリックはありますか?

前もって感謝します!

4

1 に答える 1

0

これはかなり単純な作業のようです。あなたが説明したように、各ファイルから同じセル位置を読み取っているため、Excel で非表示のシートを作成するという考えはスキップします。アーキテクチャの観点から、私は LS_Dev に同意します - シンプルにしてください! あなたに必要なのは

  1. (複数の) Excel ファイルをマークして開くことができる選択メカニズム
  2. 選択した各 Excel ファイルを開いて読み、必要なデータを選択するルーチン
  3. そのデータを 1 つ (または複数) の Access テーブルに書き込むコードのブロック

上記の 3 つのすべては、1 つの Access VBA モジュールできちんと実行できます。

広告 1.

Sub XLSProcessMulti()
Dim Idx As Long

    With Application.FileDialog(msoFileDialogFilePicker)
        .AllowMultiSelect = True
        .Title = "Pick one or more files"
        .Filters.Add "Worksheets", "*.xl*", 1

        If .Show = -1 Then
            For Idx = 1 To .SelectedItems.Count
                XLSProcessSingle .SelectedItems(Idx)
            Next Idx
        End If

    End With
End Sub

広告 2。

Sub XLSProcessSingle(FileName As String)
' needs creation of a reference to [Microsoft Excel xx.y Object Library]
Dim WB As Excel.Workbook
Dim Idx As Long

    Set WB = Excel.Workbooks.Open(FileName)

    ' dummy code here just to show a bit how the Excel object can be accessed
    Debug.Print WB.Name
    For Idx = 1 To WB.Worksheets.Count
        Debug.Print WB.Worksheets(Idx).Name
        Debug.Print WB.Worksheets(Idx).[A1] ' access a cell by its address enclosed in []
    Next Idx

    ' read sheets, ranges etc. by name or position into local variables
    ' and store them in Access table(s)

    ' X = WB.Worksheets(1).[A1]                  ' by position
    ' Y = WB.Worksheets("MySecondSheet").[B2]    ' by sheet name
    ' Z = WB.Worksheets(3).Range("MyNamedRange") ' single cell named range
    ' etc.


    WB.Close
End Sub

広告 3.

あなたの番 :)

于 2013-08-02T08:50:39.013 に答える