Excel - Een macro-kopie naar cel op basis van een specifiek criterium

Kwestie

Ik zit vast. Ik hoop dat iemand me vandaag kan helpen. Ik heb een Excel-spreadsheet met 1400 rijen. De eerste 3 rijen zijn niet relevant (rubrieken). Ik heb 3 cellen met $ tring-inhoud (B: C: D). Wat ik moet doen is een macro maken die specifiek in kolom B en kolom D voor niet-nulwaarden kan kijken. Er zijn meerdere cellen in deze spreadsheet die dezelfde waarde moeten hebben. Kolom B en D moeten worden vergeleken en moeten worden gevonden met niet-nulwaarden. En in hetzelfde geval waar Kolom B ook opnieuw wordt gevonden (lus) (dezelfde celinhoud, maar andere rij) heeft Kol D een nulwaarde (ontbrekende inhoud). Ik moet deze Col D vullen met dezelfde inhoud als het eerste record met Col B- en D-content. In mijn voorbeeld is de waarde hard gecodeerd, ik weet niet hoe ik het anders moet doen. Ik ben erg verdwaald en ik heb wat hulp nodig om dit te voltooien. Dit is wat ik heb.

 Sub _MacroUser10 () Set I = Werkbladen ("Blad2") Dim d Dim jd = 1 'lusteller j = 4' start op de 4e rij vanwege de koppen Do Until ActiveCell (I.Range ("B" & j) = " User Portfolio Group ") En ActiveCell (I.Range (" D "& j null)) 'loop If I.Range (" B "& j) =" User2010 "Vervolgens heeft de cel het recht User2010 ... etc If I .Range ("D" & j) = "" Dan 'wordt verondersteld de nulwaarden te vinden in D d = d + 1 Einde If i.Rows (d). Waarde = I. Rows (j) .Waardeinde Als j = j + 1 Loop End Sub 

Globaal genomen. Ik moet de inhoud opzoeken in cel B $ en de inhoud opzoeken in Cell D $. Er is één rij met inhoud op beide plaatsen. Vervolgens moet ik alle andere overeenkomende rijen vinden die overeenkomen met B $ die geen waarden hebben in D $. Ik moet die ontbrekende waarden van de niet-nul D $ toevoegen aan de nul D $.

Oplossing

Als het er altijd om gaat dat de gevulde rij zich vóór de lege rij zal voordoen, dan kunt u het woordenboekobject gebruiken. Daarom

  • Loop tot het einde door je eerste rij
  • Als beide cellen niet leeg zijn, combineer dan de waarde van B en D als sleutel en waarde van C als waarde.
  • Terwijl je door rijen gaat, controleer je eerst of die sleutel in het woordenboek staat. Zo ja, dan heb je de waarde die anders aan het woordenboek wordt toegevoegd

 'om een ​​dic-object te maken Stel dicMyDic = CreateObect ("Scripting.Dictionary") in' dit is hoe sleutel strKey = B1 & "|" kan zijn & D1 'controleer of de waarde van D leeg is of niet' om de waarde toe te voegen aan dic IF Not (dicMyDic.Exists (strKey)) en vervolgens dicMyDic.Add-sleutel: = strKey, Item: = val 'om de waarde van dic IF te krijgen (dicMyDic.Exists (strKey)) then val = dicMyDic (strKey) 

Dank aan rizvisa1 voor deze tip.

Vorige Artikel Volgende Artikel

Top Tips