2016-03-28 14 views
0

Yani şu biçimde tarihi almak: 201603otomatik

ve 03/2016 içine yeniden düzenlenmesi gerekmektedir.

bu hücre A1 ise: 201603

ve bu hücre B1 içinde: bir formül olarak kullanıldığında =RIGHT(A1,2) & "/" & LEFT(A1,4)

yeniden düzenleme sadece iyi ortaya çıkacaktır. Sorun şu ki, bu VBA içine koymak böylece yanlış biçimlendirilmiş veri dökümü için otomatik olarak çalışacaktır.

Kodum yanlış eşleşme hatası veriyor gibi görünüyor ve gerçekten sorunu görmüyorum.

Tüm görüşleriniz için teşekkür ederiz.

Sub format() 
    initial_date = Range ("A1").Value 
    Dim Publish_date As Date 
    publish_date = DateValue(Mid(initial_date,1,4) & "/" & Mid(initial_date,5,2)) 
    Range("A1").Value = publish_date 
End Sub 

Screenshot of what i am working with

+0

kod benim için çalışıyor. Yapmak istediğin şeyi yapmıyor, ama hiçbir hata vermiyor. – MikeC

+1

Bu hatayı almanın birtakım nedenleri var ama evime bahse girerim çünkü 'initial_date' boş '... ve köpeğime bahse girerim, çünkü aktif sayfanıza ait değil Verileriniz açık olan (http://stackoverflow.com/questions/33321586/why-am-i-not-able-to-change-worksheet-reference/33324815#33324815). – Ambie

cevap

1

Sen vba DateSerial() kullanın ve sonra hücreye bir sayı biçimi uygulamak istiyorum:

Sub format() 
Dim initial_date As String 
Dim Publish_date As Date 

initial_date = Range("A1").value 
Publish_date = DateSerial(Mid(initial_date, 1, 4), Mid(initial_date, 5, 2), 1) 

Range("A1").value = Publish_date 
Range("A1").NumberFormat = "mm/yyyy" 

End Sub 

Ve tüm sütuna arasında yineleme:

Sub format() 
Dim initial_date As String 
Dim Publish_date As Date 
Dim lastrow As Long 

With ActiveSheet 
    lastrow = .Range("A" & .Rows.count).End(xlUp).Row 
    For i = 1 To lastrow 
     If IsDate(.Cells(i, 1)) Then 
      .Cells(i, 1).NumberFormat = "mm/yyyy" 
     Else 
      initial_date = .Cells(i, 1).value 
      Publish_date = DateSerial(Mid(initial_date, 1, 4), Mid(initial_date, 5, 2), 1) 

      .Cells(i, 1).value = Publish_date 
      .Cells(i, 1).NumberFormat = "mm/yyyy" 
     End If 
    Next i 
End With 

End Sub 

Eğer bütün sütununda aynı formatta yyyymm olduğunu eminiz, o zaman bir kerede bütün yapabilirsiniz:

Sub format() 
Dim lastrow As Long 

With ActiveSheet 
    lastrow = .Range("A" & .Rows.count).End(xlUp).Row 
    .Range("A1:A" & lastrow) = .Evaluate("Index(DATE(Mid(A1:A" & lastrow & ",1,4),Mid(A1:A" & lastrow & ",5,2),1),)") 
    .Range("A1:A" & lastrow).NumberFormat = "mm/yyyy" 
End With 

End Sub