投稿

1月 21, 2024の投稿を表示しています

Translate

MicrosoftはExcelのVBAを終了させに掛かっているかもしれないと思う理由

イメージ
VBSを非推奨アナウンスはVBAも視野に入れたアナウンスなのかもしれない 先月の11月位から、Excelのアップデート毎に、割と複雑な処理を持っているExcelのVBAにて、今まで通りの正常処理が行えないトラブルが増えている。 Onedriveが起因するトラブルは度々起きているが、それ以外のトラブルも増えてきた。 そういえば昨年の10月から、VBS(Visual Basic Script)が非推奨となった。 レガシーVBの生き残りは、後はVBAのみとなった。 しかし、VBAは、Excelではおまけでついているような機能だとして、ACCESSではVBAでの実装がほぼメインであり、こちらまで非推奨になる事は無いとは思いたいが、そもそもレガシーVBを今から習得する若者も、市場シェア的には随分減ってきている。 最近のEXCELでのVBAの挙動がおかしくなる件は、EXCELマクロをMicrosoftが終了させてがっているのかもしれない。 最近は、自動化ツールでの代用や、Asteria、Dataspiderといったノーコード、ローコードを代わりに使用する現場も増えている。 Excelマクロを使用する理由は今や、ITに予算を掛けたくない企業と、個人の為にだけある機能となってきているのかもしれない。 VBAだけを軸にやっていこうと考えている人は、少しだけ軸の調整も検討した方が良さそうだ。 TIOBE INDEXでも示している通り、コードで実装するならシェアが増加中のC#を選択するのが良いのは一目瞭然だが、ノーコード、ローコードを組み合わせるのもマクロ処理の代わりとなるので、Excel以外でのデータ処理も視野にそちらに軸をずらすとどちらの案件も拾っていけそうではある。

Excel-VBAのADOでデータベーステーブルの内容をForを使わずに一括する転記する方法

イメージ
Recordsetの内容をFor分で回さずにシートへ反映する 例:ACCESSファイルのテーブル情報を取得して一括でEXCELへ反映させる 使用するACCESSファイルには下記のような商品マスターテーブルがある これをExcelのVBAからADOでデータ取得し、下記のように用せずに一括で反映させる。 使用するADOのバージョンは迷いがちだが、今ではすっかりOFFICE365のExcelを使用している企業が殆なので、古いバージョンの事は余程配慮が必要でなければ、【Microsoft ActiveX Data Object 6.1 Library】を選択すれば良いだろう。 稀に、32ビット版をまだ使用している場合は【Microsoft ActiveX Data Object 2.8 Library】を使用する事になる。 SQLでデータを取得し、Excelのワークシートへ一括反映させるコードのサンプルは下記となる。 Dim sql_con As New ADODB.Connection Dim sql_rs As New ADODB.Recordset sql_con.Open "Provider=Microsoft.ACE.OLEDB.16.0;Data Source=P:\OneDrive\Download\test\test.accdb" Set sql_rs = sql_con.Execute("SELECT * FROM 商品マスター") Range("A1").CopyFromRecordset Data:=sql_rs sql_rs.Close sql_con.Close Set sql_rs = Nothing Set sql_con = Nothing Rangeが持つCopyFromRecordsetメソッドで、指定したセルから、一括で表形式でデータベースから取得した内容を反映させる事が出来る。 EXCELのVBAでデータベースを取得してか