Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1160to1164
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Zellen ansteuern mit Spalten/Zeilen-Variabeln

Zellen ansteuern mit Spalten/Zeilen-Variabeln
Martin
Hallo zusammen,
ich habe eine Liste (Exceldatei), in der in der ersten Spalte die Kennziffer einer Maschine steht, in der zweiten Spalte die Uhrzeit (in Minuten, z.B. 08:00), an der die Maschine zu arbeiten beginnt, und in der dritten Spalte die Uhrzeit, in der die Maschine ihre Arbeit beendet. Es gibt 20 Maschinen, also die Kennziffer 1-20. Die Arbeitszeiten der 20 Maschinen soll nun in einer Exceldatei farblich dargestellt werden. Dazu schreibe ich zuerst in der Spalte A dieser Datei die Uhrzeit in Minuten auf (beginnend in A2 mit 08:00, A3=08:01 usw bis 23:59). In der Zeile 1 werden die Kennziffern der Maschinen eingetragen (beginnend mit B1). Ein Makro soll nun die Ausgangsliste durchgehen und bei jedem Eintrag sich jeweils die Kennziffer und die Uhrzeiten als Variable merken. Danach soll das Makro in die "Darstellungsdatei" gehen, in der Zeile 1 anhand der Kennziffer-Variable die entsprechende Kennziffer suchen und in der Spalte A anhand der ersten Uhrzeit-Variable die entsprechende Uhrzeit finden. Die zwei gesuchten Werte repräsentieren nun die Spalte und die Zeile, deren Schnittzelle den Zeitpunkt darstellt, an dem die Maschine zu arbeiten begonnen hat. Im Prinzip mache ich damit das Analoge wie der Befehl "cells(a,b).select". A und B muss mein Makro durch die Suche in der Spalte A und in der Zeile 1 ermitteln. Wie kann ich das machen?
AW: Zellen ansteuern mit Spalten/Zeilen-Variabeln
22.06.2010 00:15:00
jowe
Hallo Martin,
kannst Du ein Beispiel hochladen?
Günstig wäre dabei eine Darstellung des gewünschten Ergebnisses.
Gruß
Jochen
AW: Zellen ansteuern mit Spalten/Zeilen-Variabeln
22.06.2010 10:45:41
martin
Ciao Jochen,
ich habe die zwei Dateien hochgeladen. In der Zieldatei siehst du, wie ich die Maschinenbelegung grafisch darstellen will
Wo sind die Dateien denn?
22.06.2010 11:12:47
jowe
AW: Zellen ansteuern mit Spalten/Zeilen-Variabeln
22.06.2010 17:00:14
heide_tr
hallo Martin,
Die Frage ist, was letztendlich dabei herauskommen soll und ob's nicht eleganter geht. Aber um Deine Frage zu beantworten würde ich ein Array bilden (zweidimensional, 1. Dimension die Maschinen, 2. Dimension die Minuten). In einem ersten Durchlauf würde ich das Array mit Anfang- und Endezeitpunkt versehen und in einem Anschließenden Durchlauf durch das Array die Zelladdressen ermitteln. Wenn die "Darstellungsdatei" Sheet 2 ist, sähe das so aus:


Sub Maschinen()
Dim MinutenArr(20, 960) As Variant        ' 20 Maschinen 961 Minuten (8:00 - 24:00)
   For j = 2 To 3                   ' Beginn (=2) und Ende (=3)
      For i = 0 To 19               ' 20 Maschinen
         zeit = Cells(i + 2, j)
         MinutenArr(i, (Hour(zeit) - 8) * 60 + Minute(zeit)) = j
      Next i
   Next j
   For i = 0 To 19
      For m = 0 To 960
         If MinutenArr(i, m) = 2 Then Worksheets(2).Cells(m + 2, i + 2).Value = "Beginn"
         If MinutenArr(i, m) = 3 Then Worksheets(2).Cells(m + 2, i + 2).Value = "Ende"
      Next m
   Next i
End Sub


viele Grüße. Heide
Anzeige
AW: Zellen ansteuern mit Spalten/Zeilen-Variabeln
22.06.2010 22:36:28
Martin
Ciao Heide,
danke für deinen Vorschlag. Ich kannte die Array-Methode nicht, darum dauerte es eine Weile, bis ich deinen Vorschlag verstand. Es gibt ein Problem. Ich habe in meiner Beschreibung nicht erwähnt, dass die Maschinen zwischen 8:00 und 24:00 nicht nur einmal, sondern mehrere Male arbeiten. Das heisst, jede Maschine hat mehrere Anfangs- und Endzeiten. Wie oft eine Maschine arbeitet, weiss ich zum voraus nicht. In meiner Ausgangsliste sieht das so aus, dass in der Spalte A die Kennziffern der Maschinen nicht einmal, sondern mehrmals auftauchen. In der Ausgangsdatei werde ich übrigens nicht "Beginn" und "Ende" schreiben, sondern die Zellen jeweils einfärben. Ich habe eine Beispielsdatei angehängt, allerdings ist es eine Mac-Excel-Datei (ich hoffe, du kannst die anschauen):
https://www.herber.de/bbs/user/70224.xls
Danke und liebe Grüsse
Martin
Anzeige
AW: Zellen ansteuern mit Spalten/Zeilen-Variabeln
23.06.2010 08:28:23
heide_tr
hallo Martin,
alles Unsinn gestern - manchmal ist es so, dass man sich verrennt. Ein Array ist nicht nötig.
Deine Datei konnte ich nicht öffnen.
Im Code werden die Uhrzeiten gelesen, darüber die Zelladressen des 2. Sheets bestimmt und dann der Bereich grün gefärbt:


Sub Maschinen()
   Worksheets(2).Activate
   For Zeile = 2 To Worksheets(1).Range("A65536").End(xlUp).Row
      Spalte = Worksheets(1).Cells(Zeile, 1) + 1            ' Maschine bestimmen (Spalten beginnen mit B, daher +1)
      Beginn = (Hour(Worksheets(1).Cells(Zeile, 2)) - 8) * 60 + Minute(Worksheets(1).Cells(Zeile, 2)) + 2
      Ende = (Hour(Worksheets(1).Cells(Zeile, 3)) - 8) * 60 + Minute(Worksheets(1).Cells(Zeile, 3)) + 2
      Worksheets(2).Range(Cells(Beginn, Spalte), Cells(Ende, Spalte)).Interior.ColorIndex = 4
   Next Zeile
End Sub


viele Grüße. Heide
Anzeige
AW: Zellen ansteuern mit Spalten/Zeilen-Variabeln
23.06.2010 09:17:16
heide_tr
hallo Martin,
falls Deine Maschinen nicht 1, 2 usw. heißen (wovon auszugehen ist ;-)), kommst Du sinnvoll um ein Array doch nicht herum. Im folgenden Code wird die Spalte des Sheets 2 (sie entspricht der Spalte der Maschine) über das Array MaschArr bestimmt. Es ist wichtig, dass die Reihenfolge der Maschinen exakt der Reihenfolge des Sheets entspricht.


Sub Maschinen()
Dim MaschArr As Variant
   'Das Array MaschArr enthält alle Maschinen in der Reihenfolge, die durch Sheet 2 vorgegeben ist.
   MaschArr = Array("M1", "MX34", "Maschine2", "Maschine3", "Maschine4", "Maschine5", "Maschine6", _
                    "M7", "M8", "M9", "M10", "M11", "M12", "M13", "M14", "M15", "M16", "M17", "M18")
   Worksheets(2).Activate
   With Worksheets(1)
      For Zeile = 2 To .Range("A65536").End(xlUp).Row
         For Spalte = 0 To 19                                     ' Maschine bestimmen
            If .Cells(Zeile, 1) = MaschArr(Spalte) Then Exit For  ' Ausstieg, wenn gefunden
         Next Spalte
         Beginn = (Hour(.Cells(Zeile, 2)) - 8) * 60 + Minute(.Cells(Zeile, 2)) + 2
         Ende = (Hour(.Cells(Zeile, 3)) - 8) * 60 + Minute(.Cells(Zeile, 3)) + 2
         Range(Cells(Beginn, Spalte + 1), Cells(Ende, Spalte + 1)).Interior.ColorIndex = 4  'grün
      Next Zeile
   End With
End Sub


viele Grüße. Heide
Anzeige
AW: Zellen ansteuern mit Spalten/Zeilen-Variabeln
24.06.2010 01:15:00
Martin
Ciao Heide,
danke nochmals für deine zwei Vorschläge. Dadurch habe ich wieder was gelernt. Ich habe mir unterdessen auch eine Lösung gebastelt. Deine ist vermutlich aber eleganter.
Liebe Grüsse
Martin
Sub test()
Dim A As Integer
Dim B As Date
Dim C As Date
Dim G As Long
Dim Z As Integer
Dim d As Integer
Dim e As Integer
Dim f As Integer
Worksheets("Tabelle2").Select
Range("B1").Select
Worksheets("Tabelle1").Select
Range("B2").Select
Selection.Sort Key1:=Range("B2"), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
Range("B2").Select
Do Until ActiveCell.Value = ""
Z = ActiveCell.Value
Worksheets("Tabelle2").Select
ActiveCell.Value = Z
ActiveCell.Offset(0, 1).Select
Worksheets("Tabelle1").Select
ActiveCell.Offset(1, 0).Select
Do Until ActiveCell.Value = ""
If ActiveCell.Value = ActiveCell.Offset(-1, 0).Value Then
ActiveCell.Offset(1, 0).Select
Else
GoTo a1
End If
Loop
a1: Loop
Range("A2").Select
Selection.Sort Key1:=Range("A2"), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
Range("a2").Select
i = 2
Do Until ActiveCell.Value = ""
A = ActiveCell.Offset(0, 1).Value
B = ActiveCell.Offset(0, 2).Value
C = ActiveCell.Offset(0, 3).Value
G = ActiveCell.Value
If ActiveCell.Value = ActiveCell.Offset(-1, 0).Value Then
i = i
Else
i = i + 1
End If
ActiveCell.Offset(1, 0).Select
Worksheets("Tabelle2").Select
Cells.Find(what:=A).Select
d = ActiveCell.Column
Cells.Find(what:=B).Select
e = ActiveCell.Row
Cells.Find(what:=C).Select
f = ActiveCell.Row
Cells(e, d).Value = G
Range(Cells(e, d), Cells(f, d)).Interior.ColorIndex = i
Worksheets("Tabelle1").Select
Loop
End Sub

Anzeige

299 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige