Bu soru biraz eski ama bugüne kadar bir cevabı yok gibi görünüyor. Bazı sitelerde de benzer sorular gördüm, ancak yalnızca yerleşik Excel işlevlerini içeren herhangi bir cevap bulamadım. Ancak, bunu VBA ile çözmek oldukça kolaydır. Bunu yapmak için nasıl programlayacağınızı bile bilmeniz gerekmez, çünkü gerekli işlev çok basittir.
Çalışma kitabınız açıkken, Alt + F11 tuşlarına basın (VBA düzenleyicisini açmak için) Sonra Ekle > Modül menü öğesini tıklatın
. Yeni VBA modülüne aşağıdakileri girin:
Public Function FMT$(ByVal Value, ByVal strFormat)
FMT = VBA.Format$(Value, strFormat)
End Function
Bunun yaptığı, Format
Excel'in işlevi yerine VBA'nın kendi işlevini kullanmaktır TEXT
. Tam olarak istediğiniz budur.
Bu yeni işlev, herhangi bir tarihi (veya sayıyı) belirttiğiniz biçim dizesine göre biçimlendirir. İşletim sisteminin bölgesel ayarlarına bakılmaksızın standart ( en-US ) notasyonunu kullanarak biçim dizesini yorumlar .
Bunu çalışma kitabınızda kullanmak için =FMT(A1, "yyyymmdd_hhss")
yerine yazın =TEXT(A1, "yyyymmdd_hhss")
. (Tabii ki hücre referansını ve format dizesini gerektiği gibi değiştirebilirsiniz.)
Bu arada, işlevi istediğiniz gibi adlandırabilirsiniz. SeçtimFMT
Kısa olduğu ve fonksiyonun hem sayıları hem de tarihleri biçimlendirebilmesi nedeniyle . Ancak isterseniz daha açıklayıcı bir şey seçebilirsiniz. Çalışma sayfanızda VBA kodundakiyle aynı adı kullanmayı unutmayın.
VBA biçim dizelerinin Excel'in özel biçim dizeleriyle tam olarak aynı olmadığını unutmayın (örneğin, dakikalar boyunca "m" yerine "n" kullanın), ancak çok benzerler. Ayrıntılar için buraya bakın veya MSDN'de "Biçim İşlevi (Uygulamalar için Visual Basic)" için arama yapın. Çeşitli tarih biçimi belirteçlerini görmek için aşağı doğru kaydırın.
Yöntem 2
VBA'yı kullanan, ancak aslında bakımı daha kolay olabilecek başka bir yaklaşım şudur:
- Normal Hücre Biçimi iletişim kutusunu kullanarak istediğiniz tarih biçimini bir hücreye uygulayın. İsterseniz bu hücre gizli bir sayfada olabilir - son kullanıcıya gösterilmesine gerek yoktur. $ A $ 1
yyyymmdd\_hhss
hücresine biçimi uyguladığınızı varsayalım. (alt çizginin gösterildiği gibi çıkması gerektiğini unutmayın).
- Ekle
GetFormat
sizin çalışma kitabındaki bir VBA modülüne (aşağıda gösterilmiştir) işlevini.
=GetFormat($A$1, TRUE)
Başka bir hücreye girin (ör. $ B $ 1 )
- Bu işlev , biçim dizesinin yerelleştirilmiş sürümünü döndürür. Bu nedenle, başlangıçta $ A $ 1 ile biçimlendirmiş olsanız bile
yyyymmdd\_hhss
, çalışma kitabını bir bilgisayarda Fransızca dilini kullanarak açtığınızda (örneğin), işlev gösterilir aaaammjj\_hhss
.
- Şimdi tüm
TEXT
fonksiyonlarınızda ikinci hücreye referans veriniz . Örneğin: =TEXT(F22, $B$1)
.
İşte VBA kodu:
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
Bu, yerelleştirilmiş biçim dizesini almak için başlangıçta biçimlendirdiğiniz hücreyi ($ A $ 1) "incelememizi" sağlar. Bu dize uyguladığınız biçimi temsil eder, ancak TEXT'in yorumlaması için doğru harfleri kullanır (örneğin "d" yerine "j"), böylece tarihlerin görüntülenen değeri tüm yerel ayarlarda sabit kalır. Tüm çalışma kitabınız için yalnızca bir tarih biçimi kullanmak istiyorsanız, 1-4 arası adımları yalnızca bir kez yapmanız gerekir. Ardından, şu anda kullandığınız tüm hücrelerde 5. adımı (TEXT işlevi) tekrarlayın, ancak bir biçimi sabit kodlamak yerine, yerelleştirilmiş biçim dizesini içeren hücreye başvurmanız yeterlidir ( örnek talimatlarda $ B $ 1 ). .
İkinci argümanın GetFormat
, işleve yerelleştirilmiş sürümü (bölgesel ayarlara bağlı olan) veya "standart" sürümü (her zaman en-US tabanlı olan) döndürüp döndürmeyeceğini bildireceğini unutmayın.
İşte bunu daha net hale getirebilecek bazı ekran görüntüleri.
- Şekilde, Sütun 1, farklı formatların uygulandığı tek bir tarihin çeşitli gösterimlerini listeler.
- Satır 2 ve 3'ün Excel'in "sistem varsayılanı" tarih biçimlerini kullandığını unutmayın. (Bunlar, Biçim İletişim Kutusunda önde gelen bir yıldız işareti ile gösterilir ve kullanıcının varsayılan tarih biçiminin kullanılması gerektiğini belirtir.) Ayrıca, 5. satırın ay ve gün adları için kullanılan dili İngilizce olmaya zorlayan köşeli bir LCID kullandığını unutmayın ( farklı dilleri belirlemek için farklı LCID'ler kullanılabilir).
- İkinci sütun,
GetFormat(Cell, FALSE)
sütun 1'deki her hücrenin sonucunu gösterir . ( FALSE
İkinci parametre için işlevin yerelleştirilmemiş formatları döndürmesine neden olduğunu hatırlayın ).
- Üçüncü sütun,
GetFormat(Cell, TRUE)
2. sütundaki her hücre için neyin döndürüldüğünü gösterir (yani yerelleştirilmiş biçimler).
- Dördüncü sütun, orijinal, ham tarih değerini ve 1. sütunda gösterilen biçimi yeniden üretmek için yerelleştirilmiş sonucu kullanan TEXT işlevinin sonucunu gösterir.
GetFormat
Ancak bu sütuna NO sayı biçimlendirmesi uygulandığını unutmayın. Değerler METİN işlevinin doğrudan sonucudur.
Yukarıdaki İngilizce (ABD) davasının sonuçları çok ilginç değil, ancak işletim sistemimin Bölgesel Ayarlarını diğer yerel ayarlara değiştirerek elde edilen aşağıdaki sonuçlarla karşılaştırabilirsiniz. Önemlisi, GetFormat
ile birlikte kullanarak , TEXT
tüm yerel alanlarda sayısal biçimler (gün veya ay adları içermeyen) için sabit bir sonuç tutabileceğimizi unutmayın . Ve dili LCID kullanarak (satır 5'teki gibi) kısıtlayarak gün ve ay adlarını da dahil ederken sabit bir formatı koruyabiliriz.
Bu yöntem çoğu yerel ayar için geçerlidir, ancak Hindu-Arap rakamlarını temsil etmek için kullanılan komut dosyalarının tüm yerel ayarlarda aynı OLMADIĞINA dikkat edilmelidir. Bu nedenle Nepalce (Hindistan) yerel ayarları gibi bölgesel ayarlar, ABD tarihlerinden farklı görünen tarih biçimleriyle sonuçlanacaktır. Ama bunlar aslında sayıların pozisyonları açısından aynı "formatta" - sadece rakamlar için farklı semboller kullanıyorlar.