SSブログ

EXCEL VBA備忘録 ACCESS連携 [EXCEL]

リファレンスはまずはここを見る?
https://docs.microsoft.com/ja-jp/office/vba/api/overview/excel

何と言いますか今更ですが、エクセルVBAをやってみたんですよん。

2019-10-29.png意外と使える!と言うかデータ収集してエクセルにダイレクトにシートやセルに代入できるのは、やはり魅力的なので。

プログラムの観点からエクセルを理解するのは、おもしろいかもしれない!


ACCESS連携
!ACCESSのテーブルを展開する。※クエリでも同じ
  ' データベースを開く
  Dim DBE As Object, DB As Object, buhinRS As Object
  Set DBE = CreateObject("DAO.DBEngine.120")
  Set DB = DBE.OpenDatabase(filePath)  ' filePathはACCESSのデータベースへのファイルパス
  Set buhinRS = DB.OpenRecordset("部品")  ' 部品テーブルを引っ張る
  Dim recordCount As Long
  recordCount = buhinRS.recordCount - 2  ' レコードの数を取得するが、なぜか2多い
  
  '書式再設定 テーブルのフィールドタイプの合わせる
  Worksheets("BUHIN").Range("A2", Worksheets("BUHIN").Cells(recordCount+2, 1)).NumberFormatLocal = "0"
  Worksheets("BUHIN").Range("B2", Worksheets("BUHIN").Cells(recordCount+2, 2)).NumberFormatLocal = "yyyy/mm/dd"
  Worksheets("BUHIN").Range("C2", Worksheets("BUHIN").Cells(recordCount+2, 3)).NumberFormatLocal = "0"
  Worksheets("BUHIN").Range("D2", Worksheets("BUHIN").Cells(recordCount+2, 4)).NumberFormatLocal = "@"
  Worksheets("BUHIN").Range("E2", Worksheets("BUHIN").Cells(recordCount+2, 5)).NumberFormatLocal = "0"
  Worksheets("BUHIN").Range("F2", Worksheets("BUHIN").Cells(recordCount+2, 6)).NumberFormatLocal = "@"
  
  ' フィールド個別にセルに代入していく
  Dim row As Long
  row = 2
  Do Until buhinRS.EOF
    Worksheets("BUHIN").Cells(row, 1).Value = buhinRS(0)
    Worksheets("BUHIN").Cells(row, 2).Value = buhinRS(1)
    Worksheets("BUHIN").Cells(row, 3).Value = buhinRS(2)
    Worksheets("BUHIN").Cells(row, 4).Value = buhinRS(3)
    Worksheets("BUHIN").Cells(row, 5).Value = buhinRS(4)
    Worksheets("BUHIN").Cells(row, 6).Value = buhinRS(5)
    
    row = row + 1
    buhinRS.MoveNext
  Loop

  buhinRS.Close
  Set buhinRS = Nothing
  DB.Close
  Set DB = Nothing

!データの並び替え
データベースとは関係ないが、どちらかと言えば人間が見やすくする為にレコードの並び替えをする。
  ' データソート
  Worksheets("BUHIN").Range("A2", Worksheets("BUHIN").Cells(row, 6)) _
    .Sort Key1:=Worksheets("BUHIN").Range("C1"), order1:=xlAscending

!検索
並び替えの次は検索でしょう!Rangeで範囲指定しないと、トンでもな結果になる。すごく悩んだ。
codeが検索したい文字
  Dim Obj As Object
  Set Obj = Worksheets(sheet).Range("C2", Worksheets(sheet).Cells(downCell.row, 2)).Find( _
        After:=Worksheets(sheet).Range("C2"), _
        What:=code, _
        LookIn:=xlValues, _
        LookAt:=xlWhole, _
        SearchOrder:=xlByColumns)
  
  If Obj Is Nothing Then
  ' 見つからなかった時の処理
  Else
  ' 見つかった時の処理
  End If


以下、順次追加

今読んでいる本

Excel VBAの教科書 (Informatics & IDEA)

Excel VBAの教科書 (Informatics & IDEA)

  • 作者: 古川 順平
  • 出版社/メーカー: SBクリエイティブ
  • 発売日: 2018/07/21
  • メディア: 単行本



気になっている本

パーフェクトExcel VBA (PERFECT SERIES)

パーフェクトExcel VBA (PERFECT SERIES)

  • 作者: 高橋 宣成
  • 出版社/メーカー: 技術評論社
  • 発売日: 2019/11/25
  • メディア: 単行本(ソフトカバー)



nice!(0)  コメント(0) 

nice! 0

コメント 0

コメントを書く

お名前:[必須]
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

※ブログオーナーが承認したコメントのみ表示されます。

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。