Accessは未体験に近いため、ExcelからDBにDAO(ADOが未体験)で接続して、
シートに書き出す方法を取ってみました。
DBのパス名・DB名及びテーブル名はこちらのテスト環境の
ままです。
同一IDの最大設定は20になってます。
Sub test()
'「参照設定」で [Microsoft DAO 3.x Object Library] を参照します。
Dim mdb As DAO.Database
Dim mrs As DAO.Recordset
Dim Dic As Object
Dim i As Long, j As Long, cou As Long
Dim st As String
Dim v, vv
Application.ScreenUpdating = False
Set Dic = CreateObject("Scripting.Dictionary")
Set mdb = OpenDatabase("R:\db1.mdb")
Set mrs = mdb.OpenRecordset("aaa", dbOpenTable)
If mrs.EOF Then
MsgBox ("データはありません")
Exit Sub
End If
ReDim v(1 To 20, 1 To mrs.RecordCount)
ReDim vv(1 To mrs.RecordCount)
With Worksheets("Sheet1")
.Cells.ClearContents
mrs.MoveFirst
For cou = 1 To mrs.RecordCount
st = Trim(mrs.Fields(0))
If Not Dic.exists(st) Then
j = j + 1: vv(j) = st
v(1, j) = mrs.Fields(1)
Dic(st) = Array(1, j)
Else
i = Dic(st)(0) + 1
v(i, Dic(st)(1)) = mrs.Fields(1)
Dic(st) = Array(i, j)
End If
mrs.MoveNext
Next
ReDim Preserve v(1 To 20, 1 To Dic.Count)
ReDim Preserve vv(1 To Dic.Count)
.Range("A2").Resize(Dic.Count, 1).Value = Application.Transpose(vv)
.Range("B2").Resize(Dic.Count, 20).Value = Application.Transpose(v)
.Range("A1").Value = "ID"
With .Range("A1").Offset(, 1).Resize(, .Range("A1").CurrentRegion.Columns.Count - 1)
.Value = "=""名前 "" & column()-1"
.Value = .Value
End With
mrs.Close
mdb.Close
Set Dic = Nothing
End With
Application.ScreenUpdating = True
End Sub
# 参照設定に注意願います。
Excel及びAccessはXP、DBはAccess2000形式でテストしました。
ご参考になるかどうか・・・
補足
>ExcelからDBにDAO(ADOが未体験) プログラムはやったことがないので意味がわからないのすが・・・ どういう意味ですか? ExcelからデータベースをDAO形式で呼び出すということでしょうか・・・ 初歩的なことが分からなくてスミマセン^^;