DOSYA İndirmek/Yüklemek için ÜCRETLİ ALTIN ÜYELİK Gereklidir!
Altın Üyelik Hakkında Bilgi
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim d, son As Long, i As Byte, dizi(), s As Byte
son = Cells(Rows.Count, "E").End(xlUp).Row
If Intersect(Target, Range("F2:F" & son)) Is Nothing Then Exit Sub
With Target
If .Count > 1 Then Exit Sub
.Validation.Delete
d = Split(Cells(.Row, "E"), ",")
For i = 0 To UBound(d)
ReDim Preserve dizi(s)
dizi(s) = d(i)
s = s + 1
Next i
.Validation.Add Type:=xlValidateList, Formula1:=Join(dizi, ",")
End With
End Sub
Merhaba,
Sayfanın kod bölümüne kopyalayın.
Kod:Private Sub Worksheet_SelectionChange(ByVal Target As Range) Dim d, son As Long, i As Byte, dizi(), s As Byte son = Cells(Rows.Count, "E").End(xlUp).Row If Intersect(Target, Range("F2:F" & son)) Is Nothing Then Exit Sub With Target If .Count > 1 Then Exit Sub .Validation.Delete d = Split(Cells(.Row, "E"), ",") For i = 0 To UBound(d) ReDim Preserve dizi(s) dizi(s) = d(i) s = s + 1 Next i .Validation.Add Type:=xlValidateList, Formula1:=Join(dizi, ",") End With End Sub
Function MultipleLookupNoRept(Lookupvalue As String, LookupRange As Range, ColumnNumber As Integer)
'Updateby Extendoffice
Dim xDic As New Dictionary
Dim xRows As Long
Dim xStr As String
Dim i As Long
On Error Resume Next
xRows = LookupRange.Rows.Count
For i = 1 To xRows
If LookupRange.Columns(1).Cells(i).Value = Lookupvalue Then
xDic.Add LookupRange.Columns(ColumnNumber).Cells(i).Value, ""
End If
Next
xStr = ""
MultipleLookupNoRept = xStr
If xDic.Count > 0 Then
For i = 0 To xDic.Count - 1
xStr = xStr & xDic.Keys(i) & ","
Next
MultipleLookupNoRept = Left(xStr, Len(xStr) - 1)
End If
End Function
Örnek dosya ekleyerek açıklayınız.
Dosya Yükle - Dosya Upload
Dosyalarınızı ücretsiz yükleyebilir ve paylaşabilirsiniz. Dosya yükleme, Dosya Upload ücretsiz.dosya.co
Hocam e ye koyduğum formül yerine e ye direk açılır liste halinde gelse mükemmel olur.2 defa işlem yapmamış oluruz.Aradaki E sütunu duracak mı?
evet hocam listeyi direkt ekletebilirsek o sütuna gerek kalmayacak.Ondan sonraki sütunlar önemli değil zaten yeniden yapabilirim.Bu durumda F sütunu silinecek sanırım..
Option Explicit
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim S1 As Worksheet, Dizi As Object
Dim Veri As Variant, Son As Long, X As Byte
Set S1 = Sheets("Kanepe Veriler")
Set Dizi = VBA.CreateObject("System.Collections.ArrayList")
Son = S1.Cells(S1.Rows.Count, "B").End(xlUp).Row
If Intersect(Target, Range("D2:E" & Rows.Count)) Is Nothing Then GoTo 10
If Target.Count > 1 Then GoTo 10
If Application.CutCopyMode = xlCopy Or Application.CutCopyMode = xlCut Then GoTo 10
With Cells(Target.Row, "E")
.Validation.Delete
Veri = S1.Range("B2:H" & Son).Value
For X = LBound(Veri, 1) To UBound(Veri, 1)
If Cells(.Row, "D") = Veri(X, 1) Then
If Not Dizi.Contains(Veri(X, 4)) Then Dizi.Add Veri(X, 4)
End If
Next
If Dizi.Count > 0 Then
Dizi.Sort
.Validation.Add Type:=xlValidateList, Formula1:=Join(Dizi.ToArray, ",")
End If
If Not Dizi.Contains(.Value) Then .ClearContents
End With
10
Set S1 = Nothing
Set Dizi = Nothing
End Sub
Sub Makro1()
say = Cells(Cells.Rows.Count, "A").End(3).Row
For i = 1 To say
yaz = yaz & Range("A" & i).Value & ","
Next
Range("G1").Select
With Selection.Validation
.Delete
.Add Type:=xlValidateList, Formula1:=yaz
End With
End Sub
Merhaba,
Dosyanızda aradaki E sütunu sildikten sonra aşağıdaki kodu sayfanızın kod bölümüne uygulayıp deneyiniz.
Kod ek olarak doğrulama listesini alfabetik olarak sıralamaktadır.
C++:Option Explicit Private Sub Worksheet_SelectionChange(ByVal Target As Range) Dim S1 As Worksheet, Dizi As Object Dim Veri As Variant, Son As Long, X As Byte Set S1 = Sheets("Kanepe Veriler") Set Dizi = VBA.CreateObject("System.Collections.ArrayList") Son = S1.Cells(S1.Rows.Count, "B").End(xlUp).Row If Intersect(Target, Range("D2:E" & Son)) Is Nothing Then GoTo 10 If Target.Count > 1 Then GoTo 10 If Application.CutCopyMode = xlCopy Or Application.CutCopyMode = xlCut Then GoTo 10 With Cells(Target.Row, "E") .Validation.Delete Veri = S1.Range("B2:H" & Son).Value For X = LBound(Veri, 1) To UBound(Veri, 1) If Cells(.Row, "D") = Veri(X, 1) Then If Not Dizi.Contains(Veri(X, 4)) Then Dizi.Add Veri(X, 4) End If Next If Dizi.Count > 0 Then Dizi.Sort .Validation.Add Type:=xlValidateList, Formula1:=Join(Dizi.ToArray, ",") End If If Not Dizi.Contains(.Value) Then .ClearContents End With 10 Set S1 = Nothing Set Dizi = Nothing End Sub
Hocam herhangi bir yere tıkladığımda bu şekilde bir hata alıyorum
Debug dediğimde ise aşağıdaki kod sarı gözüküyor.
Acaba referanceden birşeyler mi seçmek gerekli?
Set Dizi = VBA.CreateObject("System.Collections.ArrayList")
Kodu Sayfa1 (Kanepe Giriş) e ekliyorum.
Hocam tekrar rahatsız edicem fakat şimdi şöyle birşey oldu.Sisteminizde yüklüdür diye düşünerek belirtmemiştim... Siz zaten olayı çzömüşsünüz. Tebrikler..
Hocam orası dolu fakat ben şunu kastediyorum.Doğrulama listesinin oluşması için D sütununun dolu olması gerekiyor. Yani ilk seçiminize göre E sütunundaki doğrulama listesi oluşuyor.
Çok yordum sizi hakkınızı helal edin.Haklısınız. Orada kafam iyice dağılmış..
Üstte paylaştığım kodu revize ettim. Tekrar deneyiniz.