Jump to content
Forumu Destekleyenlere Katılın ×
Paticik Forumları
2000 lerden beri faal olan, çok şukela bir paylaşım platformuyuz. Hoşgeldiniz.

Excel Makro/VBA - Tarih ve Nokta


cacodemon

Öne çıkan mesajlar

Excel'de yaşadığım ilginç bir sorun var. Tarihlerde (01.01.2015 gibi) ilgili hücreler tarih formatında olsa bile bazı raporlar noktayı nokta ile değiştirmeden tarih formatını algılamıyor. Dolayısı ile filtreleme vb sıkıntılar ortaya çıkıyor.

Bu sorun cepte kalsın, şimdi gelelim işlemlere.

Bizim raporlarda tarihler 20150101 formatında. Ben tek bir makro ile bunu 01.01.2015 şekline sokuyorum (önce textocolumns, sonra concetanate). Fakat vba ile noktayı nokta ile değiştirmek yukardaki sorunumu çözmüyor. İllaki vba'dan çıkıp manuel find and replace yapmam gerekiyor.

Kodlarda noktayı "/" ile değiştireyim dedim, bu sefer bazı satırlar 01/01/2015 şeklinde text, bazıları ise 01.01.2015 şeklinde date oluyor.

Meraklısına makro aşağıda. Kaydettiğim gibi duruyor, temizlik yapmadım. Bir kolonu 20150101'den 20150131'e kadar doldurup deneyebilirsiniz.


Sub tarihDuzeltme()


Application.DisplayAlerts = False
lr = Range("A65000").End(xlUp).Row

ActiveCell.Offset(0, 0).Columns("A:A").EntireColumn.Select
Selection.NumberFormat = "General"
ActiveCell.Offset(0, 1).Columns("A:A").EntireColumn.Select
Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
ActiveCell.Offset(0, -1).Columns("A:A").EntireColumn.Select
Selection.TextToColumns Destination:=ActiveCell, DataType:=xlFixedWidth, _
FieldInfo:=Array(Array(0, 2), Array(4, 2), Array(6, 2)), TrailingMinusNumbers:= _
True
ActiveCell.Offset(0, 3).Range("A1").Select
ActiveCell.FormulaR1C1 = "Tarih"
ActiveCell.Offset(1, 0).Range("A1").Select
ActiveCell.FormulaR1C1 = "=CONCATENATE(RC[-1],""."",RC[-2],""."",RC[-3])"
ActiveCell.Select
Selection.AutoFill Destination:=ActiveCell.Range("A1:A" & lr)
ActiveCell.Range("A1:A" & lr).Select
ActiveCell.Columns("A:A").EntireColumn.Select
ActiveCell.Activate
Selection.Copy
ActiveSheet.Paste
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Selection.Replace What:=".", Replacement:=".", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
Application.CutCopyMode = False
Selection.NumberFormat = "m/d/yyyy"

ActiveCell.Offset(0, -1).Range("A1").Select
ActiveCell.Offset(0, -2).Columns("A:C").EntireColumn.Select
ActiveCell.Activate
Selection.Delete Shift:=xlToLeft
ActiveCell.Offset(0, 0).Columns("A:A").EntireColumn.Select

End Sub



selection dolu biliyorum, vba işine yeni başladım o yüzden fazla vurmayın.
Link to comment
Sosyal ağlarda paylaş

concatanate'i boşver,

A column'da data olsun, destination da yine A olsun:


Columns("A:A").Select
Selection.TextToColumns Destination:=Range("A:A"), DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, _
Semicolon:=False, Comma:=False, Space:=False, Other:=False, FieldInfo _
:=Array(1, 5), TrailingMinusNumbers:=True
Link to comment
Sosyal ağlarda paylaş

×
×
  • Yeni Oluştur...