Microsoft Excel

Herbers Excel/VBA-Archiv

Zelleninhalte

Betrifft: Zelleninhalte von: Frank
Geschrieben am: 07.11.2012 16:49:20

Hallo Zusammen,

ich habe eine Tabelle mit über 30000 Zeilen und 18 Spalten.

in den Verschieden Zellen stehen zum Teil Zahlen.
Wenn eine Zelle einen Wert enthält soll der Zellwert 1 sein.
Dies habe ich mit folgendem Code gelöst

Dim CellCount, ColumnCount, X, Y As Integer
CellCount = Cells(Rows.Count, 9).End(xlUp).Row
ColumnCount = Cells(64, Columns.Count).End(xlToLeft).Column
For X = 10 To ColumnCount
For Y = 64 To CellCount
    If Cells(Y, X).Value <> "" Then
       Cells(Y, X).Value = 1
    End If
Next Y
Next X

Nun soll aber wenn z.B. in einer Zelle in Spalte 10 schon einen 1 steht, in keiner weiteren Zelle in der Zeile der Spalten 11 bis 18 mehr ein Wert stehen.
Sprich es soll immer in nur in der kleinsten Spalte in einer Zeile eine 1 stehen.
ich hoffe ich habe mich einigermaßen verständlich ausgedrückt.
Kann mir jemand einen Lösungsansatz liefern?

Vielen Dank schon mal
Frank

  

Betrifft: AW: Zelleninhalte von: Hajo_Zi
Geschrieben am: 07.11.2012 19:55:10

Hallo Frank,

Ich baue keine Datei nach, die Zeit hat schon jemand investiert.
Dim CellCount, ColumnCount, X, Y As Integer
CellCount = Cells(Rows.Count, 9).End(xlUp).Row
ColumnCount = Cells(64, Columns.Count).End(xlToLeft).Column
For X = 10 To ColumnCount
For Y = 64 To CellCount
If Cells(Y, X).Value <> "" Then
Cells(Y, X).Value = 1
Range(Cells(Y, X).Cells(Y, ColumnCount)).ClearContents
End If
Next Y
Next X


GrußformelHomepage


  

Betrifft: AW: Zelleninhalte von: Gerd L
Geschrieben am: 08.11.2012 00:06:23

Hallo Frank!

Sub test()

Dim Bereich As Range, vntIn As Variant, vntOut As Variant, i As Long, j As Long


Set Bereich = Range(Cells(64, 10), _
Cells(Cells(Rows.Count, 9).End(xlUp).Row, _
Cells(64, Columns.Count).End(xlToLeft).Column))

Bereich.Replace "*", 1, xlWhole

vntIn = Bereich.Value2

ReDim vntOut(1 To UBound(vntIn, 1), 1 To UBound(vntIn, 2))

For i = 1 To UBound(vntIn, 1)
For j = 1 To UBound(vntIn, 2)
    If vntIn(i, j) = 1 Then vntOut(i, j) = 1: Exit For
Next
Next

Bereich.Value = vntOut


End Sub
Gruß Gerd


  

Betrifft: AW: Zelleninhalte von: Frank
Geschrieben am: 12.11.2012 08:35:23

Hallo Gerd,

auch Dir vielen dank für die Antwort.
Ich werde es mal versuchen nachzuvollziehen

Gruß

Frank


  

Betrifft: AW: Zelleninhalte von: Frank
Geschrieben am: 12.11.2012 08:33:50

Hallo Hajo,

du hast natürlich recht. Mit Datei wäre es einfacher.
Aber die Datei ist schon ziemlich groß.

Dennnoch vielen Dank für deine Antwort

Gruß
Frank