2016-04-22 4 views
0

Ich habe eine ziemlich komplexe Aufgabe heute und könnte einige Hinweise verwenden.Excel VBA: Identifizieren und exportieren Sie eine Gruppe von Werten für die Änderung basierend auf einzelnen Element in der Gruppe

Lassen Sie mich die Szene:
Ich habe eine Excel-Arbeitsmappe mit zwei Blättern.

Das Hauptarbeitsblatt enthält viele Daten mit eindeutigen IDs und einigen Attributen. Diese IDs werden von einer Gruppenvariablen in Gruppen mit ungleicher Größe gruppiert. Optisch sieht es so etwas wie diese:

ID - Group - Attribute1 - Attribute2 - Attribute3 - ... 
11 - 1001 -   0 -   1 -  integer - ... 
12 - 1001 -   1 -   1 -  integer - ... 
11 - 1001 -   1 -   0 -  integer - ... 
44 - 1002 -   0 -   1 -  integer - ... 
15 - 1002 -   1 -   1 -  integer - ... 
21 - 1002 -   0 -   1 -  integer - ... 
97 - 1002 -   1 -   0 -  integer - ... 
32 - 1002 -   1 -   1 -  integer - ... 
33 - 1003 -   0 -   1 -  integer - ... 

Das zweite Blatt eine Eingabemaske die Gruppen in der Großschot modifizieren werden soll. Die Idee ist, dass Sie eine eindeutige ID haben, die Sie eingeben, und dann in der Lage sind, die Attribute der gesamten Gruppe zu manipulieren, zu der diese ID gehört. es so etwas wie folgt aussehen könnte:

Enter ID here: ##  
**Search!**<-Button 

------------------ 
This ID belongs to Group ####! 

All entries for group ####: 
ID - Attribute1 - Attribute2 - Attribute3 - ... 
## -   0 -   1 -  integer - ... 
## -   0 -   1 -  integer - ... 
## -   0 -   1 -  integer - ... 
## -   0 -   1 -  integer - ... 

**Update all Changes!** <- Button 

Nach den entsprechenden Änderungen vornehmen sollte die Maske, die neuen Werte in der Großschot an den entsprechenden Stellen aktualisieren.

Was ich habe, so weit:

Ich habe einen Code, der für eine ID zu einer Zeit, dieses ganze Verfahren der Fall ist. Es sucht nach der gegebenen ID im Hauptblatt und füllt die Maske mit den entsprechenden Werten, die in der Maske geändert werden können und diese Änderungen können am Ende wieder auf dem Hauptblatt gespeichert werden.

Ich tat dies mit Set foundCell = searchRange.Find(what:=mysearch, after:=searchRange.Cells(searchRange.Cells.Count)) und die verwendete foundCell.Offset(0, -8).Value, um die Maske mit relevanten Attributen zu füllen. Und umgekehrt, um die Änderungen zu speichern.

Was ich suche:
ich für einen Befehl/Befehle bin auf der Suche, die mir erlauben auf einmal die Maske mit der gesamten Gruppe von IDs zu füllen, und diese gesamte Gruppe speichern zurück, wo es herkam. Soweit mir bekannt ist, ist dies mit dem Offset-Befehl nicht machbar. Allerdings habe ich keine Ahnung, welcher Ansatz es ersetzen könnte.

Ich freue mich auf das Lesen und Experimentieren mit allen netten Ideen.

Danke so sehr;)

+1

Wenn ich Sie richtig verstehe, könnten Sie vielleicht die ID finden und die Gruppennummer zurückgeben. Verwenden Sie dann das, um die Spalte Gruppe zu filtern und Änderungen direkt auf dem Hauptblatt vorzunehmen. – Brian

+0

Danke!Ich werde dies als eine Backup-Lösung berücksichtigen; D. –

Antwort

0

Meine Idee wäre Range.AutoFilter(Field, Criteria1, Operator, Criteria2, VisibleDropDown) einen Autofilter zu verwenden, für die groupID zu filtern (mit .Find über die ID gefunden), und kopieren Sie dann über den gefilterten Bereich auf Ihre Eingabe SheetX.AutoFilter.Range.Copy maskieren.

Sie können die Eingaben mit einer anderen Schaltfläche ("Save Changes") zurückkopieren oder Private Sub Worksheet_Change(ByVal Target As Range) in Kombination mit If Not Application.Intersect(YourRange, Range(Target.Address)) Is Nothing Then verwenden, die viel mehr Ressourcen benötigt, da sie jedes Mal kopiert wird, wenn sich eine Zelle in Ihrem Bereich geändert hat.

Das Hinzufügen neuer Zeilen sollte auch möglich sein, wenn Sie Ihren Bereich jedes Mal neu berechnen, wenn Sie eine der Tasten drücken.

+0

Das klingt sehr faszinierend! Vielen Dank! Ich experimentiere ein bisschen. Würde es Ihnen etwas ausmachen, wenn ich Ihnen eine Nachricht senden könnte, wenn ich eine Frage zu diesem Ansatz hätte? –

+0

Sicher, ich hoffe ich kann sie beantworten =) – freakfeuer

Verwandte Themen