एक्सेल में एकल कॉलम में एकाधिक तिथि प्रारूप


2

मेरे पास एक सीएसवी फाइल है जिसमें विभिन्न रूपों में तारीखों के साथ एक तारीख कॉलम है:

dd-mm-yyyy

yyyy-mm-dd

yyyy-mm

yyyy

यह अनियमित डेटा एकल कॉलम में है।

मैं उन सभी को कैसे परिवर्तित करूं dd-mm-yyyyऔर एक्सेल फॉर्मूला का उपयोग करके उनसे वर्ष निकालूं? वांछित उत्पादन निम्नानुसार है:

Input       Output
25-03-1954  25-03-1954
22-09-1987  22-09-1987
1990-01-25  25-01-1990
1968-11-15  15-11-1968
1919-01     01-01-1919
1873-02     01-02-1873
1945        01-01-1945
1933        01-01-1933

सशर्त रूप से रूपांतरित होने का क्या मतलब है? हमें हालत दिखाओ!
राजेश एस।

@ राजेश मेरे लिए सशर्त का मतलब dd-mm-yyyyसेल में इनपुट के प्रकार के अनुसार रूपांतरण था ।
फसल

यदि आप इनपुट तिथियों को परिवर्तित करना चाहते हैं तो आउटपुट शो टेक्सट फॉर्मूला द्वारा बनाए जा सकते हैं।
राजेश एस।

और इससे आपका क्या मतलब है, ", और एक्सेल फॉर्मूला का उपयोग करके उनसे साल निकालें?" चूंकि आपके आउटपुट में सभी 3 दिनांक, महीना और वर्ष है !!
राजेश एस।

TEXTअगर मैं इनपुट में प्रारूप जानता हूं तो व्यक्तिगत रूप से उपयोग किया जा सकता है। मेरे पास इनपुट (कई स्वरूपों में) की हजारों कोशिकाएं हैं जिन्हें मैं आउटपुट में बदलना चाहता हूं। हालांकि मैं आउटपुट पाने में सक्षम नहीं हूं। एक बार जब मुझे आउटपुट मिल जाता है, तो मैं वर्ष का उपयोग करके साल निकाल सकता हूंYEAR()
फसल

जवाबों:


1

यदि आपको वास्तव में वर्ष की आवश्यकता है, तो @robinCS सूत्र का उपयोग करें।

यदि आप चाहते हैं कि परिणाम "वास्तविक एक्सेल डेट्स" हो और

  • यदि आपका डेटा TEXT है और वास्तविक तिथियां नहीं हैं,
  • और यदि आपकी क्षेत्रीय तिथि सेटिंग्स हैं DMY,
  • और कॉलम को स्वरूपित किया गया है dd-mm-yyyy

तब आप इस सूत्र का उपयोग कर सकते हैं:

=IFERROR(IFERROR(IFERROR(DATEVALUE(A2),DATEVALUE(A2&"-01")),DATEVALUE(A2&"-01-01")),"illegal date format")

ध्यान दें कि 1900 से पहले की तारीखें एक्सेल में वास्तविक तिथियां नहीं हो सकती हैं, लेकिन उन्हें TEXT स्ट्रिंग्स के रूप में दर्शाया जा सकता है। मैं इसे सूत्र छोड़ करने के लिए आपको छोड़ दूंगा।

यदि आपके आउटपुट को अंतरराष्ट्रीय स्तर पर उन देशों से अवगत होना चाहिए जिनके पास अन्य दिनांक प्रारूप हैं, तो VBA समाधान सबसे अच्छा हो सकता है। यदि यह संभव नहीं है, तो डेटा को विभाजित करने के लिए सहायक कॉलम और उसके बाद उचित रूप से पुन: इकट्ठा होने या ऐसा करने के लिए एक बहुत ही जटिल सूत्र का उपयोग किया जा सकता है।

ध्यान दें कि यह UDF दूसरे वैकल्पिक तर्क के आधार पर या तो वास्तविक तिथि, या सिर्फ वर्ष का उत्पादन करेगा।

Option Explicit
Function ConvertToDate(S As String, Optional Yr As Boolean = False) As Variant
    Dim V
    Dim dtTemp As Date

V = Split(S, "-")
Select Case UBound(V)
    Case 0
        dtTemp = DateSerial(V(0), 1, 1)
    Case 1
        dtTemp = DateSerial(V(0), V(1), 1)
    Case 2
        If Len(V(0)) = 4 Then
            dtTemp = CDate(S)
        Else
            dtTemp = DateSerial(V(2), V(1), V(0))
        End If
End Select

If Yr = True Then
    ConvertToDate = Year(dtTemp)
Else
    If Year(dtTemp) < 1900 Then
        ConvertToDate = Format(dtTemp, "dd-mm-yyyy")
    Else
        ConvertToDate = dtTemp
    End If
End If

End Function

दोनों ही तरीकों से प्रथम खंड को देखें, और यह एक वर्ष अगर है मान लेते हैं LEN > 4, और फिर कितने खंडों आवश्यक संलग्न करने के लिए तय करने के लिए पर देखने -01के

VBA समाधान टेक्स्ट स्ट्रिंग के रूप में 1900 से पहले की तारीखों को आउटपुट करेगा।


ओपी ने VBA के लिए कभी मांग नहीं की है, ओपी को एक्सेल फॉर्मूला की जरूरत है !!
राजेश एस।

1
@ राजेश और वह जवाब का पहला भाग था। लेकिन मैंने अन्य विकल्पों पर भी चर्चा की। यह केवल "सेवा के लिए एक नि: शुल्क कोड" नहीं है, बल्कि ओपी और अन्य दोनों को जानकारी प्रदान करने के लिए मौजूद है जो बाद में उत्तर के लिए डीबी खोज सकते हैं। तो एल्गोरिदम के दोनों स्पष्टीकरण, साथ ही एक समस्या को हल करने के लिए वैकल्पिक तरीके, उपयोगी हो सकते हैं।
रॉन रोसेनफेल्ड

1

चूंकि आपके इनपुट डेटा में 1900 से पहले की तारीखें होती हैं, इसलिए चीजें थोड़ी पेचीदा हो जाती हैं। इससे निपटने का सबसे सरल तरीका विशेष रूप से तिथियों के पाठ अभ्यावेदन के साथ काम करना है।

यदि आपको वास्तव में पूर्ण तिथि की आवश्यकता नहीं है, लेकिन बस वर्ष की आवश्यकता है, तो पंक्ति में किसी भी सेल में इस मूल सूत्र को दर्ज करें 2:2:

=IFERROR(VALUE(LEFT(A2,4)),VALUE(RIGHT(A2,4)))

पूर्ण तिथि के लिए, सूत्र थोड़ा और अधिक जटिल है:

=IF(MID(A2,3,1)="-",A2,CHOOSE((LEN(A2)-4)/3+1,"01-01","01"&MID(A2,5,3),RIGHT(A2,2)&MID(A2,5,3))&"-"&LEFT(A2,4))

स्पष्टीकरण:

पूर्ण तिथि सूत्र का पूर्वनिर्धारित संस्करण इस प्रकार है:

=
IF(
  MID(A2,3,1)="-",
  A2,
  CHOOSE(
    (LEN(A2)-4)/3+1,
    "01-01",
    "01"&MID(A2,5,3),
    RIGHT(A2,2)&MID(A2,5,3)
  )
  &"-"&LEFT(A2,4)
)

यह बहुत सीधा है। केवल थोड़ा मुश्किल काम CHOOSE()समारोह का पहला तर्क है (LEN(A2)-4)/3+1,। यह 1-आधारित अनुक्रमित, यानी → → , इनपुट दिनांक स्ट्रिंग्स की लंबाई को मैप करता है ।[yyyy, yyyy-mm, yyyy-mm-dd, dd-mm-yyyy][4, 7, 10, 10][1, 2, 3, 3]

टिप्पणियाँ:

  • यदि दर्ज किया गया है, तो पहले से तैयार फॉर्मूला वास्तव में काम करता है।

चेतावनियां:

  • सूत्र यह मानते हैं कि सभी इनपुट तिथियों को पाठ के रूप में संग्रहीत किया जाता है। (सूत्र क्रम संख्या के रूप में संग्रहीत तिथियों को पूरा करने के लिए आसानी से परिवर्तनीय हैं।)
  • यदि इनपुट तिथियों में अग्रणी / अनुगामी स्थान होते हैं, तो उपरोक्त सूत्र सही तरीके से काम नहीं कर सकते हैं। वे निश्चित रूप से डेट स्ट्रिंग्स में कहीं और (या अन्य पात्रों) के साथ काम नहीं करेंगे। A2सूत्रों के साथ सभी s को प्रतिस्थापित करना TRIM(A2), या इसके साथ बेहतर अभी तक SUBSTITUTE(A2," ",""), इस मुद्दे को हल करेगा।
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.