Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

VBA Excel 2003 - Leerzellen spaltenweise auswerten ?
#1
hallo an alle,

ich habe hier eine Aufgabe bei der ich nicht weiterkomme.
Bin noch zu unerfahren mit Excel. Ich nutze Excel 2003.

Ist keine leichte Aufgabe - könnte mir bitte jemand da eine Lösung
anbieten/helfen.

Mache mir schon tagelang darüber Gedanken :22:

Würde mich echt sehr sehr freuen

Angelina


Angehängte Dateien
.xls   Leerzellen.xls (Größe: 29 KB / Downloads: 10)
Antworten Top
#2
Hallo,

das geht entweder mit VBA, dürfte das Einfachste sein, oder einer Formel mit mehreren Hilfsspalten, ist machbar, oder eine Formel ohne Hilfsspalten, damit wirst Du wohl kaum zu Rande kommen.
Gruß

Edgar

Meine Antworten sind freiwillig und ohne Gewähr!
Über Rückmeldungen würde ich mich freuen.
Antworten Top
#3
Hallo,

teste mal:

Code:
Sub mach()
   Dim bovar As Boolean
   Dim i As Long, j As Long, k As Long, n As Long
   Dim lngZ As Long, lngZS As Long
   Dim rngZ As Range
   Range("DA1").CurrentRegion.ClearContents
   lngZ = Cells(Rows.Count, 1).End(xlUp).Row
   Application.ScreenUpdating = False
   For i = 1 To 7 'lngZ
      Cells(i, 105).Value = Cells(i, 1).Value
      For j = 63 To 98
         If Cells(i, j) <> "" Then
            lngZS = Cells(Rows.Count, j).End(xlUp).Row
            Do Until Cells(i + k + 1, j) <> ""
               k = k + 1
               If k > lngZS Then
                  bovar = True
                  Exit Do
               End If
            Loop
            If bovar Then
               bovar = False
            Else
               Cells(i, 106 + n) = k
            End If
            k = 0
            n = n + 1
         End If
      Next j
      n = 0
   Next i
   Application.ScreenUpdating = True
End Sub

Da mir nicht bekannt ist, was passieren soll, wenn keine Zahlen mehr folgen, bleiben für diese Fälle die Zellen leer. Man könnte da aber auch 0 reinschreiben.
Gruß Atilla
[-] Folgende(r) 1 Nutzer sagt Danke an atilla für diesen Beitrag:
  • Angelina
Antworten Top
#4
(26.01.2015, 23:15)atilla schrieb: Hallo,

teste mal:
.
.
.

Da mir nicht bekannt ist, was passieren soll, wenn keine Zahlen mehr folgen, bleiben für diese Fälle die Zellen leer. Man könnte da aber auch 0 reinschreiben.


hallo atilla,

du bist ein Engel - ein Schatz - ich küsse dich HeartHeartHeart

So ist es zu 99% perfekt.

1. Wenn keine Zahl mehr folgt - bleibt die Zelle leer (hast du ja bereits so gemacht)

2. Es werden zur Zeit nur die ersten 7 Zeilen abgearbeitet
Ist es machbar wie folgt?
Ist in der Spalte A kein Eintrag mehr vorhanden
dann ist dies die letzte Zeile die ausgewertet werden soll.

3. Ist doch übersichtlicher, wenn die Ausgabe-Daten ab dem Bereich
DB in der Spalte eingetragen würden, in der sie im Bereich BK:CT vorgekommen sind.
Matrix zum prüfen ist = BK:CT (36 Zellen)
Matrix Ausgabe = DB:EK (36 Zellen)
DA bleibt

Nochmals vielen dank das du dir - für mich - die Arbeit gemacht hast.
Du bist einfach - toll !

Kuss
Angelina
Antworten Top
#5
Hallo Angelina,

dann sparen wir etwas Code, teste mal:

Code:
Sub mach()
   Dim bovar As Boolean
   Dim i As Long, j As Long, k As Long
   Dim lngZ As Long, lngZS As Long
  
   Range("DA1:EK36").ClearContents
   lngZ = Cells(Rows.Count, 1).End(xlUp).Row
   Application.ScreenUpdating = False
   For i = 1 To lngZ
      Cells(i, 105).Value = Cells(i, 1).Value
      For j = 63 To 98
         If Cells(i, j) <> "" Then
            lngZS = Cells(Rows.Count, j).End(xlUp).Row
            Do Until Cells(i + k + 1, j) <> ""
               k = k + 1
               If k > lngZS Then
                  bovar = True
                  Exit Do
               End If
            Loop
            If bovar Then
               bovar = False
            Else
               Cells(i, j + 43) = k
            End If
            k = 0
         End If
      Next j
   Next i
   Application.ScreenUpdating = True
End Sub

Bitte diesmal nur dezent Danke sagen. Meine Frau sitzt mir hier nämlich im Nacken. :51: :69:, außerdem werde ich schnell rot. Wubsmiley
Gruß Atilla
[-] Folgende(r) 1 Nutzer sagt Danke an atilla für diesen Beitrag:
  • Angelina
Antworten Top
#6
Hallo Angelina,

da Du die Tabelle jetzt versetzt darstellst, geht es mit Formeln auch relativ einfach zu lösen:

Arbeitsblatt mit dem Namen 'Tabelle1'
 DADB
120001

ZelleFormel
DA1=WENN(A1="";"";A1)
DB1{=WENN(BK1="";"";WENN(ISTFEHLER(VERGLEICH(WAHR;ISTZAHL(BK2:BK$36);0));"";VERGLEICH(WAHR;ISTZAHL(BK2:BK$36);0)-1))}
Achtung, Matrixformel enthalten!
Die geschweiften Klammern{} werden nicht eingegeben.
Verlassen Sie den Zelleneditor mit Strg+Shift + Enter, statt Enter alleine.
Diese Tabelle wurde mit Tab2Html (v2.4.1) erstellt. ©Gerd alias Bamberg

Die Formel in DB1 kann nach rechts und nach unten gezogen (kopiert) werden.
Gruß Atilla
Antworten Top
#7
(27.01.2015, 12:28)atilla schrieb: Hallo Angelina,

da Du die Tabelle jetzt versetzt darstellst, geht es mit Formeln auch relativ einfach zu lösen:


hallo lieber atilla,

hm... Schade hätte es lieber über VBA gemacht. Ist das zu aufwendig?

Kuss
Angelina
Antworten Top
#8
Hallo Angelina,

die Lösung mit VBA habe ich doch im Beitrag:

Heute, 11:51
Beitrag #5


Mit den Formeln war nur eine zusätzlicher Lösungsvorschlag.
Gruß Atilla
Antworten Top
#9
hallo atilla,

entschuldige Bitte - Beitrag habe ich vor lauter Freude übersehen.

:18:

:23:

:2828:28:

Unglaubich von dir - tolle Leistung - Danke danke danke danke ..........

Darf ich die Tage dich noch um eine ganz kleine Aufgabe bitten?
Ist nicht so aufwendig - wirklich ... klein ....
:23:


Danke nochmals
Angelina
Antworten Top
#10
Hallo Angelina,

das ist hier ein öffentliches Forum. Du kannst jederzeit Deine Fragen stellen.
Besser ist es aber, wenn Du die Allgemeinheit ansprichst. Es gibt viele andere Helfer hier,
die dir genauso gut oder besser helfen können.
Gruß Atilla
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste