Ben sorumun cevabını buldum. Belki başkaları da faydalanır diye yazayım dedim.

öncelikle formumuza bir datalist1 ekliyoruz.
ve datagrid1'in buttonclick olayına aşağıdaki kodu yazıyoruz.


Private Sub DG1_ButtonClick(ByVal Colindex As Integer)

With Adodc2 ' önce ado nesnemize veritabanını gösterip çalışır hale getiriyoruz.
.ConnectionString = "provider=microsoft.jet.oledb.4.0;data source=" & App.Path & "\DB1.mdb"
.RecordSource = "select distinct Alan1 from Tablo where Alan1<> 'is not null' order by Alan1"
.Refresh
End With

With DataList1 'şimdide datalist1 imizin datasource'ünü set ediyoruz ve de devamını
Set .DataSource = Adodc2
Set .RowSource = Adodc2
.DataField = "malno"
.BoundColumn = "malno"
.ListField = "malno"
End With

With DataGrid1
If Colindex = 0 Then ' Eğer datagridin ilk sütununa tıkladığımız da listemiz açılsın istiyosak
DataList1.Top = .Top + .RowTop(.Row) + .RowHeight 'listemizin tepe noktasını hücreyle aynı yap
DataList1.Left = .Left + .Columns(Colindex).Left 'listemizin solkenar hizasını hücrenin solkeneri ile aynı yap.
DataList1.Width = .Columns(Colindex).Width 'listemizin genişliğini hücre genişliği ile eşitle
DataList1.Height = 800 'listenin yüksekliğini ben 800 yaptım siz ne kadar görmek isterseniz öyle ayarlayın.
DataList1.Visible = True ' listemiz göründü

If DataList1.Visible Then
DataList1.Text = .Text
DataList1.ZOrder ' göründüğünde üste olsun


End If
End If
End With
End Sub

Tabii ki, DataList1 formumuz çalıştığında visible=false olmalı
ve

Private Sub DataList1_Click()
DataGrid1.Text = DataList1.Text
DataList1.Visible = False
End Sub

Private Sub DataList1_LostFocus()
datalist1.visible = False
End Sub

Dahada geliştirmesi size kalmış.