私は3つの範囲(シート)を横断し、前後にデータをチェックする際に助けが必要です。しかし、これらのForループは私を殺している..私にとっては3ループが多すぎるし、コードを論理的にどのように拡散するのかも分からない。Excel vba - 3つの範囲を比較
自分のバリアントの配列に及ぶ:
- 概要
- ユーザー
- 記事
私はオンライン表示には、ここにシートを持っています。それをダウンロードする必要はありません。要約シートが空の場合、データを収集するマクロコードがあります。そしてこれはそれがやるべきこととして働いています。 https://skydrive.live.com/view.aspx?cid=5D018DB0458F03ED&resid=5D018DB0458F03ED%21164
スプレッドシートは、その中にいくつかのノルウェーの言葉がありますが、それはあまり重要ではないはず:)それは基本的にOppsummering(概要)、Brukere(ユーザー)とArtikler(関連記事)です。
とにかく、要約シートに記事がある回数だけ各ユーザーが含まれていることを確認したいと思います。基本的にはミラーリングされているはずです。ユーザーシートから行(名前)を削除した場合は、その行も[概要]シートから削除する必要があります。しかし同時に、要約シートの列Dのデータも保持したいと考えています。ですから、私はそのデータをユーザーIDとアーティクルIDとともに保管して、列Dのデータが正しい場所にあることを確認する必要があります。あるループの場合3、それは私が思う私のために少しあまりにも多くのですか
それが今であるように、これは私の(悪い)コード..です
With shtSummary
ReDim tempArr(1 To UBound(arrUsers) * UBound(arrarticles), 1 To 6)
If Not .Range("A2") = "" Then
arrsummary = .Range("A2", .Cells(Rows.Count, "A").End(xlUp)).Resize(, 6)
' Start collecting data, make sure summary sheet contains refreshed data while keeping the amount of each item for that particular user
For u = 1 To UBound(arrsummary)
For i = 1 To UBound(arrUsers)
For p = 1 To UBound(arrarticles)
j = j + 1
' Check ID
If arrsummary(u, 1) = arrUsers(i, 1) And arrsummary(u, 3) = arrarticles(p, 1) Then
' ID
tempArr(j, 1) = arrUsers(u, 1)
' Name
tempArr(j, 2) = arrUsers(u, 2)
' Article Number
tempArr(j, 3) = arrarticles(i, 1)
' Article Name
tempArr(j, 4) = arrarticles(i, 2)
' Amount of that item
tempArr(j, 5) = arrsumary(u, 5)
' Price of that article
tempArr(j, 6) = arrarticles(i, 3)
End If
Next
Next
Next
Else
' If summary sheet is empty, add all data from the two other sheets
For u = 1 To UBound(arrUsers)
For i = 1 To UBound(arrarticles)
j = j + 1
' ID
tempArr(j, 1) = arrUsers(u, 1)
' Name
tempArr(j, 2) = arrUsers(u, 2)
' Article number
tempArr(j, 3) = arrarticles(i, 1)
' Article name
tempArr(j, 4) = arrarticles(i, 2)
' Article price
tempArr(j, 6) = arrarticles(i, 3)
Next
Next
' Finally add data to spreadsheet Summary
.Range("A2").Resize(j, 6).Value = tempArr
End If
End With
お知らせ..私はここの前に同様のスレッドを持っていました私は別のシートを追加して基本的に要約シートからデータをコピーすることをお勧めしました。そうすれば、最後に要約シートからデータを消去することができます。しかし、なぜ私はそれをする必要があるのかわかりません。とにかく、サマリーシートのすべてのデータをshtSummaryに保存しています。それはちょうどArray内にあります。とにかくそれは同じデータですか?
編集:このことがどのように機能するかを簡略化します。記事の各項目のユーザー名を繰り返してください。意味は、記事が10件ある場合は、ユーザー名を10回繰り返します。記事は記事のシートにあり、ユーザーはユーザーのシートにあります。しかし、要約シートの列Dのデータは別のシートから収集されず、要約シートに直接入力されます。要約シートを空にして、ユーザーと記事のシートからデータを再インポートするだけで、データが失われるという問題があります。原因は簡単です(上記のマクロで行います)。問題の各ユーザーの各アイテムの金額データを覚えているだけです。ユーザID「2」、articleNumber「452」の値が列Dにある場合、その値を保持し、ColumnDの値「2」がuserID「2」の行に「接着」されていることを確認します。 "
こんにちは、ファイルはskydriveから消えたようですか? – brettdj
申し訳ありませんが、許可はすべて間違っていました。 :) –
この部分は私を混乱させました。「同時に、D列のデータも要約シートに保存したい」ユーザーを削除した場合(例: Ringo - そのユーザーに関連するすべての行(この場合は20〜25行)を完全に削除するか、列D以外のすべてを削除する必要がありますか? – barrowc