Ich habe diesen Code in einem der Teil meines Skripts zählen die Daten von Spalte A Wenn die Daten doppelte Wert für 3 aufeinander folgende Monate haben wird es Tag als "Ausgewählt "und "aktualisiert"VBA - Ändern Sie die Zielspalte in eine andere Spalte
Ausgang würde so aussehen:
Column A | Column B | Column C | Column D |
243899 | 1/20/2016 | | |
243899 | 2/10/2016 | | |
243899 | 3/15/2016 | Selected | Updated |
Hinweis:
- Spalte B ist, wo der Wert für den Monat
- Spalte C und D ist, wo die Daten-Tag wird als „Ausgewählt“ und „aktualisiert“
- Ich habe 3 Monate Daten
Column A
bisMein Problem ist, dass ich werde alle Spalte das Ziel im Beispiel ändern
Column B
-Column BS
Column C
undD
-Column CH
undCI
Mein Code:
Public Sub Selection()
Dim file2 As Excel.Workbook
Dim Sheet2 As Worksheet, data(), i&
Dim myRangeColor As Variant, myRangeMonthValue
Dim MstrSht As Worksheet
Dim DataArr As Variant
Dim ColorArr As Variant
Dim MonthCol As Collection
Dim CloseToDate As Date
Dim MaxDate As Date
Dim c As Long
Set Sheet2 = Workbooks.Open(TextBox2.Text).Sheets(1)
'Load Data into Array
DataArr = Sheet2.Range("A2:D" & Sheet2.Cells(Rows.Count, 1).End(xlUp).Row)
Find distinct colors
ColorArr = ReturnDistinct(Sheet2.Range("A2:A" & Sheet2.Cells(Rows.Count, 1).End(xlUp).Row))
Remove any values in the arrays third column
For i = LBound(DataArr, 1) To UBound(DataArr, 1)
DataArr(i, 4) = ""
Next i
'Loop Each Color
For c = LBound(ColorArr) To UBound(ColorArr)
Set MonthCol = New Collection
MaxDate = 0
For i = LBound(DataArr, 1) To UBound(DataArr, 1)
If DataArr(i, 1) = ColorArr(c) Then
'Load the colors months into a collection
On Error Resume Next
MonthCol.Add Month(DataArr(i, 2)), CStr(Month(DataArr(i, 2)))
On Error GoTo 0
'Find Max Date
If DataArr(i, 2) Then
MaxDate = Application.WorksheetFunction.Max(MaxDate, DataArr(i, 2))
End If
End If
Next i
'If the color were found in three or more seperate months then the row with date closest to CloseToDate gets flagged
If MonthCol.Count > 2 Then
For i = LBound(DataArr, 1) To UBound(DataArr, 1)
If DataArr(i, 1) = ColorArr(c) And DataArr(i, 2) = MaxDate Then
DataArr(i, 3) = "Selected"
DataArr(i, 4) = "Updated"
End If
Next i
End If
Next c
'Print results to sheet
Sheet2.Range("A2:D" & Sheet2.Cells(Rows.Count, 1).End(xlUp).Row) = DataArr
End Sub
Function ReturnDistinct(InpRng As Range) As Variant
Dim Cell As Range
Dim i As Integer
Dim DistCol As New Collection
Dim DistArr()
'Add all values to collection
For Each Cell In InpRng
On Error Resume Next
DistCol.Add Cell.Value, CStr(Cell.Value)
On Error GoTo 0
Next Cell
'Write collection to array
ReDim DistArr(1 To DistCol.Count)
For i = 1 To DistCol.Count Step 1
DistArr(i) = DistCol.Item(i)
Next i
ReturnDistinct = DistArr
End Function
ich hier meinen Code wurde so im nicht wirklich vertraut .. zu diesem Code ist es möglich, die Spalte in meinem Skript zu ändern? Ich habe viel Versuch und Irrtum auf diesem einen gemacht, ich kann nicht scheinen, es herauszufinden. Jede Hilfe, Tipps oder Anregungen würde ich gerne zu schätzen wissen!
Der Code, den Sie mit nutzt die Tatsache ausgehend werden die Ergebnisse in Spalten geschrieben werden, die benachbart zueinander sind - die Linie 'DataArr = Sheet2.Range („A2: D“& Sheet2.Cells (Rows.Count, 1) .End (xlUp) .Row) 'muss geändert werden, um Daten aus den neuen Spalten in das Array zu laden, möglicherweise mit einem Loop. Die Zeile 'Sheet2.Range (" A2: D "& Sheet2.Cells (Rows.Count, 1) .End (xlUp) .Row) = DataArr' muss geändert werden, um die Daten aus dem Array in Ihre neuen Spalten zu schreiben vielleicht wieder mit einem Loop. – OldUgly
@OldUgly danke, ich habe versucht, diese Zeile viele Male zu ändern, es funktioniert nicht, ist es wirklich möglich, diese Spalten zu ändern? es fühlt sich an wie in der Standardeinstellung ist – 7A65726F