2017-06-13 8 views
1

これをフレーズする方法を見つけるのには苦労しています。Excel VBAの2つの範囲値に基づいて値を設定します

「Final」と「Raw」という2つのワークシートを持つスプレッドシートがあります。 Finalには、ユーザーがC3からC13のセルにIDを入力できる範囲があります。

そこから空になるまでその範囲をループし、値を使用してRawの範囲をループし、最終的に値を最終の3番目の範囲に引きます。

SQLと1対多の関係で話していたら、基本的には内部結合になります。

application.worksheetfunction.indexを使用するなど、いくつかの方法が考えられましたが、これを実装する方法を考えるのは苦労しています。

編集コードを追加する:

Dim indexPO As Long 
Dim i As Long 
Dim endRow As Long 

endRow = Sheets(2).Cells(Rows.Count, 1).End(xlUp).Row 

indexPO = Sheets(1).Cells(2, "C") 


Do While Worksheets(1).Cells(i, "C").Value <> "" 
    indexPO = indexPO + 1 
    Do While Worksheets(2).Cells = indexPO 
     Worksheets(1).Cells(i, "A") = Worksheets(2).Cells(i, "A") 
     If Worksheets(2).Cells(i, "A") = "" Then 
      Exit Do 
     End If 

    Loop 
Loop 

範囲1 ID AAAA BBBB CCCC

Range2の ID説明 AAAA牛 AAAA牛 AAAA牛 AAAA牛 BBBBムース BBBBムース BBBBムース FFFF豚 FFFF豚 FFFF豚

所望の出力

ID説明 AAAA牛 AAAA牛 AAAA牛 AAAA牛 BBBBムース BBBBムース BBBBムース

+2

既に試行したコードを貼り付けることはできますか?あなたはVLookupを考えましたか? – rayzinnz

+0

私は3番目の範囲を2番目の範囲の多くのレコードでいっぱいにする必要がありますが、最初の範囲のインデックスでは、残りの部分をvlookupすることができます。だから私は私が推測する最初のステップを解決する必要があります。 –

+0

私はrayzinnzに同意する必要があります。マルチルックアップソリューションを探しているようです。おそらく、期待される出力とともにデータの例を提供すれば、あなたの要求をよりよく説明するでしょう。 – goodfella

答えて

0

仮定ワークシート(1 )があなたの「最終」シートであり、ワークシート(2)が「未加工」シートである場合、これをスターターとして試してみてください:

Dim userRangeRow As Long, rawRow As Long, mergedRow As Long 
Dim ID As Variant 

mergedRow = 3 

For userRangeRow = 3 To 13 
    ID = Worksheets(1).Cells(userRangeRow, "C").Value 
    If ID = "" Then 
     Exit For 
    End If 

    rawRow = 1 
    Do While Worksheets(2).Cells(rawRow, 1).Value <> "" 
     If Worksheets(2).Cells(rawRow, 1).Value = ID Then 
      Worksheets(1).Cells(mergedRow, 1) = Worksheets(2).Cells(rawRow, 1) 
      Worksheets(1).Cells(mergedRow, 2) = Worksheets(2).Cells(rawRow, 2) 
      mergedRow = mergedRow + 1 
     End If 
     rawRow = rawRow + 1 
    Loop 
Next 
+0

これは完全に機能しました。私は目的地の範囲に合わせてmergedRowを相殺する必要がありました。本当にありがとう! –

関連する問題