So-net無料ブログ作成
EXCELマクロ ブログトップ
前の20件 | -

VBA内でのソフトウェアタイマー [EXCELマクロ]

以前にEXCELのマクロにてIDFデータの置換をして出力する場面で時々エラーとなりました。
原因は2つのファイルのうち、二つ目を書き込む時にまだ前のファイルが書き込み中だった
からです。
HDDの場合やファイルサイズが大きい場合は時間が掛かるのでそういうことになります。

SSDばかり使用しているとそれを検証できないのでソフトウェアタイマーを使用することに
しました。

下記のように1秒を追加できます。
2つの書き込み処理の間に入れました。

Application.Wait Now + TimeValue("00:00:01")

PIK_TB_R03.xlsmにもこれを採用しています。
しかし、厳密に1秒という訳ではなさそうで約1秒のようです。
CPUクロックを積み重ねる別の関数であればmsオーダーとなるようです。


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

PIK_TB_R*.xlsm [EXCELマクロ]

CSV形式のピックアンドプレースファイルを読み込んで、LayerがTopとBotの2つに
分けて同じパス内に*.PIKで別名保存します。
以前からDelphiスクリプトでは2つに分けるものはあったので気になっていましたが、やっと
自社用にプログラミングできました。

更にBot側のデータは指定した値で引き算を行うことでミラー反転したような座標データにできます。
(BOT側の情報をBOT面視し、基板右などのX側のオフセット値で処理します。)
ただし、AD16以下は未対応です。

併せて座標を小数第3位で丸め、部品の回転角度Rotationが360度の場合は0度にします。
  
AD16までとAD17、AD18とはフォーマットが異なりますがそれを同じフォーマットになるように
処理します。

VBA_B6b.jpg


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

回路図の座標と部品配置のリンク [EXCELマクロ]

回路図が「Altium Designer」または「Orcad」の場合はそのREF番号の座標を
レポートファイルとして出力してEXCELのマクロで処理して部品配置に利用しています。
「Orcad」の場合は、「Altium Designer」に変換してから同様の処理をしています。
その配置に利用するのはピックアンドプレースファイルで「Altium Designer」に
インポートすることで再配置します。

1ページの場合はSCH-PCBの相対関係にするのは簡単ですが、複数のページの場合は
厄介です。
レポート出力時にそのページも出力して資料にしています。

具体的にはSCHのA2サイズを想定してその座標を左下基準で1/2倍に縮小しています。
各ページの間には間隔を空けるようにオフセット処理をしています。
「Altium Designer」は約2500cm x 2500cm のワークサイズなので1ページを
500cm間隔で配置すると5x5の25ページとなります。
しかし、左下の部分はワークエリアとして取って置くために空きにしています。
という訳で24ページまでの対応です。
これ以上の場合は回路図をアレンジして処理することになるでしょう。
まだ、そういうページ数には遭遇していません。

それを図にするとこのようになります。

SCH_PCB_MAC_Work.png

最初は5ページ以上ならこのマクロを使用していましたが、その手順に慣れると
1、2ページぐらいでも一瞬に処理できるのでもう元の手順には戻れません。


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

PCBLIB内のフットプリント関連マクロ [EXCELマクロ]

フットプリントがどのPCBLIB内にあるかを検索するマクロです。
以前に作成していたもの忘れて新たに作成してしまったので機能アップしたことになりました。

ただ、このマクロだけでは動作しません。
事前に複数のPCBLIBを含む親フォルダを指定してCSV出力する弊社のDelphiスクリプトを
動作させて*.CSVファイルを生成しておく必要があります。
(前出のこちらの記事をご覧ください。)

このファイルをEXCELマクロで読み込んでセルの幅を調整して表示させています。
表示させたデータ内をCTRL+Fとは別の自前の検索フォームで検索させます。


PCBLIB_SER_Macro.png

続きを読む


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

部品表のチェックにEXCELマクロを利用 [EXCELマクロ]

以前にも触れましたが顧客から支給されるPDFやEXCELでの部品表は
手動で処理した場合は間違いやネットリストとの矛盾がある場合があります。

弊社では下記の手法でチェックをしています。
1.PDFなどの場合は型番やREF番号などの各列をネットリストを生成できる
 マクロに決まった順番の場所に貼り付けて部品情報だけのネットリストを生成します。

2.ネットリスト同士をチェックするマクロに1.で生成したネットリストと
 支給されたネットリストの両方を読み込んで型番を比較します。
 型番で微妙に異なった部分が赤や青色に変化するのでそれを修正または
 顧客に知らせて判断をします。

 型番が大幅に異なる場合は厄介ですが、それを考慮して置換テーブルも用意して
 あるのでそれで片側を差し替えての比較も可能なので大きな違いはでなくなります。

間違いとなりやすいのは微妙な違いで目視では見つけられない場合です。
長いサフィックスがある場合は鉛フリーや支給状態などでの型番の違いではなくて
パッケージの致命的な違いとなる場合もあります。
その場合もこの処理を行えば見つけることが可能です。


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

手動での部品配置の場合もマクロを [EXCELマクロ]

形状を自分で確認したくて手動で基板上に部品を配置したい場合や
同じ型番が別のPCBLIBに存在するような顧客別で異なるPCBLIBの場合も
手動配置になってしまうでしょう。

しかし、ネットリストで部品配置する場合に似た型番があるPCBLIBをインストールしない
でおけばエラーは防げます。
ただ、後から確認ができるように事前にPCBLIBのDescription欄に顧客名などを
入れておいて管理することをお勧めします。

そういう場合は、基板上で使用しているフットプリントのDescription欄の情報を
取り出せるDelphiスクリプトを作成されたらいいでしょう。
(コマンドはあるので作成は可能です。)

基板設計業務では、一度スタイルを決めたらそれを踏襲して変更を嫌う方が多い
ようですが時間の節約と間違いを減らす場合にEXCELマクロやスクリプトは有用です。


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

見積もり時に使えるEXCELマクロ [EXCELマクロ]

見積もり価格作成のために回路図から出力されるネットリストから使用ピン数を算出して
難度や顧客による要望により計算することが殆どでしょう。

これ以外に重要なのが、新規部品の作成量です。
ネットリストから使用部品だけに着目し、それを既存のフットプリントのデータベースと
比較して新規作成部品のリストを作成すれば難易度わかります。

ネットリストではなくてPDFの部品表の場合も小物部品のCRまでもマクロで部品情報だけの
暫定ネットリストにできます。
それを利用してデータベースと比較して同様に新規作成部品が何かを調べることができます。

こういったツールを事前に作成していないと見積もりが丼勘定になってしまうでしょう。


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

ORCADから出力されたBOM [EXCELマクロ]

前の記事に関連したORCADから出力されたBOMのマクロ作成です。

「Altium Designer」からのSimple BOMを処理するマクロはすでにありますが
ORCAD出力されたBOMファイルを変換するマクロは別のマクロの一部となっています。
単体でも処理できるように簡単なマクロを新たに作成しました。

BOMの状態では各列を選択できませんが、EXCELでそれぞれの項目を列で管理できる
ようになるので別のソフトやマクロに貼り付けて利用することが可能です。
勿論、別シートにデータベースを作成しておいてそれと連携を取れば
「部品表太」のような使い方も可能です。
(これから先は各社で仕様が異なるでしょうから自社でプログラミングやカスタマイズが
 必要です。)


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

部品表太の代替マクロは [EXCELマクロ]

以前はORCAD出力されたBOMファイルを部品表太で読み込んで部品表を作成していたので
どうしても気になります。
また、稀にそれに関しての問い合わせもあります。
WinXP以降のOSでは動作しなくなったことも関係しているのでしょう。

EXCELマクロで処理は可能なのでそのヒントを記載しておきます。

1.BOMを読み込むシートを事前に作成します。
 読み込むBOM形式を固定しないといけないのでCADを指定することにもなります。

2.データベースシートの作成
 置換テーブルが必要となります。またそれ以外にメーカーや単価などの関連付けを
 するためのデータベースを事前に作成しておきます。
 (部品表太のデータがある場合はそれに準拠してコピーすればいいでしょう。)

3.新規部品表シート
 置換テーブルで作成した部品表を表示するためのシートが必要でしょう。
 1.のデータを2.のデータベースからVLOOKUP関数で処理すれば出来上がります。
 コピペで処理するか、自動的にファイル生成と規定名での保存をするなどの処理が
 できます。



続きを読む


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

ネットリストの無いパターン設計には [EXCELマクロ]

顧客のPDFによる部品表や回路図CADから出力されたBOMの場合でネットリストが無い場合は
パターン設計のラフレイアウトすらできないでしょう。
しかし、EXCELなどで記載する項目の順序を決めておけば、そこにデータを貼り付ければ
EXCELマクロでネットリストの部品情報部分は作成できます。

そのネットリストの部品情報部分だけでも基板CADのフットプリントのデータベースとの
比較で型番の差し替えが可能なEXCELマクロを準備しています。

これで基板CADで部品(フットプリント)を配置すればラフレイアウトまでの手順は問題なく
処理可能です。
(但し、接続情報はないのでラッツネストはありません。)

手動でパターンを引いて後は逆ネットで処理することになります。
(但し、回路図との検図は必要です。)

通常のパターン設計を考慮して作成したマクロですがネットリストが存在しないパターン
設計にも利用できることを、このマクロを使用されている知り合いから教えて貰いました。


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

ネットリスト比較マクロの修正2 [EXCELマクロ]

2つのネットリストを比較して背景色を変えるだけではなくて
実際にどこが異なっているかを文字列の色を黒から赤や青に変えるマクロを
作成しました。
また、これまでフットプリントの左側を基準にして処理してきたのでそれが右側に
含まれるかという処理でした。
しかし、頭に何文字が余計な文字があると含まれないという結果が返ってきます。
そこで頭から1文字ずつカットして検索するようにしました。
右からも順次カットして検索するの1列の文字列を処理するのにも複数回のループと
なります。

画像はわかりやすいように変化した部分を集めて編集した都合で
行番号は昇順にはなっておりませんので、その点はご了承ください。

Net_Net_Comp_AB2.png

続きを読む


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

ネットリスト比較マクロの修正 [EXCELマクロ]

基板設計の序盤と終盤にはネットリストを比較することが多いのでしょうが
それは接続情報だけという方が多いでしょう。

しかし、ミスが発生しやすいのはCAD自身でチェックできる接続情報よりも
PCB側のフットプリントなどの型番の情報とSCHやBOM側の型番の情報との
違いでしょう。

Footprint1とFootprint2の違いの部分をEXCELのセルの背景の色を変えています。
CRでの違いは緑色でそれ以外の違いはピンク色にしています。

***(ORG)の部分は元々のデータを置換テーブルで置換して比較していて
変化し過ぎてオリジナルがわからない場合もその項目で理解できるようにしています。

Net_Net_Comp_AB.jpg

続きを読む


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

EXCELのセル内の文字色を部分的に [EXCELマクロ]

文字検索した結果などでどこまでが合致しているかのマクロなどでは
セル内の文字の色を部分的に変えた方がわかりやすいでしょう。

部分一致していることはわかっていてもどこからどこまでがあっているかの
マクロは作成するのは面倒で事前調査しています。

セル内の文字のA文字目からB文字分の色を赤色に設定するという場合は下記のように
なります。

***.Characters(Start:=A, Length:=B).Font.ColorIndex = 3

続きを読む


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

改版作業の定型化 [EXCELマクロ]

改版時にどういう手順で処理するかをはっきりしておかないとミスが発生したり戸惑ったりします。
通常はネットリスト比較で処理されるでしょうが大幅な変更の場合は結果を見ても良く理解できない
ことがあります。
そこでマクロを使うなどして下記のような手順で作業することにしました。

1.旧、新のネットリストを比較することでREF番号だけの増減を調べる。
 「OLD_NEW_NET_COMP_R*.xlsm」EXCELマクロを使用し増減したREF番号を色分け表示する。
 ここで基板側で不要な部品は削除しておいた方がいいでしょう。
 新規部品はここで発行するか新ネットリストをロードするかはパターン設計者の考え方しだいです。

2.旧、新のネットリストを比較することでフットプリント名やコメントを比較する。
 改版の場合は接続はそのままでCRなどの値を変更されている場合もあるのでコメント欄の
 それに対応します。
 「NET_NET_COMP_R*.xlsm」を使用して文字列を比較します。

3.上記情報を踏まえてネットリストの部品情報を編集する。
 「NET_EDITOR_R*.xlsm」を使用して部品情報を編集しネットリストを生成します。
 上記の他のマクロからコピペして処理することも可能です。

4.修正後に更に2.の工程を取ればミスも減らせます。


これらの処理を行った後にこの部品情報に後半の新しい接続情報を接続すれば完了です。
手動で何度も処理するよりはインテリジェントな方法でしょう。


タグ:VBA
nice!(0)  コメント(0) 

セルの文字や背景色を変える [EXCELマクロ]

ネットリストの生成やSCH/PCBのネットリスト内のフットプリントの比較の場合に
単純な色分けではなくてCRなどは別の色にして色分けするなどの修正をしています。

VBAで処理しているので安心できそうですがついついそれに頼ってエラーとなる
場合もあるようです。
あいまい検索をさせているので確定ではないのに確定したと勘違いする場合も複数ある
マクロの中にはあります。

筆者自身が使用しているマクロはあいまい検索した結果のマクロは使用していないので
その部分には気が付きませんでした。

自社のフットプリント名に差し替えたネットリストの生成をマクロで処理した場合は
それが正しいかを再度、別のマクロで再チェックする必要があると考えています。
しかし、このマクロを使用されている方にはその生成したネットリストと元となる回路図の
ネットリストと照合されないことがあるようです。

こういったことで文字の色分けは背景色をより細かく色分けするなどで対応しようと
思いついたところです。

新機能の増設で複雑になっているプログラムで、作ってから間も空いているのでその修正も
手ごわいです。


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

ネットリストの重複行削除3 [EXCELマクロ]

秀丸エディタでのマクロ処理はまだ途中なのですが
EXCELのマクロでの処理は比較的簡単に処理できました。

ネットリストのフォーマットはAltium、プロテル、Tango形式での話しです。
ネットリストの最終行=接続情報の終わりの括弧の)です。
そして、先頭の括弧の(の行を求めて「For Next」文で、通常とは逆に最終行から重複削除
すればOKです。

先頭の括弧の(を見つけるには最終行から最初に登場する鍵括弧の]を探してその行数に1を足せば
いいでしょう。
ネット名とノード名が同じ場合をチェックするためにその2つ前が括弧(でないこともIf文で
チェックしています。


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

Utilityの多さ [EXCELマクロ]

EXCELマクロやDelphiスクリプトや秀丸マクロを使用していますが
機能が重複しないように作成はしています。

しかし、種類が多いので作成した自分自身が利用頻度が低いUtilityは忘れてしまい
似たような機能のUtilityを作ってしまいそうです。

これからはなるべくこれらを併用してUtilityを作らないようにしないといけない
時期になってきました。

単機能なのか色々使えるUtilityがいいのかも悩ましいです。


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

SCHとPCBのネットリストの比較 [EXCELマクロ]

顧客由来のSCHのネットリストのフットプリントやコメントと自社差し替えのPCBの
ネットリストを比較をEXCELのマクロで処理しています。

弊社の取引先の場合は接続情報だけではなくてある程度は理解が可能な範囲のネットリストなので
そのままECXELマクロの基準として使用しています。

しかし、その前に顧客由来のSCHのネットリストは接続情報だけでフットプリントや
コメントも信頼度がない場合があります。

VBA_NET3_Util.jpg

続きを読む


タグ:Altium Designer
nice!(1)  コメント(0) 

ECXELマクロによる3D化作業手順の変化 [EXCELマクロ]

自社の場合は。よほど簡単な小物以外は3D化に対応しているので問題ないのですが、他のCADの
ものを3D化して欲しいという依頼の場合は下記のような手順になります。

一部分をECXELマクロで処理することでこれまでとは少し違った手順となります。
それを箇条書きで示します。

1.基板のネットリストとピックアンドプレースファイルを依頼先より取り寄せます。

2.ネットリストから仮のピックアンドプレースファイルをEXCELマクロで作成します。
 この時点では部品の座標情報がないのでX、Y共に0mmにしてあります。

3.顧客のピックアンドプレースファイルではトップやボトムなどの表記が異なるので
 それを事前に修正処理をします。
 倍率など不要な項目は列を削除します。

4.EXCELマクロの該当するシートに3.で修正したデータを手動で貼り付けます。

5.EXCELマクロを実行させてその座標データをピックアンドプレースファイルに反映します。
 基準点が異なる場合などはオフセットをEXCELマクロ側で実行します。
 最後にPIKファイルとして出力させておきます。

6.「Altium Designer」で専用のライブラリを作成し仮のシルクと登録位置を示した部品を
 登録します。この登録位置は依頼先の座標と一致している必要があります。

7.これを通常のパターン設計のように部品をロードします。
 配置場所は適当で問題ありません。手動でのロードでもOKです。

8.ここでPIKファイルをロードさせてその位置に自動配置させます。

9.座標が問題なければIDFファイルを出力します。
 「Altium Designer」は3種類の座標体系があるので機構部品などは微妙にずれる場合があります。

3D化
 これ以降は3DCAD側で2D部品を新たに同じ座標で作成した3D部品に置換するので
 3D化が可能となります。



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

PIKのオフセットなどのEXCELマクロ [EXCELマクロ]

ピックアンドプレースファイルを修正したりオフセットを掛けたり、数値を丸めたりなど
することのできるEXCELのマクロを作成しました。

別のCADのピックアンドプレースファイルもある程度フォーマットを合わせればそのシートを
参考にして転記するようにもしました。

これで別のCADからでもライブラリ作りは別として基板の再設計もすることが可能になりました。
できればこのデータでIDF出力ができれば3D化も可能ですがそれには未対応です。

振り返ると、ピックアンドプレースファイルが入手可能で3D化をして欲しいという要望が
あったのでこのマクロを作成するきっかけでした。


タグ:Excel
nice!(0)  コメント(0) 
前の20件 | - EXCELマクロ ブログトップ