2024年6月22日土曜日

VBAをオワコンと認識すると、ウインドウズを否定することになると言うお話なのである ー 参照設定とADO(VBAマクロ)

      
未だに、エクセルでVBAを使いこなしているおじさんのお話と思ってください。
最近では、RPAとかノーコードアプリの導入が、もてはやされる時代なのです。

職場も、アップルの”i-Pad”に、”i-reporter”をインストールして使われている。
プログラムの組み方自体は、シート上のセル関数を利用していてマクロはダメ。

それで、操作できる人に、IF関数の中にIF関数の入れ子が可能か聞いていみた。
やったことがないから分からないという、腑抜けた回答で使い方は底辺らしい。

まあ、社内の手製はそんなものかと思う一方、VBAが劣っているとも思えない。
要するに、VBAコードが書ける人間が社内にいないから、毛嫌いされるだけか。

そんな風に思いますが、実はVBAってWindowsのDLLファイルを使えるのです。
このファイルは、OSのプログラムファイルの一つで、必須の要素になっている。

様々に利用される汎用性の高い機能を収録した、部品化されたプログラムだな。
ファイル拡張子が「.dll」なのでDLLファイルと呼びますが、VBAでも使うのだ。

ということは、VBAをオワコンというのなら、Windowsもオワコンなのだろう。
個人的には、クロームOSは、操作性でスマホやタブレットでしか見ていないの。

まあ、この先もWindows11を使い続けるつもりですが、この参照設定が秀逸だ。
特に、データベース言語のSQLを引用して、抽出検索することが高速できます。

これが、ADOを活用したcsvファイルの高速読み込みですが、業務でも使用中。
以前の投稿では、項目名のヘッダーが無くても自動割り振りが可能と紹介した。

これに、抽出したい項目だけを選び、その項目から検索までできてしまう分け。
というわけで、そういった使いやすいテクニックを、あえて紹介しておきます。

サンプルコードをあげておきますので、使い道のメリットはあるはずでして、VBAはオワコンだと言う人間は、ウインドウズまで否定しているので、クロームのOSで仕事をしておればよい、と思ってしまうのでした。

※サンプルコード
Private Sub ReadCsv() 'ADODBでヘッダータイトル無しから列指定の読み込み
Dim objCn As New ADODB.Connection, objRS As ADODB.Recordset
Dim i As Long, strSQL As String, strFle As String
   With objCn  'CSVへのコネクション初期設定
     .Provider = "Microsoft.ACE.OLEDB.12.0"
       .Properties("Extended Properties") = "Text;HDR=NO;FMT=Delimited"
   'HDR=NO → 列タイトルがないと、FでIDが振られる
    .Open ThisWorkbook.Path  ' 'このブックパス指定。別は””でフルパス指定
   End With
     strSQL = ""   'SQL文作成
      strSQL = strSQL & " SELECT F4, F14, F17, F28"
  '列タイトル無し。抽出に必要なF番号のIDを列挙
        strSQL = strSQL & " FROM ["
           strSQL = strSQL & ”ここに”csvファイル名"
             strSQL = strSQL & "] "
                strSQL = strSQL & "WHERE F14 LIKE '%樹脂製計量カップ%' 
      '= '樹脂製計量カップ' でも同じ 
                    strSQL = strSQL & ""
    Set objRS = New ADODB.Recordset  'SQLを実行しレコードセット取得
       Set objRS = objCn.Execute(strSQL)
    With ThisWorkbook.Worksheets(1)
        .UsedRange.ClearContents
        For i = 0 To objRS.Fields.Count - 1 '1行目に見出しの出力
            .Cells(1, i + 1) = objRS.Fields(i).Name
        Next
        .Range("A2").CopyFromRecordset objRS 'レコードセット一括出力
    End With
      objCn.Close
         Set objRS = Nothing
             Set objCn = Nothing
End Sub



いいねと思ったら、三つポチっとね!
にほんブログ村 スキースノボーブログへにほんブログ村 スキースノボーブログ スキーへにほんブログ村 旅行ブログ 旅日記・旅の思い出へ
にほんブログ村    にほんブログ村      にほんブログ村 



0 件のコメント:

コメントを投稿