[Excel] 抽出条件にセル値を使うには?
記事内容:[Excel]
外部データ取り込みでアクセスのデータを取り込むのですが、
抽出条件にセルの値を利用したいのですが、マクロの記述
はどうすればよいのでしょうか。
アクセスデータ
製品番号 名称 型式 個数 金額 ・・・・
550022AA せっけん SEKKENN 1 5000
550023AB シャンプー SYANNPUU 1 6500
550024SB リンス RINNSU 1 5000
550025AA ブラシ BURASHI 1 3000
A1セルに「550024」があります
A1セル値で始まる製品番号のデータを抽出したいのです。
LIKE Range("A1").Value &"%"
マクロの記述をどのようにすればよいか教えて下さい。
よろしくお願いします。
http://www16.plala.or.jp/ysakuda/
抽出とは具体的にどこにどうしたいのでしょうか?
マクロではなく データ⇒オートフィルタ でA列のフィルタ条件で
5500024 で始まる
で済むと思いますが?
また、どうしてもマクロでやる場合、ループの作り方などはお分かりなんでしょうか?
1つのエクセルファイルをひな形としてファイル名を作り、上記例でいくと
550022.XLSから連番でひな形のコピーを作ります。
A1のセルにファイル名を取得しておけばA2セル位置に外部データとし
て取り込むことでファイル毎に抽出条件を変更しなくてもファイル名が
抽出条件にできるようにしたいからです。
抽出条件に直接入力すれば簡単ですが、それは作るファイル数が少
なければそうしてもよいと考えますが、ファイル数が多いため手間を省い
て手動によるミスを防ぎたいのです。
http://www16.plala.or.jp/ysakuda/
手動処理ではやりたくない事情は分かりましたが、何をなさりたいのか
今一つ分かりませんので整理させてください
1.Accessデータを外部データの取り込みでExcelシートに取り込んであり、
それをコードグループ毎にExcelブックに分けて保存したい
2.AccessDBから直接コードグループ毎のデータを抽出してExcelブックに
落としたい
また、この場合ExcelでやろうとしているのかAccessでやろうとしているのか?
#私はAccessのマクロは全く分かりません
DBがORACLEで作られたソフト(以下DK)があり、EUCが含まれているの
でACCESSを使ってリンクテーブルを作成します。
リンクテーブルから全レコードを対象に必要なフィールドのみをクエリにて一
覧を作っておきます。・・・「A」
EXCELにて「データ」-「外部データの取り込み」-「新しいデータベースク
エリ」を行い、「A」をリンクでEXCELに貼ることができます(知ってますよね)
[A」をそのまま貼ると全レコードが対象となってしまうので、EXCELのファイル
名を取得したセル(「A1」とします)の値を抽出条件として「A」を取り込めば
全レコード中の1件が対象となります。
注)抽出条件としているフィールドは主キーのため重複がないため
「A」はセル位置「A2」で取り込むと欲しいデータは3行目に横に並びます。
このリンクさせたSHEETを取り込み用SHEETとして別SHEETにリンクで貼り付ければ、DKを更新すればEXCEL内のデータを自動更新することができ
ます。
流れとしては上記ですが、やりたいことは大本となるソフト(DK)を更新する
だけでEXCEL側も更新したいのです。
http://www16.plala.or.jp/ysakuda/
えーと、前に申し上げた通り私はAccessは全くだめで、以前Accessデータを
始末したときも、とりあえずテーブルをExcelにエクスポートしてすべてExcel
でやったような状態です(^^;
ということですので、下はExcelでデータベースを作成し、それをADOで
読み込む形を取ってますが、ファイル名をAccessDBに変更し、シート名を
テーブル名に変更すれば、多分動くのではと思います・・・・
ADOやSQL自体も身の周りの世話はできると言う程度ですので怪しげ
ですが参考まで。
前提:
1.Excelブックと同じフォルダにDBファイルが存在する
2.キーは"製品番号"
3.ExcelブックのSheet1のA1に製品番号 550022等が存在
4.Sheet2にDBを読み込み展開する
(Excelではフィールド名も読み込めてます)
Sub AdoTest()
Dim CN As Object, RS As Object
Dim wAry, wKey As String, wFld As Variant, I As Long, J As Long
Set CN = CreateObject("adodb.connection")
wKey = Worksheets("Sheet1").Range("a1")
With CN
.Provider = "Microsoft.Jet.OLEDB.4.0"
.ConnectionString = "Data Source=" _
& ThisWorkbook.Path & "\テストDB.xls;" _
& "Extended Properties=Excel 8.0;"
.Open
End With
Set RS = CreateObject("ADODB.Recordset")
RS.Open "Select * from [Sheet1$] Where 製品番号 Like '" & wKey & "%'", CN
Worksheets("Sheet2").Cells.ClearContents
Do Until RS.EOF
With Worksheets("sheet2")
J = J + 1
If J = 1 Then
I = 0
For Each wFld In RS.fields
I = I + 1
.Cells(J, I) = wFld.Name
Next
J = J + 1
End If
I = 0
For Each wFld In RS.fields
I = I + 1
.Cells(J, I) = RS(wFld.Name)
Next
End With
RS.movenext
Loop
RS.Close: Set RS = Nothing
CN.Close: Set CN = Nothing
End Sub
ありがとうございます。
上記を手がかりにがんばってみます。
ありがとうございました
http://www16.plala.or.jp/ysakuda/
余計なお世話ですが、私のコード試すのなら、一度Excelブックをデータベースと
みなして動くの確認してからAccessに焼きなおすことをお勧めします。
GoodLuck!
y sakuda様
できました!ありがとうございました。
1.EXCELで一度外部データ取り込みを行い、マクロ記録にて抽出条件を
入力して再実行したマクロを作る。・・・「A」
取込先はSheet1のA2セル
2.「A」を編集として、先頭に
Dim wAry, wKey As String
Sheets("Sheet1").Select
wKey = Worksheets("Sheet1").Range("A1")
Range("A2").Select
を付加
3.Withで始まる構文の中に抽出条件となる Like~ があるので
Like '" & wKey & "%'
に変更。
4.あとは好みでカスタマイズ。
- Microsoft Excel FAQ
- Microsoft Office Users Forum過去ログ
コメント
※技術的な質問はMicrosoftコミュニティで聞いてください!