Tarih biçimlerini dönüştürmek için Excel formülü


1

Varsayalım ki, metin değerleri şu şekilde belirtilen hücrelere sahip:

02/23/15 to 03/01/15

Bunu excel işlevlerini aşağıdaki gibi bir şeye dönüştürmek için kullanabilir miyim?

23-Feb-15 to 1-Mar-15

Şimdiye kadar formüle baktım DATEVALUEancak bu, sorunumu çözme gibi gözükmüyor.

Sanırım aradığım şey: bir dize için bir tarih formatı ("dd / mm / yy" deyin) ("02/16/15" deyin) nasıl belirlerim ve başka bir formatta bir tarih dizesine dönüştürürüm ( "dd-mmm-yy" deyin)

Yanıtlar:


2

Yerel ayarlarınız ne olursa olsun, örneğinize uygun bir formül:

=TEXT(DATE(MID(A1,7,2),LEFT(A1,2),MID(A1,4,2)),"dd-mmm-yy") & " to " & TEXT(DATE(RIGHT(A1,2),MID(A1,13,2),MID(A1,16,2)),"dd-mmm-yy")

Tarihler mm / gg / yy biçiminde olduğu sürece ve tarihin başında ve sonunda tarihler arasında ne olursa olsun işe yarayanlar:

=TEXT(DATE(MID(A1,7,2),LEFT(A1,2),MID(A1,4,2)),"dd-mmm-yy") & MID(A1,9,LEN(A1)-16) & TEXT(DATE(RIGHT(A1,2),MID(A1,LEN(A1)-7,2),MID(A1,LEN(A1)-4,2)),"dd-mmm-yy")

Durumunuza bağlı olarak, bu diğer seçenek yardımcı olabilir veya olmayabilir. Sistem için varsayılan tarih biçimini değiştirebilirsiniz. Bu, Excel'in tarih işlevlerini etkiler, böylece tarihlerin bu biçimde olmasını beklerler. Bir kez yaptıktan sonra, DATEVALUEsadece iyi işlevini kullanabilirsiniz . Bu tek seferlik bir işlemse, formatı değiştirmenizi, formülleri çalıştırmanızı ve geri değiştirmenizi öneririm. Aksi takdirde, bir formül yaklaşımı ile giderdim. Sistem ayarlarını nasıl değiştireceğinize dair tüm bilgileri buradan alabilirsiniz . (Bunları kopyalayıp yapıştırmadım, çünkü uzun .)


Sadece formülü kendim yarattım. İlk gönderdiğinizle aynı. Cevabı kabul ediyorum.
Ayusman

0

Bunu deneyebilirsiniz (İngiltere tarih biçimini kullanıyorum)

=CONCATENATE(TEXT(LEFT(A1,8), "dd-mmm-yy")," to ",TEXT(RIGHT(A1,8), "dd-mmm-yy"))

görüntü tanımını buraya girin

Gördüğünüz gibi tarih biçimlerinin sabit bir uzunluk olmasını bekliyor (mm / gg / yy veya / gg / mm / yy gibi 8 karakter).


Yukarıdakiler çalışmadığından, geçerli değeri ColA'da okuyacak ve yeni değeri ColB'ye yapıştıracak VBa'yı deneyebilirsiniz

Option Explicit
Sub YikesThereBePirates()

Dim row As Integer
row = 1

Do While Range("A" & row).Value <> ""

    Dim splitty() As String
    splitty = Split(Range("A" & row).Value, " to ")

    Dim newFirstDate As String
    Dim newSecondDate As String

    newFirstDate = GetDate(splitty(0))
    newSecondDate = GetDate(splitty(1))

    Range("B" & row).Value = newFirstDate & " to " & newSecondDate

row = row + 1
Loop


End Sub

Function GetDate(d As String) As String

Dim splitty() As String
splitty = Split(d, "/")
Dim mnth As String

Select Case (splitty(0))
    Case "01"
    mnth = "Jan"
    Case "02"
    mnth = "Feb"
    Case "03"
    mnth = "Mar"
    Case "04"
    mnth = "Apr"
    Case "05"
    mnth = "May"
    Case "06"
    mnth = "Jun"
    Case "07"
    mnth = "Jul"
    Case "08"
    mnth = "Aug"
    Case "09"
    mnth = "Sep"
    Case "10"
    mnth = "Oct"
    Case "11"
    mnth = "Nov"
    Case "12"
    mnth = "Dec"
  End Select

    GetDate = splitty(1) & "-" & mnth & "-" & splitty(2)

End Function

Ayrıca, VBa'nın sorgunuzla eşleştirmesi için ABD tarih biçimini de kullandım.

görüntü tanımını buraya girin

VBA'yı MS Office'e nasıl eklerim?

VBa ile hatırlayın, önce dosyayı bir yedek kopya olarak alın (geri alma seçeneği yoktur)


TEXT () işlevi ne yaparsam yapayım 02/23 / 15'e aynı değeri veriyor .... ne yanlış olabilir?
Prasanna

@Dave bu iyi. Ama Prasanna'nın söylediği gibi 02/23/15. Lütfen sütunumun tarih değil "Genel" biçiminde olduğunu unutmayın. Başka ne yapılabilir?
Ayusman

Tüm Generalbelgem de formatı kullanacak şekilde ayarlanmış ve gösterildiği gibi çalışıyor ... @Ayusman'ı temel alan neresiniz? Belki yerel bir sorun var. EG, Almanya'da ise, tt-mmm-yy kullanmanız gerekebilir (Gündelik Etiket'e sahip oldukları için (dolayısıyla d yerine t))
Dave

@Prasanna, bilmiyorum, sorun makinenin Yerel ayarları olduğunu tahmin ediyorum. Neyse, VBa alternatifi işe yaramalı
Dave
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.