2016-03-31 28 views
0

İki sütunludan rastgele zamanlarım ve iki farklı kaynaktan gelen sütunlar var, bu nedenle sütunlar aynı miktarda veri noktasına sahip değil. İlk sütunda ilk kez başlamak ve ikinci sütunda her seferinde karşılaştırmak istiyorum. Bazen bir eşleşme varsa, ilgili verileri almak istiyorum. Bir eşleşme bulunduğunda (eğer varsa) kodun ilk sütundaki ikinci hücreye gitmesini ve bunu ikinci sütundaki her değerle karşılaştırmasını istiyorum.Bir sütundaki her bir hücreyi başka bir sütundaki her hücreye göre kodlamak için kod

Sub TransferInfo() 

'Activate the Sub to Convert and Format Dates 
Call ConvertDates 

'Define Variables 
Dim st As Worksheet 
Dim ts As Worksheet 
Dim lastrow As Long 
Dim i As Integer 
j = 2 

'Find and set the last used row 
Set st = ThisWorkbook.Worksheets("Data Table") 
lastrow = st.Cells(st.Rows.Count, "B").End(xlUp).Row 
Set ts = ThisWorkbook.Worksheets("ShopFloor") 

'Cycle through/compare Row J, Column 18 based on each cell in Row I, Column 14 
For i = 2 To lastrow 
    Do Until IsEmpty(ts.Cells(j, 8)) Or IsEmpty(st.Cells(j, 2)) 
     If st.Cells(i, 14).Value = ts.Cells(j, 18).Value Then 
    st.Cells(i, 15).Value = ts.Cells(j, 2).Value 
    Exit Do 
    Else 
    st.Cells(i, 15).Value = "" 
    End If 
    j = j + 1 
    Loop 
j = 2 
Next i 

End Sub 

Bu alt başında çağrı diğer alt basitçe olasılığını artırmak için en yakın 15 dakikalık zaman dilimi her sütunda kez yuvarlar: Burada

var bugüne kadar kodudur sütunlar arasında eşleşir.

Sorum şu ki: Bu kod, iki sütun arasında eşleşen zamanlar olmasına rağmen daha fazla bilgi kopyalayıp yapıştırmaz. Neden çalışmadığım kod? Ayrıca, daha büyük veri kümeleri ile bu kodun Excel'i kilitleyebileceğinden ve çok fazla veriyi bir çok kez işlemeye çalışan bir döngü içinde bir döngüye sahip olduğumdan korkuyorum, ancak daha verimli bir yol bilmiyorum. Bu kod olmadan ne deniyorum.

Bu kodun neden işe yaramadığı konusunda herhangi bir kavrayış varsa, herhangi bir yardımı çok takdir ediyorum.

Teşekkürler!

+0

gerek yok? –

cevap

1

Kodunuza bağlı olarak, sadece bir INDEX/MATCH formülü gerekiyor gibi görünüyor. O2 içinde bunu kullanın ve kopyalayın:

=IFERROR(INDEX(B:B,MATCH(N2,R:R,0)),"") 

bir `= MATCH()` formülü nesi VBA

+0

Hızlı cevabınız için teşekkür ederim ve daha önce eşleşme işlevini kullanmadım ama bakacağım. Ama benim durumumda, formülünü D sütununa eklerim ve örneğin A1 B25 ile eşleşirse, C25'i D1 – Cameron

+1

Makro Adam'a çekmem gerekirdi, cevabınız için teşekkürler, onu bulmak için bir versiyonunu kullandım çözümüm. Aslında VBA'nın daha verimli olacağı fikrine kapılmıştım. Tekrar teşekkürler! – Cameron

İlgili konular