Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1484to1488
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

DIV/X! durch Array in anderes Format bringen

DIV/X! durch Array in anderes Format bringen
01.04.2016 14:43:57
Sav
Hallo Community,
kann mir bitte jemand sagen wieso Spalten in der "Ausgangstabelle" mit dem Wert "DIV/X!" ignoriert werden durch das Array? Ich würde diese Werte auch gerne in das andere Datenformat überführen.
Der Code stammt von "Tino". Leider kann ich in meinen alten Beitrag kein Kommentar mehr beifügen.
Grundsätzlich bringt das Makro Daten in der Form
A1 B C
A2 B C
A3 B C
In die Form
A1 B
A2 B
A3 B
A1 C
A2 C
A3 C
Problem:
A1 DIV/X C
A2 B C
A3 DIV/X C
wird zu
A2 B
A1 C
A2 C
A3 C
Ergebnis soll aber
A1 DIV/X
A2 B
A3 DIV/X
A1 C
A2 C
A3 C
sein.
Option Explicit

Sub Beispiel()
Dim ArData, ArNew()
Dim n&, nn&, nnn&
On Error GoTo ErrorHandler:
With Sheets(Sheets("Auswertungstabelle").Range("B2").Value) 'Ausgangstabelle evtl. anpassen
'Datenbereich evtl. anpassen
'Datenbereich hier ab A2
'bis zur letzten Zelle in Spalte A
'bis zu letzten Zelle in Zeile 1
With .Range("A2", .Cells(.Rows.Count, 1).End(xlUp)).EntireRow
If .Rows(.Rows.Count).Row 
Sub 'keine Daten
With .Columns(1).Resize(, .Cells(2, .Columns.Count).End(xlToLeft).Column)
If .Columns(.Columns.Count).Column = 1 Then Exit 

Sub 'keine Daten
ArData = .Value
End With
End With
End With
ReDim ArNew(1 To UBound(ArData) * UBound(ArData, 2), 1 To 6)
nnn = 1
ArNew(nnn, 1) = "Kriterium"
ArNew(nnn, 2) = "Wert"
ArNew(nnn, 3) = "Datum"
ArNew(nnn, 4) = "Woche"
ArNew(nnn, 5) = "Monat"
ArNew(nnn, 6) = "Wochentag"
For nn = 2 To UBound(ArData, 2)
If ArData(1, nn)  "" Then
For n = 2 To UBound(ArData)
'If Not IsError(ArData(n, nn)) Then
If ArData(n, nn)  "" Then
nnn = nnn + 1
ArNew(nnn, 1) = ArData(n, 1)
ArNew(nnn, 2) = ArData(n, nn)
ArNew(nnn, 3) = ArData(1, nn)
ArNew(nnn, 4) = "=WEEKNUM(RC[-1])" 'KW
ArNew(nnn, 5) = "=MONTH(RC[-2])" 'Monat
ArNew(nnn, 6) = "=WEEKDAY(RC[-3])" 'Tag
End If
'End If
Next n
' End If
Next nn
'Ausgabe in neue Tabelle
With ThisWorkbook
With .Sheets("Auswertungstabelle")
.Range("A25", .Cells(.Rows.Count, 6)).Clear
With .Cells(26, 1).Resize(UBound(ArNew), UBound(ArNew, 2))
.Columns(3).NumberFormat = "dd.mm.yyyy"
.Rows(1).Font.Bold = True
.Rows(1).HorizontalAlignment = xlCenter
.FormulaR1C1 = ArNew
.EntireColumn.AutoFit 'Spaltenbreite anpassen
End With
End With
End With
ErrorHandler:
If Err.Number  0 Then
MsgBox Err.Description, vbCritical + vbMsgBoxSetForeground + vbMsgBoxHelpButton, _
"Error: " & Err.Number, Err.HelpFile, Err.HelpContext
End If
End Sub

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: DIV/X! durch Array in anderes Format bringen
01.04.2016 15:32:57
Michael

Hallo Sav,
der Code stimmt mit der Fragestellung nicht recht überein.
Am besten lädst Du eine Beispieldatei hoch.
Schöne Grüße,
Michael

AW: DIV/X! durch Array in anderes Format bringen
01.04.2016 15:54:46
Sav
Hallo Michael!
Ich habe das Problem in der beigefügten Datei nachgestellt. Das Makro in dieser funktioniert auch. am 11.11 in Tabelle1 habe DIV/X Werte eingefügt die vom Makro nicht übernommen werden.
Über einen Tipp wie die DIVX Werte in das Tabellenblatt "Auswertungstabelle" übernommen werden können wäre ich Dankbar!
https://www.herber.de/bbs/user/104714.xlsm

Anzeige
AW: DIV/X! durch Array in anderes Format bringen
01.04.2016 17:03:21
Michael
Hi Sav,
die Crux liegt darin, daß Du nnn nur dann hochzählst, wenn die Werte gewisse Kriterien erfüllen. Deshalb bleiben die Zeilen leer.
Deshalb habe ich zwei der Befehle mal umpositioniert:
For nn = 2 To UBound(ArData, 2)
If ArData(1, nn)  "" Then
For n = 2 To UBound(ArData)
nnn = nnn + 1
ArNew(nnn, 1) = ArData(n, 1)
If Not IsError(ArData(n, nn)) Then
If ArData(n, nn)  "" Then
'                    nnn = nnn + 1
'                    ArNew(nnn, 1) = ArData(n, 1)
ArNew(nnn, 2) = ArData(n, nn)
ArNew(nnn, 3) = ArData(1, nn)
ArNew(nnn, 4) = "=WEEKNUM(RC[-1])" 'KW
ArNew(nnn, 5) = "=MONTH(RC[-2])" 'Monat
ArNew(nnn, 6) = "=WEEKDAY(RC[-3])" 'Tag
End If
End If
Next n
End If
Next nn
Die Frage ist, was mit den weiteren Werten bzw. Formeln passieren soll: evtl. kannst Du die IFs mit else-Zweigen versehen.
Damit man besser nachvollziehen kann, was im Array überhaupt passiert, habe ich es direkt vor der eigentlichen Schleife mit "x"en gefüllt (zwischen redim und nnn=1).
So siehst Du in der Ausgabe schön, wo Werte geschrieben wurden (oder eben grad nicht), und auch, daß das Array-redim nicht stimmt.
Probier's erst mal mit der vorhandenen Variante aus, da siehste unten viele, viele "x"e...
Also, hier nochmal das komplette Ding (frißt weniger Speicher als das File):
Option Explicit
Sub Beispiel()
Dim ArData, ArNew()
Dim n&, nn&, nnn&
On Error GoTo ErrorHandler:
With Sheets(Sheets("Auswertungstabelle").Range("B2").Value) 'Ausgangstabelle evtl. anpassen
'Datenbereich evtl. anpassen
'Datenbereich hier ab A2
'bis zur letzten Zelle in Spalte A
'bis zu letzten Zelle in Zeile 1
With .Range("A2", .Cells(.Rows.Count, 1).End(xlUp)).EntireRow
If .Rows(.Rows.Count).Row  "" Then
For n = 2 To UBound(ArData)
nnn = nnn + 1
ArNew(nnn, 1) = ArData(n, 1)
If Not IsError(ArData(n, nn)) Then
If ArData(n, nn)  "" Then
'                    nnn = nnn + 1
'                    ArNew(nnn, 1) = ArData(n, 1)
ArNew(nnn, 2) = ArData(n, nn)
ArNew(nnn, 3) = ArData(1, nn)
ArNew(nnn, 4) = "=WEEKNUM(RC[-1])" 'KW
ArNew(nnn, 5) = "=MONTH(RC[-2])" 'Monat
ArNew(nnn, 6) = "=WEEKDAY(RC[-3])" 'Tag
End If
End If
Next n
End If
Next nn
Stop
'Ausgabe in neue Tabelle
With ThisWorkbook
With .Sheets("Auswertungstabelle")
.Range("A25", .Cells(.Rows.Count, 6)).Clear
With .Cells(26, 1).Resize(UBound(ArNew), UBound(ArNew, 2))
.Columns(3).NumberFormat = "dd.mm.yyyy"
.Rows(1).Font.Bold = True
.Rows(1).HorizontalAlignment = xlCenter
.FormulaR1C1 = ArNew
.EntireColumn.AutoFit 'Spaltenbreite anpassen
End With
End With
End With
ErrorHandler:
If Err.Number  0 Then
MsgBox Err.Description, vbCritical + vbMsgBoxSetForeground + vbMsgBoxHelpButton, _
"Error: " & Err.Number, Err.HelpFile, Err.HelpContext
End If
End Sub
Schöne Grüße,
Michael

Anzeige
AW: DIV/X! durch Array in anderes Format bringen
06.04.2016 11:42:05
Sav
Hallo Michael,
vielen Dank, hat funktioniert!=)

ok, super, das freut mich,
06.04.2016 16:57:47
Michael
Sav,
und vielen Dank für die Rückmeldung.
Schöne Grüße zurück,
Michael

300 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige