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:
Public Function FMT$(ByVal Value, ByVal strFormat)
FMT = VBA.Format$(Value, strFormat)
End Function
Apa yang dilakukan adalah hanya menggunakan Format
fungsi VBA sendiri alih-alih fungsi Excel TEXT
. 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:
- Terapkan format tanggal yang Anda inginkan ke sel, menggunakan dialog Format Sel normal. Sel ini bisa berada di lembar tersembunyi jika Anda mau - tidak perlu ditampilkan kepada pengguna akhir. Mari kita asumsikan Anda menerapkan format
yyyymmdd\_hhss
ke sel $ A $ 1 (perhatikan bahwa garis bawah harus diloloskan seperti yang ditunjukkan).
- Tambahkan
GetFormat
fungsi (ditunjukkan di bawah) ke modul VBA di buku kerja Anda.
- Masukkan
=GetFormat($A$1, TRUE)
ke sel lain (mis. $ B $ 1 )
- Fungsi itu akan mengembalikan versi string format yang dilokalkan . Jadi meskipun Anda awalnya diformat $ A $ 1 dengan
yyyymmdd\_hhss
, ketika Anda membuka buku kerja pada komputer menggunakan bahasa Perancis (misalnya), fungsi akan menunjukkan aaaammjj\_hhss
.
- Sekarang cukup referensi sel kedua di semua
TEXT
fungsi Anda . Sebagai contoh: =TEXT(F22, $B$1)
.
Berikut kode 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
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.
- Dalam gambar, Kolom 1 mencantumkan beberapa representasi dari satu tanggal dengan format berbeda yang diterapkan.
- Perhatikan bahwa baris 2 dan 3 menggunakan format tanggal "sistem default" Excel. (Ini ditunjukkan oleh tanda bintang utama dalam Dialog Format dan itu menunjukkan bahwa format tanggal default pengguna harus digunakan.) Juga perhatikan bahwa baris 5 menggunakan LCID kurung, yang memaksa bahasa yang digunakan untuk nama bulan dan hari menjadi bahasa Inggris ( LCID yang berbeda dapat digunakan untuk menentukan bahasa lain).
- Kolom kedua menunjukkan hasil
GetFormat(Cell, FALSE)
untuk setiap sel di kolom 1. (Ingat bahwa FALSE
untuk parameter kedua menyebabkan fungsi mengembalikan format yang terlokalisasi NON ).
- Kolom ketiga menunjukkan apa yang
GetFormat(Cell, TRUE)
kembali untuk setiap sel di kolom 2. (yaitu format yang dilokalkan ).
- Kolom keempat menunjukkan hasil fungsi TEXT menggunakan nilai asli, tanggal baku dan hasil lokal
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 dengan TEXT
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.