Cuma, Aralık 30, 2011

Excel de bikaç hareket (Visual Basic Reloaded)


Öyle zamanlar vardır ki, şartlar ve dış etkenler veya başka bir sebepten dolayı, son model teknolojik ürünler bir kenara bırakılmalıdır. Babadan kalma revolver saklandığı naftalinli çeyiz sandığından çıkartılmalı ve temizlenip yağlanmalıdır. Web programlama, ajax, oop, rdbms konseptlerinden uzakta, eski bir dostun hatırasında bulunur aranan çözüm. Bu gibi durumlarda Excelde atılabilecek birkaç takla aşağıda.


---------------------------------------------------------

B kolonunda büyütülebilen bir araba listesi tanımlama

Formula->Define Name

Name
Arabalistesi

Refers To
=OFFSET(Sheet1!$B$2,0,0,COUNTA(Sheet1!$B:$B),1)

---------------------------------------------------------

Araba listesini listbox yapma

Data-Data Validation

Allow
List

Source
=Arabalistesi

---------------------------------------------------------

Listedeki belli değerlerin formatını değiştirme

Home->Conditional Formatting->Manage Rules-New Rule

Format Only Cells that contain

Cell value equal Honda

Format = rengi kırmızı yap

---------------------------------------------------------

İlan tarihine göre (I kolonu) tüm sheeti (1:1048576) otomatik sort etme

Alt-F11 (Visual Basic Editor)
Ctrl-R Project Explorer
double-click Sheet1 (kod penceresini açar)
Aşağıdaki kodu yapıştırıp macro enabled bir formatta kaydet


Private Sub Worksheet_Change(ByVal Target As Range)
If Not (Application.Intersect(Worksheets(1).Range("I:I"), Target) Is Nothing) Then
DoSort
End If
End Sub

Private Sub DoSort()
Worksheets(1).Range("1:1048576").Sort Key1:=Worksheets(1).Range("I:I"), Order1:=xlAscending, Header:=xlYes
End Sub


Yukardaki macroda Worksheets(1) yerine sheet code name i kullanmak için project explorerdaki ilgili sheet'in name alanındaki value değiştirilip bu kullanılabilir. Range içinde de "I:I" yerine ilgili kolonu Name Manager da tanımlayıp bu kullanılabilr. Böylece sheet adının ve yerinin değişmesinden veya colonların yerinin değişmesinden etkilenmez.

ArabalarSheet.Range("ilan_tarihleri")




---------------------------------------------------------

soldan ve üstten column ve row ları sabitleme
kesişim hücresini seç -> View -> Freeze Panes


---------------------------------------------------------

Aynı plaka (B kolonu) için iki ayrı satır girmeyi engellemek
Data-Data validation

Allow
Custom

Formula
=COUNTIF(B:B,B1)<2