ID tematu: 74037
 |
Konwertowanie danych na datę |
Autor |
Wiadomość |
SZWAJCAR007
Fan Excela

Posty: 66
|
Wysłany: 24-01-2023, 20:07 Konwertowanie danych na datę
|
|
|
Witam,
jak prawidłowo powinno wyglądać makro kopjujące dane z arkusza "DATA" do arkusza "Do importu" jednocześnie konwertując kolumny zawierające datę na format daty.
Arkusz "Data" jest plikiem eksportowanym innego systemu wraz z takim formatowaniem kolumn.
Ilość wierszy w arkuszu "Data" będzie zmienna tzn. raz będzie np.500 wierszy, a w kolejnym np. 150 wierszy.
Plik w załączeniu
Import-test.xlsm
|
Pobierz Plik ściągnięto 13 raz(y) 26.32 KB |
|
|
 | ID posta:
424575
|
|
|
 |
|
|
|
Maciej Gonet
Excel Expert

Wersja: Win Office 365
Pomógł: 3049 razy Posty: 9086
|
Wysłany: 24-01-2023, 20:37
|
|
|
Ale gdzie masz to makro kopiujące?
Chodzi tylko o zmianę formatu dat, czy o coś jeszcze?
Jeśli chodzi o daty, to jeśli w systemie docelowym masz format dd.mm.rrrr z kropkami, a w źródle rrrr-mm-dd z kreseczkami, to to jest format rozpoznawany przez VBA jako data, więc wystarczy zwykłe przypisanie, np.
Kod: | Columns("F").Value = Columns("F").Value |
|
|
 | ID posta:
424576
|
|
|
 |
|
|
nunus67
ExcelSpec

Wersja: Win Office 2019
Pomógł: 183 razy Posty: 527
|
Wysłany: 25-01-2023, 11:48
|
|
|
Cytat: | jak prawidłowo powinno wyglądać... |
może tak:
Kod: | Function LastUsedRow(ws As Worksheet, column As String) As Long
LastUsedRow = ws.Cells(ws.Rows.Count, column).End(xlUp).Row
End Function
Sub CopyData()
Dim shDATA As Worksheet, shImport As Worksheet
Dim lastR As Long, r As Long, c As Long
Dim aD As Variant 'array DATA
Dim aR As Variant 'array RESULT
Const Col_1 As Long = 6 'nr columny z datą
Const Col_2 As Long = 7 'nr columny z datą
Set shDATA = ThisWorkbook.Sheets("Data")
Set shImport = ThisWorkbook.Sheets("do importu")
lastR = LastUsedRow(shDATA, "A")
aD = shDATA.Range("A7:DD" & lastR)
ReDim aR(1 To UBound(aD, 1), 1 To UBound(aD, 2))
For r = LBound(aD, 1) To UBound(aD, 1)
For c = LBound(aD, 2) To UBound(aD, 2)
If c = Col_1 Or c = Col_2 Then
'najpierw konwertujemy wartosc na date a potem ustawiamy jej format
'aR(r, c) = Format(CDate(aD(r, c)), "dd mmmm yy")
aR(r, c) = Format(CDate(aD(r, c)), "dd.mm.yyyy")
Else
aR(r, c) = aD(r, c)
End If
Next c
Next r
lastR = LastUsedRow(shImport, "A")
With shImport
.Range("A7:DD" & lastR).Clear
.Range("A7").Resize(UBound(aR, 1), UBound(aR, 2)) = aR
End With
End Sub |
Import-test.xlsm
|
Pobierz Plik ściągnięto 19 raz(y) 36.21 KB |
|
_________________ Nunus67 |
|
 | ID posta:
424600
|
|
|
 |
|
|
SZWAJCAR007
Fan Excela

Posty: 66
|
Wysłany: 25-01-2023, 12:03
|
|
|
Dzięki za pomoc |
|
 | ID posta:
424601
|
|
|
 |
|
|
SZWAJCAR007
Fan Excela

Posty: 66
|
Wysłany: 25-01-2023, 12:57
|
|
|
Jednak nie do końca jest ok.
Kolumny z datami po konwertowaniu maja format ogólny a nie format daty.
Komórka sformatowana jako data powinna mieć wartość przypisaną do prawej krawędzi komórki, a nie do lewej. Czy można zmodyfikować kod tak aby kolumny z datami po konwertowaniu miały format data? |
|
 | ID posta:
424603
|
|
|
 |
|
|
J_B
Excel Expert

Wersja: Win Office 2016
Pomógł: 638 razy Posty: 1529
|
Wysłany: 25-01-2023, 14:56
|
|
|
SZWAJCAR007 napisał/a: | Czy można.... aby kolumny z datami po konwertowaniu miały format data? |
Zaznacz interesujące cię komórki i uruchom to makro Kod: | Sub FormatDaty()
Dim Kom As Range
Application.ScreenUpdating = False
For Each Kom In Selection
Kom.NumberFormat = "m/d/yyyy"
Kom.Value = format(CDate(Kom.Value), "dd.mm.yyyy")
Application.SendKeys (Kom.Value & "{Enter}")
Next
End Sub
|
Makro musisz uruchamiać z wstążki Deweloper / Makra
nie z okna edytora vba
Może to ci pomoże |
|
 | ID posta:
424608
|
|
|
 |
|
|
SZWAJCAR007
Fan Excela

Posty: 66
|
Wysłany: 25-01-2023, 18:38
|
|
|
Dzięki |
|
 | ID posta:
424615
|
|
|
 |
|
|
|
Nie możesz pisać nowych tematów Nie możesz odpowiadać w tematach Nie możesz zmieniać swoich postów Nie możesz usuwać swoich postów Nie możesz głosować w ankietach Nie możesz załączać plików na tym forum Możesz ściągać załączniki na tym forum
|
Dodaj temat do Ulubionych Wersja do druku
|
|
Strona używa plików cookies.
Kliknij tutaj, żeby dowiedzieć się jaki jest cel używania cookies oraz jak zmienić ustawienia cookie w przeglądarce.
Korzystając ze strony użytkownik wyraża zgodę na używanie plików cookies, zgodnie z bieżącymi ustawieniami przeglądarki.
Sprawdź, w jaki sposób przetwarzamy dane osobowe
|