マクロコードを使用して作業することを試みたこのワークブックがあります。そして私はそれに助けをしましたが、誰も私が何をしているのか理解していないようです。これは、弊社の各ユーザーが受け取った作業服の量を追跡して保持するために使用されるワークブックです。 https://skydrive.live.com/view.aspx?cid=5D018DB0458F03ED&resid=5D018DB0458F03ED%21163Excel VBA - 範囲と配列を比較するための支援
- 概要
- ユーザー
- 記事
一般的な考え方は、私がデータからピボットテーブルを作成するというものであった:だから、基本的に、私はこのワークブックの3枚を持っています要約シート。しかし、私はVBAコードを使用してワークブックを動的にしたい。だから私はここでそれぞれのシートを通過します。
ユーザー:このワークブックには1つの列(A)が含まれ、A1は「名前」と呼ばれ、その下の各行には当社の各ユーザーが含まれます。
記事:このブックには2つの列があり、A1は記事の名前(ズボンなど)で、もう1つはそのアイテムの価格です。
要約:これは難しい部分です。このシートは他の2枚のシートのデータを反映している必要がありますが、各ユーザーが受け取った各項目のの数も、個を記録しておく必要があります。このデータを要約シートの列Dに保存します。だから、ユーザーシートの各名前は、記事シートに項目がある回数だけ繰り返す必要があります。記事シートに10項目ある場合は、その名前を10回繰り返す必要があります。そうすれば、ユーザーが受け取った各アイテムの数がどれくらいあるかを知ることができます。
だから、トリッキーな部分は、ユーザーと記事のシートから実際にコンテンツをミラーリングすることですが、Dのデータをサマリーシートに保存します。また、ユーザーシートから行を削除した場合、そのユーザーは、登録された各項目の量を含めて、要約シートから完全に削除する必要があることにも留意してください。また、記事シートにアイテムを追加すると、そのアイテムを要約シートの各ユーザーに追加する必要があります。
誰かが私を助けてくれたマクロコードがありますが、何が起こっているのか分かりません。私は配列やループでは頑丈ではありません。そして、これは私が今それを学ぶ可能性を見ているので、私が今学んでいることです。
しかし私はすべてのシートを自分の範囲で収集し、すべてのデータを保存する必要があることを知ります。次に、ユーザ範囲がサマリー範囲と比較され、ユーザがその範囲内に存在するかどうかを確認する必要があります。そうであれば、記事範囲からデータを更新し、ColumnDの金額を保持してください。要約シートにない場合は追加してください。同じことが各項目にも適用されます。
しかし、ユーザーを誤って入力しても、そのユーザーの金額を追加するまでユーザーが入力しないとどうなりますか?ユーザーシートに戻ってユーザーの名前を変更すると、前に追加したすべてのデータが失われますか?あるいは、ユーザーの名前を変更することも可能ですか?その場合は、WindowsのCIDによく似た、ユーザーごとにいくつかの種類のIDが必要になるでしょうか?これはすべてあまりにも過剰なことですか?時間があれば、それはもっと価値のあるものになる。私は本当にここにいくつかの助けをいただければと思います:)
Public Sub NewCollect()
' Declare variables
Dim shtUsers, shtmyArticles, shtmySummary, shtmyAmount As Worksheet
Dim arrUsers, arrarticles, arramount, arrsummary As Long
' Set worksheets
Set shtUsers = Sheets("Brukere")
Set shtArticles = Sheets("Artikler")
Set shtSummary = Sheets("Oppsummering")
Set shtAmount = Sheets("Antall")
' Get range from shtUsers
With shtUsers
If Not .Range("A2") = "" Then
arrUsers = .Range("A2", .Cells(Rows.Count, "A").End(xlUp)).Resize(, 2)
End If
End With
' Get range from shtArticles
With shtArticles
If Not .Range("A2") = "" Then
arrarticles = .Range("A2", .Cells(Rows.Count, "A").End(xlUp)).Resize(, 3)
End If
End With
' Get range from shtAmount (The new sheet)
With shtAmount
If Not .Range("A2") = "" Then
arramount = .Range("A2", .Cells(Rows.Count, "A").End(xlUp)).Resize(, 2)
End If
End With
' Get range from shtSummary
With shtSummary
If Not .Range("A2") = "" Then
'Here I have no idea where to even begin
Else
' If Summary sheet is blank, get data from other sheet and insert
ReDim tempArr(1 To UBound(arrUsers) * UBound(arrarticles), 1 To 6)
For u = 1 To UBound(arrUsers)
For i = 1 To UBound(arrarticles)
j = j + 1
tempArr(j, 1) = arrUsers(u, 1)
tempArr(j, 2) = arrUsers(u, 2)
tempArr(j, 3) = arrarticles(i, 1)
tempArr(j, 4) = arrarticles(i, 2)
tempArr(j, 6) = arrarticles(i, 3)
Next
Next
' Add the data
.Range("A2").Resize(j, 6).Value = tempArr
End If
End With
編集を:私はちょうど私が各項目のIDを追加することができますIDをkalledユーザーと記事シートの両方に新しい列を追加しました。 SkyDriveで実際のシートを更新しました。
ああ、これはもっと似ているようです。 :)しかし、それは少し難しいとより複雑なようです。あなたは少しの例を気にしますか?それともあまりにも多くのことを求めているだろうか?あなたがもっと多くのポイントを望むなら、私はこの質問に賞金を追加することができます:)それは基本的に私はまだ自信がないループです。 –
@ケニー、私はマクロを投稿しようとしましたが、彼らは37Kで体重があり、私は30Kに制限されています。 – paxdiablo
これでコードを追加しました。これは基本的に私が現在いる場所です。 –