วิธีป้องกันไม่ให้ Excel ใช้การตั้งค่าภูมิภาคสำหรับรูปแบบวันที่ในสูตร


21

ตามคำถามนี้ฉันมีปัญหาต่อไปนี้:

ฉันต้องการใช้ฟังก์ชัน Excel บางอย่าง (ไม่ใช่การจัดรูปแบบเซลล์) เช่น TEXT (A1, {date_pattern})

แต่คนที่ตอบคำถามก่อนหน้าของฉันทำให้ฉันพบว่ารูปแบบวันที่เปลี่ยนไปตามการตั้งค่าภูมิภาคของ Windows

อย่างไรก็ตามระบบปฏิบัติการของฉัน (Windows 7) เป็นภาษาอังกฤษและชุดโปรแกรม Office เช่นกัน เมื่อดูการตั้งค่าภูมิภาคของฉันมันจะแสดงรูปแบบโดยใช้สัญลักษณ์ภาษาอังกฤษ (dd.MM.yyyy)

ภูมิภาคและภาษา

ฉันต้องการทราบว่ามีวิธีใดที่จะปิดการใช้งานพฤติกรรมดังกล่าวจาก Excel ซึ่งหมายความว่าฉันต้องการใช้รูปแบบภาษาอังกฤษและไม่เคยใช้ภาษาที่แปลแล้วเพราะฉันไม่ต้องการให้พฤติกรรมของแผ่นงาน Excel ของฉันเปลี่ยนไปตามการแปลของผู้อ่าน

กรณีง่าย ๆ คือการจัดรูปแบบฟิลด์วันที่ใหม่ให้เป็นแบบศูนย์กลางคอมพิวเตอร์เช่นนี้: "yyyymmdd_hhss" ซึ่งเป็นที่รู้จักในระดับสากลและสามารถจัดเรียงขึ้นและลงได้อย่างง่ายดาย แต่ในขณะที่ฉันอยู่ในส่วนฝรั่งเศสของสวิตเซอร์แลนด์ฉันควรเขียน "aaaammjj_hhss" และถ้าฉันส่ง Excel นี้ไปให้เพื่อนร่วมงานในซูริคเขาจะไม่สามารถเห็นวันที่เหมาะสมในขณะที่เขาได้รับการแปลภาษาสวิสเยอรมัน "jjjjmmtt_hhss")

เราฉลาดพอที่จะติดตั้ง windows และ office ทั้งหมดในภาษาอังกฤษ แต่เรายังคงประสบปัญหาเช่นนี้เพราะลิงก์นี้ไปยังการตั้งค่าภูมิภาค OS

สำหรับฉันแล้วการเปลี่ยนแปลงการตั้งค่า Windows ไม่ใช่ตัวเลือกเพราะโปรแกรมอื่นทั้งหมดกำลังใช้การตั้งค่านี้


4
ฉันไม่อยากเชื่อเลยว่าสิ่งนี้จะได้รับการแก้ไขบน Excel ด้วยพฤติกรรมนี้ผลลัพธ์ของเอกสารขึ้นอยู่กับคอมพิวเตอร์ที่เปิดไฟล์ทั้งหมดทำให้เนื้อหาของไฟล์เปลี่ยนไปขึ้นอยู่กับคอมพิวเตอร์ ฉันเจอกับปัญหานี้เมื่อเปิดไฟล์โดยใช้เครื่องหมายจุลภาค (,) สำหรับค่าทศนิยมในคอมพิวเตอร์โดยใช้จุด (.) และสูตรให้ผลลัพธ์ที่ไม่ถูกต้อง ...
AxeEffect

คำตอบ:


26

คำถามนี้ค่อนข้างเก่า แต่จนถึงวันนี้ดูเหมือนจะไม่มีคำตอบ ฉันเคยเห็นคำถามที่คล้ายกันในเว็บไซต์จำนวนหนึ่ง แต่ยังไม่พบคำตอบใด ๆ ที่เกี่ยวข้องกับฟังก์ชัน Excel ในตัวเท่านั้น อย่างไรก็ตามมันค่อนข้างง่ายที่จะแก้ปัญหานี้ด้วย VBA คุณไม่ต้องรู้วิธีตั้งโปรแกรมให้ทำเช่นนี้เพราะฟังก์ชั่นที่ต้องการนั้นง่ายมาก

เปิดเวิร์กบุคของคุณเพียงกดAlt + F11 (เพื่อเปิดตัวแก้ไข VBA) จากนั้นคลิกที่รายการเมนูแทรก > โมดูล ในโมดูล VBA ใหม่ให้ป้อนข้อมูลต่อไปนี้:

Public Function FMT$(ByVal Value, ByVal strFormat)
    FMT = VBA.Format$(Value, strFormat)
End Function

สิ่งนี้จะเป็นเพียงการใช้ตัวเอง VBA ของFormatฟังก์ชั่นแทน Excel ของTEXTฟังก์ชั่น นี่คือสิ่งที่คุณต้องการ

ฟังก์ชันใหม่นี้จะจัดรูปแบบวันที่ใด ๆ (หรือตัวเลข) ตามสตริงรูปแบบที่คุณระบุ มันจะตีความสตริงรูปแบบโดยใช้สัญลักษณ์มาตรฐาน ( en-US ) โดยไม่คำนึงถึงการตั้งค่าภูมิภาคของระบบปฏิบัติการ

ที่จะใช้ในสมุดงานของคุณเพียงแค่พิมพ์แทน=FMT(A1, "yyyymmdd_hhss") =TEXT(A1, "yyyymmdd_hhss")(แน่นอนคุณสามารถเปลี่ยนการอ้างอิงเซลล์และสตริงรูปแบบได้ตามต้องการ)

โดยวิธีการที่คุณสามารถตั้งชื่อฟังก์ชั่นสิ่งที่คุณต้องการ ฉันเลือกFMTเพราะมันสั้นและเพราะฟังก์ชั่นสามารถจัดรูปแบบทั้งตัวเลขและวันที่ แต่คุณสามารถเลือกสิ่งที่อธิบายเพิ่มเติมถ้าคุณต้องการ เพียงจำไว้ว่าให้ใช้ชื่อเดียวกันในแผ่นงานของคุณเช่นเดียวกับในรหัส VBA

โปรดทราบว่าสตริงรูปแบบ VBA นั้นไม่เหมือนกับสตริงรูปแบบที่กำหนดเองของ Excel (ตัวอย่างเช่นใช้ "n" แทน "m" เป็นเวลาหลายนาที) แต่มีความคล้ายคลึงกันมาก ดูที่นี่สำหรับรายละเอียดหรือค้นหา MSDN สำหรับ "ฟังก์ชั่นการจัดรูปแบบ (Visual Basic สำหรับแอปพลิเคชัน)" เลื่อนไปที่ด้านล่างเพื่อดูตัวระบุรูปแบบวันที่ต่างๆ

วิธีที่ 2

อีกวิธีหนึ่งที่ใช้ VBA แต่จริง ๆ แล้วอาจจะง่ายต่อการบำรุงรักษาคือ:

  1. ใช้รูปแบบวันที่ที่คุณต้องการกับเซลล์โดยใช้กล่องโต้ตอบจัดรูปแบบเซลล์ปกติ เซลล์นี้สามารถอยู่ในชีตที่ซ่อนอยู่ได้หากต้องการ - ไม่จำเป็นต้องแสดงให้ผู้ใช้เห็น สมมติว่าคุณใช้รูปแบบyyyymmdd\_hhssกับเซลล์$ A $ 1 (โปรดทราบว่าเครื่องหมายขีดล่างจะต้องหลีกหนีตามที่แสดง)
  2. เพิ่มGetFormatฟังก์ชั่น (แสดงด้านล่าง) ไปยังโมดูล VBA ในสมุดงานของคุณ
  3. ใส่=GetFormat($A$1, TRUE)เข้าไปในเซลล์อื่น (เช่น$ B $ 1 )
  4. ฟังก์ชันนั้นจะส่งคืนรูปแบบสตริงที่แปลเป็นภาษาท้องถิ่น ดังนั้นแม้ว่าคุณจะเริ่มต้นจัดรูปแบบ$ A $ 1ด้วยyyyymmdd\_hhssเมื่อคุณเปิดเวิร์กบุ๊กบนคอมพิวเตอร์โดยใช้ภาษาฝรั่งเศส (ตัวอย่าง) ฟังก์ชันจะแสดงaaaammjj\_hhssขึ้น
  5. ตอนนี้เพียงแค่อ้างอิงเซลล์ที่สองในทุกTEXTฟังก์ชั่นของคุณ ตัวอย่างเช่น=TEXT(F22, $B$1).

นี่คือรหัส VBA:

Public Function GetFormat$(Cell As Range, Optional ByVal UseLocal As Boolean)
    If UseLocal Then
        GetFormat = Cell.NumberFormatLocal
    Else
        GetFormat = Cell.NumberFormat
    End If
End Function

สิ่งนี้ช่วยให้เราสามารถ "ตรวจสอบ" เซลล์ที่คุณจัดรูปแบบมา แต่เดิม ($ A $ 1) เพื่อดึงรูปแบบสตริงที่แปลเป็นภาษาท้องถิ่น สตริงนั้นจะแสดงรูปแบบเดียวกับที่คุณใช้ แต่จะใช้ตัวอักษรที่ถูกต้องสำหรับ TEXT เพื่อตีความ (ตัวอย่างเช่น "j" แทนที่จะเป็น "d") ดังนั้นค่าที่แสดงของวันที่จะคงที่ในทุกโลแคล หากคุณต้องการใช้รูปแบบวันที่เพียงรูปแบบเดียวสำหรับทั้งสมุดงานของคุณคุณจะต้องทำตามขั้นตอนที่ 1-4 ครั้งเดียว จากนั้นทำซ้ำขั้นตอนที่ 5 (ฟังก์ชั่น TEXT) ในทุกเซลล์ที่คุณใช้งานอยู่ในปัจจุบัน แต่แทนที่จะจัดรูปแบบฮาร์ดโค้ดคุณเพียงแค่อ้างอิงเซลล์ที่มีรูปแบบสตริง ( $ B $ 1ในคำแนะนำตัวอย่าง) .

โปรดทราบว่าอาร์กิวเมนต์ที่สองเพื่อGetFormatบอกฟังก์ชันว่าจะส่งคืนเวอร์ชันที่แปลแล้วหรือไม่ (ขึ้นอยู่กับการตั้งค่าภูมิภาค) หรือเวอร์ชัน "มาตรฐาน" (ซึ่งอิงจาก en-US เสมอ)

ต่อไปนี้เป็นภาพหน้าจอที่อาจทำให้ภาพชัดเจนยิ่งขึ้น

en-US

  • ในรูปคอลัมน์ 1 แสดงการแทนหลายวันเดียวโดยใช้รูปแบบที่แตกต่างกัน
  • โปรดทราบว่าแถวที่ 2 และ 3 ใช้รูปแบบวันที่ "เริ่มต้นระบบ" ของ Excel (สิ่งเหล่านี้ถูกระบุโดยเครื่องหมายดอกจันชั้นนำในรูปแบบกล่องโต้ตอบและพวกเขาระบุว่าควรใช้รูปแบบวันที่เริ่มต้นของผู้ใช้) นอกจากนี้โปรดทราบว่าแถว 5 ใช้ LCID ในวงเล็บซึ่งบังคับให้ภาษาที่ใช้สำหรับชื่อเดือนและวันเป็นภาษาอังกฤษ LCID ที่แตกต่างกันสามารถใช้เพื่อระบุภาษาอื่น ๆ )
  • คอลัมน์ที่สองแสดงผลลัพธ์ของGetFormat(Cell, FALSE)สำหรับแต่ละเซลล์ในคอลัมน์ 1 (จำได้ว่าFALSEสำหรับพารามิเตอร์ที่สองทำให้ฟังก์ชั่นกลับไม่ใช่ภาษาท้องถิ่นรูปแบบที่ )
  • คอลัมน์ที่สามแสดงสิ่งที่GetFormat(Cell, TRUE)ส่งกลับสำหรับแต่ละเซลล์ในคอลัมน์ 2 (เช่นรูปแบบที่แปลแล้ว )
  • คอลัมน์ที่สี่แสดงผลลัพธ์ของฟังก์ชัน TEXT โดยใช้ค่าวันที่แบบดิบดั้งเดิมและผลลัพธ์ที่แปลเป็นภาษาท้องถิ่นของGetFormatการสร้างรูปแบบที่แสดงในคอลัมน์ 1 อีกครั้งอย่างไรก็ตามโปรดทราบว่าการจัดรูปแบบตัวเลขไม่ถูกนำไปใช้กับคอลัมน์นี้ ค่าเป็นผลลัพธ์โดยตรงของฟังก์ชัน TEXT

ผลลัพธ์สำหรับกรณีภาษาอังกฤษ (สหรัฐอเมริกา) ด้านบนไม่น่าสนใจมาก แต่คุณสามารถเปรียบเทียบกับผลลัพธ์ต่อไปนี้ที่ได้รับจากการเปลี่ยนการตั้งค่าภูมิภาคของระบบปฏิบัติการของฉันไปยังตำแหน่งที่ตั้งอื่น ๆ ที่สำคัญโปรดทราบว่าโดยใช้GetFormatร่วมกับTEXTเราจะสามารถเก็บผลลัพธ์ที่คงที่สำหรับรูปแบบตัวเลข (ที่ไม่รวมชื่อวันหรือเดือน) ในทุกโลแคล และโดยการ จำกัด ภาษาโดยใช้ LCID (เช่นเดียวกับในแถวที่ 5) เรายังสามารถรักษารูปแบบคงที่ได้เมื่อรวมชื่อวันและเดือนด้วย

FR-CH

nb-NO

RU-RU

วิธีนี้ใช้ได้กับหลายภาษาอย่างไรก็ตามควรสังเกตว่าสคริปต์ที่ใช้แสดงตัวเลขฮินดู - อารบิกนั้นไม่เหมือนกันในทุกภาษา ดังนั้นการตั้งค่าภูมิภาคเช่นที่ตั้งของเนปาล (อินเดีย) จะส่งผลให้รูปแบบวันที่ "ดู" แตกต่างจากวันที่ในสหรัฐอเมริกา แต่ที่จริงแล้วมันอยู่ในรูปแบบ "เดียวกัน" ในแง่ของตำแหน่งของตัวเลข - พวกเขาเพียงแค่ใช้สัญลักษณ์ที่แตกต่างกันสำหรับตัวเลข

ภาคตะวันออกเฉียงเหนือ-IN


1
ขอบคุณมากสำหรับคำตอบของคุณ (สาย) - วิธีที่ 1 ดีที่สุดสำหรับฉันและเรียบง่ายพอสำหรับทุกกรณีของฉัน คำตอบที่ดีมากและสมบูรณ์
рüффп

คุณช่วยอธิบายได้ว่าฉันจะแทรก 28.11.2015 ด้วยวิธีแรกได้อย่างไร? ฉันควรเขียน ??????? และที่ไหน
Ilan

3

สำหรับวันที่คุณสามารถกำหนดรูปแบบที่ทำให้ Excel ใช้ภาษาที่แน่นอนได้ หากคุณตั้งค่ารูปแบบตัวเลขของเซลล์ที่มีวันที่ของคุณเป็นอย่างเช่น

[$-409]m/d/yy h:mm AM/PM;@

Excel จะแสดงวันที่ของคุณในสหรัฐอเมริกาสถานที่ (hex 409)

Gotcha: สัญกรณ์ YMD มีการแปลเป็นภาษาท้องถิ่นและเปลี่ยนเป็น JMT ในระบบภาษาเยอรมัน ดังนั้นคุณอาจต้องปรับสตริงรูปแบบให้เหมาะกับสถานการณ์ของคุณ แต่ฉันคาดว่ามันจะทำงานเหมือนสูตร (autotranslate) ในระบบที่ใช้ภาษาอื่น (ตามที่คุณรู้)

ดูที่นี่สำหรับรายละเอียดเพิ่มเติม: /programming/894805/excel-number-format-what-is-409

และที่นี่สำหรับรายการตำแหน่งที่ตั้ง: http://support.microsoft.com/kb/221435


2
แต่มันไม่ตอบคำถามของฉัน ฉันต้องการที่จะสามารถเขียน dd / mm / yyyy ในแผ่นงาน Excel ของฉันแม้ระบบปฏิบัติการต้องการ "jj / mm / aaaa" ฉันพยายามเปลี่ยนภาษาของระบบปฏิบัติการของฉันและผลลัพธ์กำลังเปลี่ยนไปดังนั้น Excel จะไม่ปรับเปลี่ยนตามตำแหน่งที่ตั้งของผู้ใช้ ถ้าฉันเขียน "jj.mm.aaaa" (เป็นภาษาฝรั่งเศส) และฉันเปลี่ยนภาษาของฉันเป็น US Excel จะแสดง: "jj.03.aaaa" ซึ่งไม่ได้ดัดแปลง
рüффп

3

แม้ว่าคำถามนี้จะค่อนข้างเก่า แต่ฉันก็ได้พบกับวิธีการแก้ปัญหาแบบอื่น (ง่ายๆ!) และกำลังโพสต์ที่นี่เพื่อความสมบูรณ์ / การอ้างอิง

  • ฉันลองคำตอบของ ricovox ได้สำเร็จ แต่ต้องการทางออกที่ไม่มี VBA

  • ทดสอบโซลูชันของ MarinD เช่นกัน แต่ตามที่ระบุไว้ในความคิดเห็นหากคุณต้องการที่จะตอบสนองมากกว่าหนึ่งรูปแบบเฉพาะประเทศก็สามารถได้อย่างรวดเร็วเทอะทะ

  • และตอนนี้สำหรับโซลูชันของฉัน: การใช้ฟังก์ชัน YEAR () ดั้งเดิมของปี MONTH () และ DATE () ห่อด้วย TEXT () เพื่อวางเลขศูนย์ไว้ด้านหน้า ด้วยวันที่ใน A1:

    =TEXT(YEAR(A1),"0000")&"-"&TEXT(MONTH(A1),"00")&"-"&TEXT(DAY(A1),"00")

    ให้ฉันวันที่ในYYYY-MM-DDรูปแบบโดยไม่คำนึงถึงว่าสถานที่ปัจจุบันต้องการYYYY-MM-DDหรือAAAA-MM-JJหรือชื่อที่แปลอื่น ๆ สำหรับปี / เดือน / วันที่

    Excel แปลสูตรดั้งเดิมโดยอัตโนมัติ


1

วิธีง่ายๆในการหลีกเลี่ยงความยุ่งเหยิงทั้งหมดคือการสร้างรายการวันที่ทราบและใช้รายการในฟังก์ชันของคุณ


4
คุณสามารถขยายคำตอบเพื่อรวมตัวอย่างได้หรือไม่?
Burgi

1

วิธีง่ายๆในการแก้ไขปัญหารูปแบบวันที่ของภาษา Excel คือการใช้CHOOSEฟังก์ชั่น:

CHOOSE(WEEKDAY(TODAY());"Dimanche";"Lundi";"Mardi";"Mercredi";"Jeudi";"Vendredi";"Samedi")

CHOOSE(MONTH(TODAY());"Janvier";"Fevrier";"Mars";"Avril";"Mai";"Juin";"Juillet";"Août";"Septembre";"Octobre";"Novembre";"Décembre")

ในตัวอย่างเหล่านี้คุณจะได้รับวันและเดือนเป็นตัวอักษรโดยไม่ใช้รูปแบบภาษาเช่น "Mmmm" หรือ "Dddd" หรือ "Jjjj"


เรียบง่ายตราบใดที่คุณกำลังจัดการหนึ่งภาษา (ภาษาฝรั่งเศสในกรณีของคุณ) แต่ถ้าคุณต้องจัดการความเจ็บปวดหลายอย่างสูตรของคุณจะใหญ่เกินไป
рüффп

ฉันจัดการหนึ่ง langage เท่านั้น จุดประสงค์ของการใช้ CHOOSE นั้นแม่นยำในการผลิตแผ่นงาน Excel แผ่นเดียวที่สามารถใช้กับ Excel รุ่นภาษาอื่นได้
อเล็กซิส PERROTTEY

ความล้มเหลวครั้งใหญ่ของฟังก์ชัน Excel TEXT คือรูปแบบวันที่ขึ้นอยู่กับตำแหน่งที่ตั้ง Windows ปัจจุบันของคุณในการตั้งค่าภูมิภาค ตัวอย่าง = = TEXT (TODAY (); "YYYY-MM-DD") สำหรับ US = TEXT (TODAY (); "AAAA-MM-JJ") สำหรับ FR ดังนั้นจึงเป็นไปไม่ได้ที่จะสร้างแผ่นงาน Excel สากลที่ใช้ TEXT ใช้ CHOOSE แทน
Alexis PERROTTEY

ในตอนท้ายโซลูชันที่มีฟังก์ชันอื่นที่มีค่าฮาร์ดโค้ดไม่ได้ช่วยอะไรมากไปกว่าการเข้ารหัสวันที่ ส่วนตัวฉันจะไปกับ VBA และคำตอบที่ได้รับการยอมรับ ขอบคุณสำหรับการแบ่งปันประสบการณ์ของคุณ
рüффп

1

หากวันที่อ้างอิงของคุณอยู่ในเซลล์ A1:

=IF(RIGHT(TEXT(A1;"dd-mm-yyyy");1)="y";TEXT(A1;"jj-mm-aaaa");TEXT(A1;"dd-mm-yyyy"))

นั่นเป็นวิธีแก้ปัญหาที่ดีถ้าคุณต้องการจัดการรูปแบบพิเศษเพียงรูปแบบเดียว ... ฉันแน่ใจว่าอย่างไรก็ตามเพื่อนร่วมงานของฉันจากซูริคหรือประเทศอื่น ๆ ที่ไม่ใช่ภาษาอังกฤษหรือภาษาฝรั่งเศสนี่จะไม่ทำงาน หากคุณต้องทำif(if(if...ทุกรูปแบบทั่วโลกมันจะยากในการจัดการ
рüффп

ถูกต้อง แต่ฉันไม่สามารถหาอะไรที่ดีกว่านี้ได้หากไม่ผ่านมาโคร VBA ฉันไม่เข้าใจว่าทำไม Microsoft แปลฟังก์ชั่นและคุณสมบัติของมัน (ซึ่งแย่กว่านั้นเพราะพวกเขาไม่ได้แปลโดยอัตโนมัติเมื่อคุณเปิดมันด้วยภาษาอื่นเช่นเดียวกับปัญหาของเราที่นี่) ไม่มีภาษาการเขียนโปรแกรมที่เคยทำ แค่ภาษาอังกฤษก็พอแล้ว
MarinD

0

ตอนนี้ฉันใช้ตรรกะที่คล้ายกันกับวิธีที่ 2 ที่ให้กับมาโครแล้ว Macros ใช้งานได้ แต่โดยปกติเมื่อคุณส่งไฟล์จากองค์กรหนึ่งไปยังอีกองค์กรหนึ่งแมโครจะไม่ทำการแลกเปลี่ยนหรือโปรแกรมป้องกันไวรัสจะไม่ยอมให้ทำงาน ดังนั้นฉันได้เปลี่ยนชื่อเซลล์ ia เป็น dateformat ในเซลล์นี้ฉันเพิ่งป้อนข้อความ dd / mm / yyyy ดังนั้นเมื่อฉันใช้ฟังก์ชันข้อความฉันใช้ชื่อเซลล์สำหรับรูปแบบเช่น = text (C1, dateformat) และดูเหมือนว่าจะใช้งานได้ (precisey สำหรับสวิตเซอร์แลนด์มันทำงานได้)

ไชโย ...

A.


1
คุณบอกว่าใช้งานได้ในสวิตเซอร์แลนด์ แต่มันคือ "ฝรั่งเศส (สวิตเซอร์แลนด์)", "เยอรมัน (สวิตเซอร์แลนด์)" หรือว่าเป็นภาษาอังกฤษ? ถ้าเป็นภาษาอังกฤษสิ่งนี้ไม่ได้มีส่วนช่วยอะไรเลยในการอภิปรายนี้ หากไม่ใช่ภาษาอังกฤษคุณสามารถอธิบายได้ไหมว่าทำไมถึง=TEXT(C1,dateformat)ทำงานได้ (กับdateformatเซลล์ที่มีdd/mm/yyyy) เมื่อ=TEXT(C1, "dd/mm/yyyy")ไม่ทำงาน (หรือใช้งานได้หรือไม่)
G-Man พูดว่า 'Reinstate Monica'

0

ฉันไม่อยากจะเชื่อเลยว่าไม่มีใครเสนอรูปแบบที่มีชื่อเป็นวิธีแก้ปัญหา

หากคุณจัดรูปแบบวันที่และป้อนวันที่=TEXT(A1,"Short Date")นั้นจะใช้รูปแบบที่เหมาะสมโดยอัตโนมัติตามการตั้งค่าภูมิภาคโดยไม่มีปัญหาระหว่างศูนย์

"Long Date" เป็นรายการที่ยอมรับได้และจะทำงานได้อย่างราบรื่นทั่วภูมิภาค นอกจากนี้ยังจะแปลงกลับเป็นวันที่เหมาะสมใน VBA ด้วย cvdate โดยไม่คำนึงถึงรุ่นที่ใช้  


ใน Excel 2016 มันจะเก็บสิ่งที่กำหนดรูปแบบภูมิภาคไว้ หากคุณพยายามเปรียบเทียบวันที่ด้วยรูปแบบภูมิภาคที่แตกต่างกันการเปรียบเทียบจะล้มเหลว นี่แย่มากมันอาจเป็นข้อผิดพลาด
Scuba Steve

0

เพียงแค่ปล่อยในอีกทางเลือกที่หรูหรา imho นำมาจาก: คำตอบ Stackoverflow โดย @Taosique

=IF(TEXT(1,"mmmm")="January",[some logic for English system],[some logic for non-English system])

มันอาจไม่ทำงาน ฉันไม่รู้ภาษาทั้งหมด แต่ตราบใดที่คำสำหรับเดือนไม่ได้ขึ้นต้นด้วย "m" ในบางภาษาสิ่งนี้อาจไม่ทำงานเลย (การแสดง#VALUEข้อผิดพลาด) แม้ว่าคำขึ้นต้นด้วย "m" มีมากกว่า 2 ตัวเลือกที่นี่ เยอรมนีโปแลนด์และฮังการีแต่ละแห่งมีรหัสการจัดรูปแบบที่แตกต่างกันเพื่อตั้งชื่อไม่กี่แห่ง
Ister

ฉันถือว่าหมวกนักพัฒนารู้ว่าการตั้งค่าภาษาที่เขากำลังพัฒนาอยู่ (เช่นที่นี่เป็นระบบภาษาอังกฤษ) และสิ่งที่เขาต้องการให้สูตรของเขาทำงานใน / เพื่อแปลมันเป็น ไม่ควรเป็นเรื่องใหญ่ที่จะขยาย IF สำหรับภาษาใด ๆ ที่เขา / เธอสนใจ
GWD

ดีฉันได้ระบุประเทศเหล่านั้นเพราะฉันมีกรณีที่ฉันต้องปรับให้เข้ากับทุกภาษาในเวลาเดียวกัน นอกจากนี้ยังมีข้อ จำกัด ของ IFs แบบฝังอย่างไรก็ตามนี่ก็เป็นเรื่องง่ายที่จะหลีกเลี่ยง ฉันยอมรับว่าความคิดนั้นดีโดยทั่วไปและประโยชน์หลักของมันคือไม่จำเป็นต้องใช้ VBA
Ister

0

ฉันรู้ว่าไปงานปาร์ตี้สาย แต่ดูด้วยตัวเองฉันเพิ่งพบวิธีการทำงานในExcelBanterซึ่งไม่ต้องการ VBA

วิธีการเดินทางคือใช้ระบบมาโคร Excel v4 แบบเก่า มันยังคงสามารถเข้าถึงได้ผ่านช่วงที่มีชื่อหรือแผ่นมาโคร v4 มันเป็นประสบการณ์การเรียนรู้สำหรับฉันเช่นกัน หน้าหนึ่งบนExcel นอกกริดและอีกหนึ่งหน้าบนเว็บไซต์ของ Ron de Bruinคือการแนะนำตัวที่ดี หลังมีลิงก์ไปยังเวิร์กบุ๊กที่มีโซลูชันเดียวกันในนั้น

โดยทั่วไปแล้วฟังก์ชันแมโคร Excel v4 แบบเก่า GET.WORKSPACE สามารถใช้เพื่อรับข้อมูลเมตาเกี่ยวกับสิ่งต่างๆมากมายรวมถึงรูปแบบวันที่ที่ใช้งานอยู่ GET.WORKSPACE (37) ส่งคืนอาร์เรย์ของอักขระทั้งหมดที่ใช้สำหรับตัวคั่นทุกประเภท ฯลฯ โดยที่ดัชนี 19-20-21 ถือจดหมายที่ใช้สำหรับการจัดรูปแบบปีเดือนและวัน ดังนั้นการใช้ INDEX (GET.WORKSPACE (37), 19) จะส่งกลับ "y" ในการตั้งค่าภาษาอังกฤษ "j" ในภาษาดัตช์และ "a" ในภาษาสเปน รวมกับ REPT เพื่อสร้างรหัส 4 ตัวอักษรและคุณเสร็จแล้ว ปัญหาคือว่าฟังก์ชั่น v4 แบบเก่า (เช่น GET.WORKSPACE) สามารถใช้งานได้โดยมาโครสไตล์ชีท v4 และช่วงที่ตั้งชื่อเท่านั้น

ดังนั้น:

  • สร้างช่วงที่ตั้งชื่อแล้วตั้งชื่อเช่น "MonthFormat"
  • ให้สูตร =REPT(INDEX(GET.WORKSPACE(37),19),4)
  • ในสูตรข้อความของคุณใช้ชื่อ MonthFormat นี้เพื่อระบุรูปแบบเช่น =TEXT(A1, MonthFormat)
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.