26.05.2017, 16:16 (Dieser Beitrag wurde zuletzt bearbeitet: 26.05.2017, 16:16 von Colin.
Bearbeitungsgrund: Bild wurde nicht angezeigt
)
Hallo,
ich möchte jeweils vier Zellen einer Spalte überprüfen, ob in mindestens einer dieser Zellen die Zahl 1 steht. Die Zellen wurden nach einem bestimmten Algorithmus generiert und enthalten Werte von 0 bis 4. Falls keine dieser Zellen den Wert 1 hat, soll eine von ihnen zufällig ausgewählt werden und mit 1 überschrieben werden. Leider gibt es auch hierbei eine Einschränkung: Die überschriebene Zelle darf nicht die mit dem Wert 0 sein.
In der angehängten Exceltabelle habe ich einen solchen Fall rot markiert, in dem in keiner der vier untereinander stehenden Zellen der Spalte E die 1 vorkommt und daher eine Zelle außer der, die die 0 enthält, ersetzt werden sollte. Es sollte hier also die 3, 4 oder 2 ersetzt werden.
Wenn ich 2 Beiträge bei 2 Themen sehe, werde ich neugierig und schaue mir das erste Thema an. Wenn ich dann eine gute Antwort (von Shift-Del), aber kein Feedback des Fragestellers sehe, ist der Fragesteller bei mir unten durch, aber so was von …
(Hat etwas mit guter Kinderstube zu tun)
Gruß Ralf
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
du, viele andere Helfer und eben auch ich habe zu oft erlebt, dass wir uns aufgrund einer mehr oder weniger "dünnen" Beschreibung des Problems etwas denken, dann ist es aber ganz anders gemeint. Hier kann ich mir zwar denken, dass (ausschließlich) die Spalte_E betrachtet werden soll, aber markiert ist die Spalte_A:E ...
Ich habe mir vorgenommen, möglichst wenig für den Papierkorb zu arbeiten. Darum frage ich erst einmal nach, was WIRKLICH gemeint ist. Ganz zu schweigen davon, wie die (wahrscheinlich) auszuwertenden Zahlen in E zustande kommen. Vielleicht durch Berechnung/Formel. Und dann noch ohne Nachkommastellen angezeigt? ... Wir Helfer kennen diese "Never ending stories" doch zu Genüge. Darum erwarte ich von einem Fragesteller einfach so viele Informationen, dass ich möglichst "verlustfrei" arbeiten kann. Ich weiß, anachronistisch, aber die guten alten Wertvorstellungen haben immer noch ihre Berechtigung.
Beste Grüße Günther
Excel-ist-sexy.de …schau doch mal rein! Der Sicherheit meiner Daten wegen lade ich keine *.xlsm bzw. *.xlsb- Files mehr herunter! -> So geht's ohne!
danke für Euer Feedback! Ich habe auch gerade mit Schrecken gesehen, dass ich bei meiner ersten Frage nicht geantwortet habe. Natürlich verstehe ich auch, dass ihr genaue Informationen braucht, um das Problem zu verstehen und Euch nicht vergeblich Mühe zu machen. Ich bitte um Verzeihung und verspreche, mich zu bessern.
Es handelt sich bei meiner Tabelle um ein Choice-based Conjoint Design, dass in Sawtooth erstellt wurde und dann als csv exportiert wurde. Meine Fragestellung bezieht sich tatsächlich nur auf die Spalte E. Hier hat die Software nach der 'Complete Enumeration' Methode dem Attribut "Timing" Werte von 0-4 zugeordnet. Die Formel, die ich suche würde in Spalte E ab Zeile 10 angewandt werden. In jedem Conjoint Task hat der Befragte vier Konzepte (siehe Spalte C) zur Auswahl, so kommen die Viererblöcke der Spalte E zustande. Ich möchte mit dieser Formel die Werte der Spalte E so ändern, dass in jedem dieser aus vier Auswahlmöglichkeiten bestehenden Choice-Szenarios einmal die Ausprägung "1" des Attributs "Timing" (Spalte E) vorkommt. Die Formel soll prüfen, ob in den jeweils vier Zeilen der Spalte E eine 1 vorkommt. Ist dies nicht der Fall, soll sie eine der drei Zahlen mit 1 überschreiben. Allerdings darf dies nicht die 0 sein, da diese auch ein Sonderfall ist und in jedem Choice Task vorkommen muss.
Ich hoffe, mein Problem wird so klarer. Falls ihr noch mehr Informationen braucht, sagt gerne Bescheid.
meinem Motto folgend: "Hilfe zur Selbsthilfe, keine Komplettlösungen" habe ich einen Code geschrieben, der nicht komplett diene Forderung erfüllt. Entweder überschreibst du in den einzelnen Blöcken eine beliebige Zahl mi der 1 oder du / ein Kollege aus deinem Unternehmen passt den Code entsprechend an ...
Code:
Option Explicit
Sub FindMissingNumber() Dim lRow As Long, Status As Boolean Dim Ze As Long, rngBlock As Range, c As Range
With UsedRange .Interior.Color = xlNone .Font.ColorIndex = xlAutomatic .Borders(xlEdgeBottom).LineStyle = xlNone End With lRow = Cells(Rows.Count, 5).End(xlUp).Row For Ze = 2 To lRow Step 4 Set rngBlock = Range(Cells(Ze, 5), Cells(Ze + 3, 5)) Status = False Cells(Ze, 5).Offset(3, 0).Borders(xlEdgeBottom).Weight = xlMedium For Each c In rngBlock If CInt(c) = 1 Then Status = True Exit For End If Next c If Not Status Then With rngBlock .Interior.Color = rgbLightBlue .Font.Color = rgbRed End With End If Next Ze End Sub
Beste Grüße Günther
Excel-ist-sexy.de …schau doch mal rein! Der Sicherheit meiner Daten wegen lade ich keine *.xlsm bzw. *.xlsb- Files mehr herunter! -> So geht's ohne!
vielen Dank für den Code und dass du mir nochmal geholfen hast! Ich führe die Conjoint-Analyse im Rahmen meiner Masterarbeit durch und habe leider noch nie einen derartig aufwendigen Excel-Code gesehen. Wo füge ich den Code denn überhaupt ein?
29.05.2017, 14:44 (Dieser Beitrag wurde zuletzt bearbeitet: 29.05.2017, 15:04 von GMG-CC.)
Moin Colin,
"aufwendig", na ja ... Ich programmiere fast immer so, dass auch jemand, der aus einer anderen Hochsprache (oft Pascal) kommt, einigermaßen verstehen kann, was da läuft. Über das Stadium der minimalistischen Programmierung bin ich hinaus .
Du fügst den Code in das Blatt ein, wo die Daten drin sind. Alt-F11, links das Blatt doppelklicken und rechts im großen Editor-Fenster den Code einfügen. Mehr dazu: -> http://www.excel-ist-sexy.de/sub-prozedur-einfuegen/ .
Beste Grüße Günther
Excel-ist-sexy.de …schau doch mal rein! Der Sicherheit meiner Daten wegen lade ich keine *.xlsm bzw. *.xlsb- Files mehr herunter! -> So geht's ohne!