2

タイトルがあまり混乱しないことを願っています!

基本的に、私は自分自身の在庫を Excel で持っています。メニューとして機能するワークシートと、各クライアント (例: TD Bank、Rogers、Standard Life) 用のワークシートがあります (この場合、Videotron をクライアントとして):

    A           B          C                 D      E            F        G         H
1   CLIENT      UNIQUEID   MATERIALTYPE      SIZE   MATERIALCODE LOCATION QTYPERBOX TOTALQTY
2   Videotron   VID-001    Outgoing Envelope 9x12   VID-OE0812   4-1-3    500       15000
3   Videotron   VID-002    Letterhead        8.5x14 VID-LH0812   1-1-1    2500      50000
4   Videotron   VID-003    Reply Envelope    #9     VID-RE0812   8-5-2    1000      7500

助けが必要なワークシートは、倉庫内にあるすべての物理的な場所のリストを含む「場所」シートです。次のようになります。

     A          B        C          D              E      F              G           H
     LOCATION   CLIENT   UNIQUEID   MATERIALTYPE   SIZE   MATERIALCODE   QTYPERBOX   TOTALQTY 
1    1-1-1    
2    1-1-2
3    1-1-3
4    1-2-1
5    1-2-2
6    1-2-3
     etc. etc.

場所ごとに、クライアントのワークシートの 1 つにエントリがあり、どこにでもある可能性があります。表示されたワークシートに従って物理的な場所「1-1-1」を例にとると、そこには 50,000 個の Videotron レターヘッドのパレットがあります。コードで実行する必要があるのは、すべてのクライアント ワークシートで '1-1-1' を検索し、1 行目の上の列 B:H に情報をコピーすることが見つかったら、場所 ' についても同じプロセスが必要です。行 2 の 1-1-2 というように、私の最後の場所が '8-8-3' になるまで続きます。

目標は、'Locations' ワークシートに、クライアント ワークシートから取得した正しい情報を入力することです。これにより、常に現在の実地在庫が正確に反映されます。これは、場所「1-1-1」から 10,000 個の封筒を削除すると、「場所」ワークシートで自動的に更新されることを意味します。同様のシナリオは、倉庫で 2 つのパレットを物理的に交換した場合です。場所 '1-1-1' のパレットを '2-3-1' のパレットと交換し、クライアント ワークシートで変更を行ったとします。 ..変更を反映するには、「場所」ワークシートが必要です。

私は多くのコードを見てきましたが、その多くは私を助けることができると思いますが、それは私が達成しようとしていることの一部にしか関係しておらず、それらをつなぎ合わせるのに十分な知識や理解がありません。私のワークブック。

これを機能させることが可能だと思う人はいますか、それとも私は単に夢を見ているだけですか?

編集: 私は Excel 2003 を使用していると言うべきです。

4

1 に答える 1

0

私のコメントによると、データベースである必要があるとまだ主張しますが、これが現実であるため、ビジネス上の制約により最も効率的な方法から遠ざかる可能性があることを認識しています。

すっごい。多分あなたは何かを試すことができます...

Sub sortInventory()
Dim wsInv As Worksheet
Dim wsCust As Worksheet

Dim rngSearch As Range
Dim cellSearch As Range
Dim rngLoc As Range
Dim rngCurLoc As Range

Dim findVal As String

Dim locCol As Integer, custCol As Integer

Dim locFound As Boolean





Set wsInv = ActiveWorkbook.Sheets("Locations")
Set rngLoc = wsInv.Range("A1", wsInv.Range("A1").End(xlDown))

For Each rngCurLoc In rngLoc.Cells
'This is what you're looking for in each sheet.
    findVal = rngCurLoc.Value
    locFound = False
    For Each wsCust In ActiveWorkbook.Sheets
        If locFound Then Exit For

       'Exclude the location sheet
        If wsCust.Name = "Locations" Then
         Next wsCust
        End If

        Set rngSearch = wsCust.Range("F1", Range("F1").End(xlDown))

        For Each cellSearch In rngSearch.Cells
        'Look for your value
            If cellSearch.Value = findVal Then ''Alternate method could use the "find"
            'Transfer to Locations
            'Use an offset loop to pick/place map to new location.

                 For custCol = 1 To 8 '8 can modify to the width of your data (I think it's 8)
                Select Case custCol
                    Case Is <= 5 'The first 5 are offset by one to the location sheet.
                        wsInv.Cells(rngCurLoc.Row, custCol + 1).Value = wsCust.Cells(cellSearch.Row, custCol).Value
                    Case 6 'Location column
                        ''Do nothing.
                    Case Else 'Direct map
                        wsInv.Cells(rngCurLoc.Row, custCol).Value = wsCust.Cells(cellSearch.Row, custCol).Value
                End Select
            Next custCol
            locFound = True 'This will kick the 2nd loop out to the range loop.
            Exit For
        End If
    Next wsCust
Next rngCurLoc




End Sub

実際にテストすることはできませんでした。ここでコードブロックに貼り付けたときにタブが少しおかしくなったので、制御ループがうまく並んでいません。とにかく始める必要があります。オブジェクトとコレクションが重いですが、何をしようとしているのかを明確に定義しないと、VBA コードはかなり薄っぺらなものになる可能性があります。

于 2013-01-04T13:10:18.560 に答える