Menurut pertanyaan ini, saya memiliki masalah berikut:
Saya ingin menggunakan beberapa fungsi Excel (bukan pemformatan sel) seperti TEXT (A1, {date_pattern})
Tetapi orang yang menjawab pertanyaan saya sebelumnya membuat saya menemukan bahwa pola tanggal berubah sesuai dengan Pengaturan Regional Windows.
Namun, OS saya (Windows 7) dalam bahasa Inggris dan Office suite juga. Dengan melihat di pengaturan Regional saya itu menunjukkan bahkan pola menggunakan notasi bahasa Inggris (dd.MM.yyyy)
Saya ingin tahu apakah ada cara untuk menonaktifkan perilaku seperti itu dari Excel, artinya saya ingin selalu menggunakan pola bahasa Inggris dan tidak pernah yang dilokalkan karena saya tidak ingin perilaku lembar Excel saya berubah sesuai dengan lokalisasi pembaca.
Sebuah kasus sederhana akan memformat ulang beberapa bidang tanggal ke cara sentris komputer seperti ini: "yyyymmdd_hhss" ini dikenali secara universal dan dapat disortir ke atas dan ke bawah dengan mudah. Tetapi karena saya berada di bagian Prancis dari Swiss bagian saya harus menulis "aaaammjj_hhss" dan jika saya mengirim Excel ini ke seorang rekan di Zürich dia tidak akan dapat melihat tanggal yang tepat ketika dia mendapat lokalisasi Jerman Jerman (unggul akan mengharapkan "jjjjmmtt_hhss")
Kami cukup pintar untuk menginstal semua jendela dan kantor dalam bahasa Inggris, tetapi kami masih menghadapi masalah seperti ini karena tautan ini ke pengaturan regional OS.
Bagi saya perubahan Pengaturan Windows bukanlah suatu pilihan karena semua program lain menggunakan pengaturan ini.
Jawaban:
Pertanyaan ini agak lama, tetapi sampai saat ini sepertinya tidak ada jawaban. Saya juga melihat pertanyaan serupa di sejumlah situs, tetapi belum menemukan jawaban yang hanya melibatkan fungsi Excel bawaan. Namun, sangat mudah untuk menyelesaikan ini dengan VBA. Anda bahkan tidak perlu tahu cara memprogram untuk melakukan ini, karena fungsi yang diperlukan sangat sederhana.
Dengan buku kerja Anda terbuka, cukup tekan Alt + F11 (untuk membuka editor VBA) Kemudian Klik item menu Sisipkan > Modul Di modul VBA baru, masukkan yang berikut ini:
Apa yang dilakukan adalah hanya menggunakan
Format
fungsi VBA sendiri alih-alih fungsi ExcelTEXT
. Inilah yang Anda inginkan.Fungsi baru ini akan memformat tanggal (atau angka) apa pun sesuai dengan string format apa pun yang Anda tentukan. Ini akan menginterpretasikan string format menggunakan notasi standar ( en-US ), terlepas dari pengaturan regional sistem operasi.
Untuk menggunakan ini di buku kerja Anda, cukup ketik
=FMT(A1, "yyyymmdd_hhss")
bukan=TEXT(A1, "yyyymmdd_hhss")
. (Tentu saja Anda dapat mengubah referensi sel dan memformat string sesuai kebutuhan.)Omong-omong, Anda dapat memberi nama fungsi apa pun yang Anda inginkan. Saya memilih
FMT
karena itu pendek dan karena fungsinya dapat memformat angka dan tanggal. Tetapi Anda dapat memilih sesuatu yang lebih deskriptif jika Anda mau. Ingatlah untuk menggunakan nama yang sama di lembar kerja Anda seperti pada kode VBA.Perhatikan bahwa string format VBA tidak persis sama dengan string format kustom Excel (misalnya, gunakan "n" alih-alih "m" selama beberapa menit), tetapi mereka sangat mirip. Lihat di sini untuk detailnya, atau cari MSDN untuk "Fungsi Format (Visual Basic for Applications)". Gulir ke bawah untuk melihat berbagai penentu format tanggal.
Metode 2
Pendekatan lain yang juga menggunakan VBA, tetapi sebenarnya mungkin lebih mudah dipertahankan, adalah sebagai berikut:
yyyymmdd\_hhss
ke sel $ A $ 1 (perhatikan bahwa garis bawah harus diloloskan seperti yang ditunjukkan).GetFormat
fungsi (ditunjukkan di bawah) ke modul VBA di buku kerja Anda.=GetFormat($A$1, TRUE)
ke sel lain (mis. $ B $ 1 )yyyymmdd\_hhss
, ketika Anda membuka buku kerja pada komputer menggunakan bahasa Perancis (misalnya), fungsi akan menunjukkanaaaammjj\_hhss
.TEXT
fungsi Anda . Sebagai contoh:=TEXT(F22, $B$1)
.Berikut kode VBA:
Ini memungkinkan kita untuk "memeriksa" sel yang semula diformat ($ A $ 1) untuk mengambil format-string yang dilokalkan. String itu akan mewakili format yang sama yang Anda terapkan, tetapi akan menggunakan huruf yang benar untuk TEXT untuk menafsirkan ("j", bukan "d" misalnya), sehingga nilai yang ditampilkan dari tanggal akan konstan di semua lokal. Jika Anda ingin menggunakan hanya satu format tanggal untuk seluruh buku kerja Anda, Anda hanya perlu melakukan langkah 1-4 sekali. Kemudian ulangi langkah 5 (fungsi TEXT) di semua sel tempat Anda menggunakannya saat ini, tetapi alih-alih mengkodekan format, Anda cukup mereferensikan sel yang berisi string-format terlokalisasi ( $ B $ 1 dalam contoh instruksi) .
Perhatikan bahwa argumen kedua untuk
GetFormat
memberi tahu fungsi apakah akan mengembalikan versi yang dilokalkan (yang tergantung pada pengaturan regional) atau versi "standar" (yang selalu berbasis pada en-US).Berikut adalah beberapa cuplikan layar yang mungkin membuat ini lebih jelas.
GetFormat(Cell, FALSE)
untuk setiap sel di kolom 1. (Ingat bahwaFALSE
untuk parameter kedua menyebabkan fungsi mengembalikan format yang terlokalisasi NON ).GetFormat(Cell, TRUE)
kembali untuk setiap sel di kolom 2. (yaitu format yang dilokalkan ).GetFormat
untuk menghasilkan kembali format yang ditunjukkan pada kolom 1. Namun perhatikan bahwa pemformatan NO number diterapkan ke kolom ini. Nilai adalah hasil langsung dari fungsi TEXT.Hasil untuk kasus Bahasa Inggris (AS) di atas tidak terlalu menarik, tetapi Anda dapat membandingkannya dengan hasil berikut yang diperoleh dengan mengubah Pengaturan Regional sistem operasi saya ke berbagai lokal lainnya. Yang penting, perhatikan bahwa dengan menggunakan
GetFormat
dalam kombinasi denganTEXT
kami dapat mempertahankan hasil konstan untuk format numerik (yang tidak menyertakan nama hari atau bulan) di semua lokal. Dan dengan membatasi bahasa menggunakan LCID (seperti pada baris 5) kita bahkan dapat mempertahankan format konstan ketika menyertakan nama hari dan bulan juga.Metode ini berfungsi untuk sebagian besar lokal, namun perlu dicatat bahwa skrip yang digunakan untuk mewakili angka Hindu-Arab TIDAK sama di semua lokal. Oleh karena itu pengaturan regional seperti yang dari Nepal (India) lokal akan menghasilkan format tanggal yang "terlihat" berbeda dari tanggal en-AS. Tapi ini sebenarnya dalam "format" yang sama dalam hal posisi angka - mereka hanya menggunakan simbol yang berbeda untuk angka-angka tersebut.
sumber
Untuk tanggal, Anda benar-benar dapat menentukan format yang membuat Excel menggunakan lokal tertentu. Jika Anda mengatur format angka sel yang berisi tanggal Anda menjadi seperti ini
Excel akan menampilkan tanggal Anda di lokal AS (hex 409)
Gotcha: Notasi YMD dilokalkan dan dengan demikian beralih ke JMT pada sistem Jerman misalnya. Jadi, Anda mungkin harus menyesuaikan string format dengan situasi Anda, tetapi saya akan mengharapkannya berperilaku seperti rumus (autotranslate) pada sistem menggunakan bahasa yang berbeda (karena Anda tampaknya sadar).
Lihat di sini untuk rincian lebih lanjut: /programming/894805/excel-number-format-what-is-409
dan di sini untuk daftar lokal: http://support.microsoft.com/kb/221435
sumber
Meskipun pertanyaan ini agak lama, saya menemukan solusi lain (sederhana!) Dan saya posting di sini demi kelengkapan / referensi.
Saya mencoba jawaban ricovox dengan sukses, tetapi menginginkan solusi tanpa VBA.
Menguji solusi MarinD juga. Tetapi, seperti yang ditunjukkan dalam komentar, jika Anda perlu memenuhi lebih dari satu format khusus negara, hal itu bisa menjadi sangat cepat.
Dan sekarang untuk solusi saya: menggunakan fungsi Excel YEAR (), MONTH () dan DATE () asli Excel, dibungkus dengan TEXT () untuk mengisi angka nol di depan. Dengan Tanggal dalam A1:
=TEXT(YEAR(A1),"0000")&"-"&TEXT(MONTH(A1),"00")&"-"&TEXT(DAY(A1),"00")
memberi saya tanggal dalam
YYYY-MM-DD
format, terlepas dari apakah lokal saat ini memerlukanYYYY-MM-DD
atauAAAA-MM-JJ
atau nama lokal lainnya untuk tahun / bulan / tanggal.Excel menerjemahkan formula aslinya secara otomatis.
sumber
Cara yang sangat sederhana untuk menghindari seluruh kekacauan adalah membuat daftar hari dari tanggal yang diketahui, dan menggunakan daftar itu di fungsi Anda.
sumber
Cara sederhana untuk memecahkan masalah format tanggal lokal Excel adalah dengan menggunakan
CHOOSE
fungsi ini:Dalam contoh-contoh ini Anda akan mendapatkan Hari dan Bulan dalam surat tanpa menggunakan format lokal seperti "Mmmm" atau "Dddd" atau "Jjjj".
sumber
Jika tanggal referensi Anda ada di sel A1:
sumber
if(if(if...
untuk setiap format tunggal di seluruh dunia, itu akan sangat sulit untuk dikelola.Saya sekarang telah menggunakan logika yang mirip dengan Metode 2 yang diberikan dengan makro. Macro berfungsi, tetapi biasanya ketika Anda mengirim file dari satu organisasi ke organisasi lain, makro tidak akan berhasil melalui pertukaran atau antivirus tidak akan membiarkannya berjalan. Jadi saya hanya mengubah nama selnya menjadi dateformat. Di sel ini saya cukup memasukkan teks dd / mm / yyyy. Jadi ketika saya menggunakan fungsi teks saya menggunakan nama sel untuk format misalnya = teks (C1, dateformat) dan sepertinya berfungsi (tepatnya untuk Swiss berfungsi).
Bersulang...
SEBUAH.
sumber
=TEXT(C1,dateformat)
akan berfungsi (dengandateformat
sel yang berisidd/mm/yyyy
) ketika=TEXT(C1, "dd/mm/yyyy")
tidak berfungsi? (Atau apakah itu berhasil?)Saya tidak percaya tidak ada yang menawarkan format bernama sebagai solusi.
Jika Anda memformat tanggal dan memasukkannya
=TEXT(A1,"Short Date")
secara otomatis akan menggunakan format yang tepat berdasarkan pengaturan regional tanpa masalah antar wilayah."Long Date" juga merupakan entri yang dapat diterima dan akan bekerja mulus di seluruh wilayah. Itu juga akan mengkonversi kembali ke tanggal yang tepat di VBA dengan cvdate terlepas dari versi yang digunakan.
sumber
Hanya memasukkan alternatif imho elegan lain yang diambil dari: Stackoverflow jawab oleh @Taosique
sumber
#VALUE
kesalahan). Bahkan jika kata itu dimulai dengan "m" ada lebih dari hanya 2 opsi di sini. Jerman, Polandia, dan Hongaria masing-masing memiliki kode pemformatan berbeda untuk beberapa nama.Saya tahu, terlambat ke pesta, tetapi melihat ke dalam ini sendiri, saya baru saja menemukan solusi yang berfungsi di ExcelBanter yang tidak membutuhkan VBA.
Cara untuk pergi adalah menggunakan sistem makro Excel v4 lama. Itu masih dapat diakses melalui rentang bernama atau lembar makro v4. Itu juga merupakan pengalaman belajar bagi saya; sebuah halaman di Excel di luar jaringan dan satu di situs Ron de Bruin adalah perkenalan yang bagus. Yang terakhir ini juga memiliki tautan ke buku kerja dengan solusi yang sama di dalamnya.
Pada dasarnya, fungsi makro Excel v4 lama GET.WORKSPACE dapat digunakan untuk mendapatkan informasi meta tentang banyak hal, termasuk format tanggal lokal yang digunakan. GET.WORKSPACE (37) mengembalikan array dari semua karakter yang digunakan untuk semua jenis pemisah dll, di mana indeks 19-20-21 memegang huruf yang digunakan untuk format tahun, bulan dan hari. Jadi menggunakan INDEX (GET.WORKSPACE (37), 19) mengembalikan "y" pada pengaturan bahasa Inggris, "j" pada bahasa Belanda dan "a" pada bahasa Spanyol. Gabungkan itu dengan REPT untuk menghasilkan kode 4 huruf dan Anda selesai. Masalahnya adalah bahwa fungsi v4 lama (seperti GET.WORKSPACE) hanya dapat digunakan oleh lembar makro gaya v4 dan rentang bernama.
Jadi:
=REPT(INDEX(GET.WORKSPACE(37),19),4)
=TEXT(A1, MonthFormat)
sumber