No.3ベストアンサー
- 回答日時:
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形式で呼び出すということでしょうか・・・
初歩的なことが分からなくてスミマセン^^;
No.5
- 回答日時:
>ExcelからデータベースをDAO形式で呼び出すということでしょうか・・・
>初歩的なことが分からなくてスミマセン^^;
DAOでデータを取得する。
http://www.asahi-net.or.jp/~ef2o-inue/vba_o/sub0 …
上記に書かれているような内容です。
なにぶん、Accessは立ち上げて少々触った程度のレベルでして、
Excelにコピペして並べ替えるのならば、こんな感じかな?と
思いました。
VBAの編集画面
http://t_shun.at.infoseek.co.jp/My_Page/Excel-VB …
新規Bookの、ツール>マクロ>Visual Basic Editorをクリックして
画面を呼出します。
左側のプロジェクトエクスプローラーのVBAProjectで右クリック、
挿入>標準モジュールで出てきた画面にコードをコピペ
(一部修正)して、参照設定に注意(1番目のリンク先参照)して
VBA画面を閉じます。
Excelの、ツール>マクロ>マクロをクリック。
マクロ名testを選択してOK。
こんな感じです。
ExcelのDAOに関してですが検索すればすぐに関連することが出てきますね。
時間が無いのでVBAのすべてを勉強することは出来ないかもしれませんが、概要程度は勉強しておこうと思います。
とても助かりました。
ありがとうございます。
No.4
- 回答日時:
DBのパス名・DB名及びテーブル名はこちらのテスト環境の
ままです。
Set mdb = OpenDatabase("R:\db1.mdb")
Set mrs = mdb.OpenRecordset("aaa", dbOpenTable)
Rドライブ直下のdb1.mdb
テーブル名:aaa
同一IDの最大設定は20になってます。(最大項目数)
ReDim v(1 To 20, 1 To mrs.RecordCount)
ReDim Preserve v(1 To 20, 1 To Dic.Count)
.Range("B2").Resize(Dic.Count, 20).Value = Application.Transpose(v)
項目数が多い場合には、20を変更して下さい。
Set Dic = Nothing の次に
Erase v, vv '←追加願います
No.2
- 回答日時:
この回答への補足
ありがとうございます。
過去ログで似たような質問があったのですね。
私の検索の仕方が甘かったようで助かりました。
クロス集計で確かに横列にできたのですが、以下のようになってしまいます。
ID 1 2 3 4
1熊猿
2 羊山羊
IDの数が増えるごとにフィールドの増えてしまうのですが・・・
私のやり方が悪いのでしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルからアクセスのテーブ...
-
accessのセキュリティ
-
Vbaでアクセスからエクセルにリ...
-
Excel 2019 のピボットテーブル...
-
エクセルVBAで5行目からオート...
-
Accessでテーブル名やクエリ名...
-
Accessでテーブルの値をテキス...
-
Access テキスト型に対する指定...
-
Accessのフィールド数が255しか...
-
Accessで、固定アルファベット+...
-
セルの右クリックで出る項目を...
-
Accessでコードを入れると名前...
-
ACCESSのクエリで集計で、先頭...
-
「直需」の意味を教えてください
-
AccessのクエリをExc...
-
SUBSTRING 関数に渡した長さの...
-
ファイルメーカーでCountifの様...
-
Accessの追加クエリで既存のテ...
-
2つのテーブルを比較して一致し...
-
アクセス エラーを数値「0」に...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Vbaでアクセスからエクセルにリ...
-
エクセルからアクセスのテーブ...
-
Accessにてリンクテーブルの削...
-
accessのセキュリティ
-
Accessのマクロ
-
アクセスのファイルが重くて保...
-
エクセルからアクセスへADO...
-
access2010のruntimeについて
-
Excel 2019 のピボットテーブル...
-
エクセルVBAで5行目からオート...
-
「直需」の意味を教えてください
-
Accessでテーブル名やクエリ名...
-
Oracle 2つのDate型の値の差を...
-
Access テキスト型に対する指定...
-
Accessでテーブルの値をテキス...
-
セルの右クリックで出る項目を...
-
作番ってどういう意味でしょうか?
-
Accessでコードを入れると名前...
-
Accessのフィールド数が255しか...
-
変数が選択リストにありません
おすすめ情報