So-net無料ブログ作成
  • ブログをはじめる
  • ログイン
EXCEL Macro ブログトップ
前の20件 | -

DelphiからVBAへ [EXCEL Macro]

AltiumのDelphi ScriptからEXCELのVBAに6種類のスクリプトを移植中です。
そこで気が付いたのがVBAのメニューフォームは味気ない感じがします。
ボタンの影の付き方やページコントロールの枠の境界なども見辛いです。

逆にVBAの方がプログラミングはし易いです。
驚いたのは平方根の記述です。
移植して動作チェックをしてみると答えがDelphiスクリプトと異なる場合がありました。
結局、Sqrという関数が違っていました。
VBAでは平方根はSqrなのですが、DelphiでSqrは二乗のことで、平方根はSqrtでした。
Delphiの値が正しいという基準で処理していたので、Delphiの関数の記述が違って
いるのに気が付くのに時間が掛かってしまいました。


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

Delphi ScriptのEXCELへの移植 [EXCEL Macro]

「Delphi Script」は「Altium Designer」上でないと動作しないので、他のPCBCADをお使いの
方がこのブログを訪問されるとがっかりされていることでしょう。

実際に、ダウンロードのカテゴリーでは「Delphi Script」より「EXCEL Macro」の方が閲覧数が
多いようです。
知り合いの基板設計者からも、そういう指摘がありました。

伝送線路関連や「VIAの抵抗値」などのスクリプトはEXCELに移植をした方が良さそうです。
個別ではなくてこれらをまとめて一つのマクロにした方が便利でしょう。

現状ではこれらを含んだ4つぐらいをまとめる予定でおります。


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

ノード名置換マクロの件数変更 [EXCEL Macro]

これまでにネットリストのノード名をフットプリント名で変更するマクロにて、そのフットプリント名は
10件までとしていました。
これ以上は危険が伴うからという理由でした。
フットプリント名での置換なので、複数使いが多い筈なので置換できる点数としてはかなりの数に
なるでしょう。

しかし、規模の大きな基板のネットリストの場合に、それが14件ほど必要となりました。
その場でマクロのプログラムを修正するのは危険なので同じプログラムを2回利用すれば20件まで
対応できる筈なので、それで対処しました。

仕事が終了した後で、マクロにて修正できる件数を30件まで増加させました。
無制限にというのもどうなのかと悩ましいです。
フットプリント側で修正するという手もあるのですが、それでは改版時に影響がでます。
PCBDOC側を修正することで対処も可能ですが、再修正時に困惑するかもしれません。

何がいいのか、未だに手探りです。
主に置換しているのは電解コンデンサ、ダイオード、トランジスタです。


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

複数のシンプルBOMを連続インポートできたら Part.3 [EXCEL Macro]

バッチファイルで合成した「MERGE_CSV」のファイルをEXCELで加工するマクロが完成しました。
以前にも記事にしたようにREF名のアルファベットで作業時間を割振ります。

テストポイントなどのREF名はアルファベット+数字という構成ではなくて直接、ネット名や電圧値の
場合があります。
その場合には最初の文字が数字になることが多いので、それは*に変換します。
*は自動的に無視する設定です。

これを別の見積り用マクロに貼り付けてPDF化します。
これに個々のPCBCODのSTEP貼り付け工賃と管理費を足して見積りとなります。

IDF_EST_Multi.png
nice!(1)  コメント(0) 

部品DB検索マクロ Part.2 [EXCEL Macro]

前出のEXCELマクロはLikeコマンドで前後に*をつけてワイルドカード検索に
変更し、該当したデータベース内の型番自体も表示するように修正しました。

C列、D列は未使用で空白なのですが、こういった場所もチェックに利用できることに
気がつきました。

つまり、存在しないフットプリントは新規作成する必要があるのでPDFなどの資料が必要です。
ダウンロードしたものだけをチェックするのに便利です。
これ以外にはフットプリント作成済みとかSTEPファイル作成済みなどのチェックにも
利用可能です。

オリジナルのマクロを別名保存してその機種独自のファイル名にしてファイル管理に
したら便利です。


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

部品DB検索マクロ [EXCEL Macro]

これまで自社のフットプリント名のデータベースを検索するのはネットリストから処理していました。
しかし、見積り時点で自社フットプリントの有無を調べることが多い筈です。

そこでA列に単純に部品名を手動で貼りつけるとデータベース(自社のフットプリントの一覧)から
完全一致した場合に○をつけるEXCELのマクロを作成しました。

データベースに分類用のプリフィックスやサフィックスがある場合は完全一致ではないので
今後はVLOOKUPではなくてInstrで処理し、色分けした方がいいでしょう。

Macro_A9_DB.png

続きを読む


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

ネットリストからREFを生成 [EXCEL Macro]

STEP化のより具体的な見積もりのために、これまではシンプルBOMの情報を利用していました。
それはPCBDOCからの生成だとフットプリントがはっきりしているからです。

しかし、見積りレベルだとPCBDOCが存在していない場合もあり得ます。
そこでネットリストからもREFのアルファベット部分を生成できると便利です。
しかし、自社でフットプリント名を差し替える必要があるので一旦、自社のネットリストに
EXCELマクロなどで変換し、そのネットリストから新たに生成する必要があります。

これまでに作っていたマクロを改造してREFのアルファベット部分を生成できるマクロが完成
しました。
このアルファベット部分は更に別のマクロで分類してSTEP作成の単価を振り分けるためにどうしても
必要なのです。

ネットリストの方がBOMよりは見積もりとしての利用頻度が高いのかもしれません。

NET_REF_EM.png


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

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

以前に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 Macro]

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 Macro]

回路図が「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 Macro]

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

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

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


PCBLIB_SER_Macro.png

続きを読む


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

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

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

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

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

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

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


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

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

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

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

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

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


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

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

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

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

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

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


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

ORCADから出力されたBOM [EXCEL Macro]

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

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

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


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

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

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

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

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

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

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



続きを読む


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

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

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

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

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

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

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


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

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

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

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

Net_Net_Comp_AB2.png

続きを読む


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

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

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

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

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

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

Net_Net_Comp_AB.jpg

続きを読む


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

EXCELのセル内の文字色を部分的に [EXCEL Macro]

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

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

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

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

続きを読む


nice!(1)  コメント(0) 
前の20件 | - EXCEL Macro ブログトップ