プロフィール

ナビ 男こんな名前ですが、ナビつけてません(。`・ω・)。

≫ 詳細プロフィール

 2020年07月 
 1234
567891011
12131415161718
19202122232425
262728293031 
記事テーマ

仁尾興産 (35)

塩マグ (10)

豆腐とニガリ (5)

がんばりアワード (125)

アクセス解析 (2)

リンク

三化理化株式会社
お世話になっている業者様です。塩マグの分析をす....

中宗機工株式会社
工場設備の材料全般でお世話になっている業者様で....

≫すべて表示

最近のコメント

ハマチ様 (08/21)

yakanchan (09/25)

ナビ男 (09/25)

yakanchan (09/24)

ナビ男 (07/03)

コンボボックスは出来るだけ設置しない!

[ テーマ: がんばりアワード ]

2014年12月8日09:20:12

生産課のソフト作りも、半分終わったかな?というころ、エラーが増えてきました。

それも、わけが分からないエラーで困っています。

たとえば、Aというマクロを実行してエラーが出て、デバッグが起きるのですが、処理を中止した後、再びAというマクロを実行すると今度はエラーにならないのです。

そのほかにも、色々あるのですが、エラーの増加と共にエクセルのエラーで強制終了というのも多くなってきました。

原因がハッキリしないのですが、こんなことがあるので、マクロ自体を簡単にしようかと思っています。

処理がややこしくなる原因の一つにコンボボックスがあります。色々なことが出来るので便利な反面、処理がややこしくなります。今現在ソフトの中でコンボボックスを多用していますが、日付の登録として使っているコンボボックスがいくつかあります。

すると、日付を追加した時にコンボボックスにリスト登録させて、さらにブックをオープンしたときにコンボボックスにリストを登録させて、さらにコンボボックスの日付を元にfindで値を検索することもありますが、もし日付が見つからなかった時にエラーが出るので、エラー処理を追加して・・・etc

こうなるんで、どんどんややこしくなってきます。日付の登録が目的であれば、セルに入力規則でリスト登録をすればマクロは一切いりません。

これがマクロの簡素化につながり、結果、エラーに強いソフトになると思います。作る側も楽ですし

エクセルソフトを開発する際、出来るだけエクセルの標準機能をフル活用して、極力マクロを使わないほうが結果いい方向に行くと思います。

以上のことを踏まえて、また最初からやり直そうと思います。

品管ソフトでもそうでしたが、プログラムの開発というのは、いいところまでいって、最初からやり直しというのが本当に多いです。これが経験というものなんですね~

がんばります


日付の表示について

[ テーマ: がんばりアワード ]

2014年12月5日12:59:45

おひさしぶりです。品管ソフトが終わり、生産課のソフト作りをしているところなのですが、かなり難航していて、まいっています・・・・。

 

自分が使わないソフトというのは、注文を聞いてから、マクロを組まなければならないところがあり、自分が思いもしなかったことを言われると、できるのかどうなのか?ということから調べていってコードを作らなければいけません。

 

あの手この手を模索しつつ、進めていっているのですが、得るものがあれば失うものがあったりで、なかなか厳しいです。

 

なかでも日付の表示形式については、最近分かったことがあります。日付といえば、

2014年11月11日と表示するか、2014/11/11と表示するかですが、これをVBAで扱うとなると別物になってしまうのです。

 

findという検索メソッドを使って2014/11/11を調べた時、2014年11月11日がヒットされないのです。全く一致しなければエラーになります。

 

そこでformatで、2014年11月11日形式に統一していたんですが、これが良くなかった

 

2014年11月11日の形式は、文字データとして認識されることがあり、そうなると、並べ替えが出来ないのです。

 

そのため、VBAでシステムを組む際は、極力、シリアル値が介入される表示のほうが使い勝手がよく、したがって、2014/11/11のほうが便利だと思います。

 

そのため、今から日付をすべて2011/11/11形式に修正します。

 

大変だ~~~

 


完成しました!

[ テーマ: がんばりアワード ]

2014年10月22日09:43:39

品管ソフト、完成しました!

 

かんせい

こーやってみるとただのエクセル画面ですが、VBエディタを見ると、マクロプログラムがギッシリ!エクセル2002~2007完全対応!多分2013もいけるはずです。「On Error Resume Next」のおかげです

 

制作期間は、3月~10月で、約8ヶ月かかっています

手探り状態でコツコツと続けて長いことかかりましたが、実際にやってみると、本当に手間で、確かに外注にだせば数百万はするだけのことはあるなと感じました

 

知恵袋で質問に答えてくれた先生たちに感謝感謝です

 

あとは簡単な手順書を作りつつ、次のソフト、生産課のソフトも作っていきま~す


マクロの簡素化!

[ テーマ: がんばりアワード ]

2014年10月16日11:17:27

仁尾興産では内部監査が始まり、ちょっとマクロから遠ざかっていましたが、久しぶりに再開しました。

 

ここのところ、ずっと複雑なマクロに取り組んでいたんですが、やはり複雑なマクロは思わぬエラーが多くて非常にてこずっていました。

 

今現在の分析表をコピーしてその名前をロット名にして、特定のフォルダ内に「分析表」という名前で保存して、それが2枚あれば、ロット順にソートして、品名が何やらだったらシート名のところを赤にして、さらに別フォルダの指定ブックが開かれているかを確認した後、もし開かれていなければ開いてシートを追加してソート。すでに開かれていたら、そのワークブックをアクティブにしてシートを追加してソート。

 

自分でも書いててわけが分からなくなりましたが、こーゆーのを自動で行うマクロを作っていました。ボタン一発でやろうと思えばできるマクロなんですが、途中、年度更新でファイル名が変わったり、エクセルを更新して拡張子がxlsからxlsxに変わったらエラーになります。

 

そのたびに、指定ファイルの場所を変更したり、ファイル名を変更したり、が必要になってきますし、どのファイルが開いている場合・・・・製品名が何だったら・・・という具合に複雑に条件分けしているんで、変更点が異様に多くなってしまんですよね。

 

それを考えると、ボタン一発マクロを作るよりは、手作業は多くなりますが、プログラムを簡単な作業に絞ったマクロのほうが優秀といえるかもしれません。

 

なるべくエラーが出ないソフトを作ったほうが後々楽なんで、マクロの簡素化も視野にいれて詰めの作業をがんばっていこうと思います


ヒストグラム共用マクロ

[ テーマ: がんばりアワード ]

2014年9月24日09:27:15

さぁ、いよいよヒストグラムに入ってきました

 

ヒストグラムのコードは

2003までが

ATPVBAEN.XLA!Histogram

で、

2007からが

ATPVBAEN.XLAM!Histogram

です。

 

「M」があるかないかなのですが、これだけで、エラーがでてしまうのです

 

そこでこのようなマクロコードを作りました。

 

Sub MgCl2ヒストグラムデータ区間頻度作成()
       
On Error Resume Next
              
Worksheets("フレーク成績表").Range("N56:O68").Clear  '前回データ区間を消去

Dim i As Long

i = ActiveSheet.Range("O44").Value  '指定したデータ区関数を拡張する数字

Application.Run "ATPVBAEN.XLA!Histogram", ActiveSheet.Range("$F$10:$F$40") _
        , ActiveSheet.Range("$N$56"), ActiveSheet.Range("$R$44").Resize(i), False, _
        False, False, False                                                             'ヒストグラム作成するがデータ区間と頻度のみ

'ATPVBAEN.XLAM!←エクセル2007から。それ以前は'ATPVBAEN.XLA!

If Err.Number <> 0 Then

Worksheets("フレーク成績表").Range("N56:O68").Clear  '前回データ区間を消去

Dim i2 As Long

i2 = ActiveSheet.Range("O44").Value  '指定したデータ区関数を拡張する数字

Application.Run "ATPVBAEN.XLAM!Histogram", ActiveSheet.Range("$F$10:$F$40") _
        , ActiveSheet.Range("$N$56"), ActiveSheet.Range("$R$44").Resize(i2), False, _
        False, False, False                                                             'ヒストグラム作成するがデータ区間と頻度のみ

End If
On Error GoTo 0

End Sub

 

これは基本は2003用で、ATPVBAEN.XLA!Histogramを実行しますが、エラーがでたら、ATPVBAEN.XLAM!Histogramを実行するというマクロです。

これで、2003でも2007でも両方いけてしまいます

さぁ、後はお客様送信用のファイルへシートコピーマクロを残すのみです


2002、2007共用の重複項目削除マクロ!

[ テーマ: がんばりアワード ]

2014年9月16日09:45:39

品管ソフトの2002&2007共用のマクロ製作2つ目です!

 

エクセルは2007以降は重複項目を削除するための機能が初めからついており、

 

ActiveSheet.Range("$A$9:$O$100").RemoveDuplicates Columns:=2, Header:=xlYes

 

これを実行したら重複項目が削除できるのですが、2003以前のエクセルで実行するとエラーになります。

 

そこでこのようなマクロを考えました。

 

Sub 重複項目削除()

'ActiveSheet.Range("$A$9:$O$100").RemoveDuplicates Columns:=2, Header:=xlYes '←エクセル2007以降

Worksheets("データ転送中継").Activate '←フィルタオプションで重複ロットを非表示にし、コピペで抽出用データ取り出し
Range("B9:B109").AdvancedFilter Action:=xlFilterInPlace, Unique:=True
Range("A9:J109").Copy Destination:=Range("A110:A210")
Range("b111:J141").Copy Destination:=Worksheets("フレーク成績表").Range("C10:K40")

End Sub

 

フィルタオプションで重複項目を削除し、それをコピペして、行数を31以下に抑えて、その範囲をコピペして張り付けるというプログラムです。

 

このコードを使えば、エクセル2003でも2007以降でもエラーが出ることなくプログラムが実行できますなんだかんだで方法はあるもんですね~!次もがんばります


技ありマクロ!フィルター!

[ テーマ: がんばりアワード ]

2014年9月10日10:30:00

エクセル2003、2007の互換チェックをしていて、不具合発生しました!

Sub フィルター抽出()

If ActiveSheet.AutoFilterMode Then

Range("a9").AutoFilter

Else

Range("a9").AutoFilter Field:=3, Criteria1:=Array("製品1", "製品2", "製品3"), Operator:=xlFilterValues

End If

End Sub

これはエクセル2007で作成した製品名でのオートフィルターマクロですが、エクセル2002で動かすとエラーになります。理由は絞込む製品が2種類しかできないのと、Operator:=xlFilterValuesこの引数が2007以降でないと使えないからです。

 

そこで、2002でも2007でもどちらでも使えるマクロを考えて、このコードを作りました!


If ActiveSheet.FilterMode Then

ActiveSheet.ShowAllData

Else

ActiveSheet.Range("A9:O500").AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:=Range("N500:N503"), Unique:=False

End If

これはフィルターオプションのマクロで、オートフィルターは2007、2003では互換性がないけども、フィルターオプションならいけるというわけで、こちらで製品の絞込みをすることにしました!ただ、フィルターオプションは検索条件をセル内に入力しておかないといけないので、シートの下のほうのN500:N503のところに検索条件のセルを記入しています。

 

これでパソコンの更新で2007に変更する際もコードの修正がいらない機能ができましたこの調子で次はヒストグラムやってみます!


ユーザーフェイスが混乱

[ テーマ: がんばりアワード ]

2014年9月9日10:53:00

品管ソフトの製作も終盤になり、次の仕事、生産課のソフト作りの仕事が増えました!

 

そんなわけで、品管ソフトもそろそろ完成させたいので、エクセル2000での動作チェックをしています。

 

このとき必要なのがxlsm→xls変換で、エクセルは2007以降はブックの拡張子がxlsx,xlsmとなり、旧エクセルでは新エクセルの動作がうまくいかないため、互換用の変換、xlsm→xlsをしなければなりません。

 

ここで誤算だったのが、ブックのメモリアップ。xlsmで作成した時はファイル容量が2Mだったのに、xlsに変換したら1.5倍の3Mに増えてしまいました。社内には古いパソコンもあるので、動作が遅くなるかもしれません。まともに動くかどうかは出たとこ勝負で、うまくいかなければまた次の手を考えます。

 

続いて困っているのがユーザーフェイス。今まで2007で作っていたため、2003以前のユーザーフェイスと全然違っていて、エクセル2000で目的の作業をしたい時にコマンドがどこにあるのか分かりません。というか忘れました先ほどもデザインモードのボタンがどこにあるか分からず、無駄に時間を過ごしてしまいました。

 

初めはとっつきにくかったですが、慣れると2007以降のユーザーフェイスのほうが効率的で仕事が速いですね。エクセル2000ではノロノロ運転になってしまいますが、あと1ヶ月以内には完成させたいと思います


痛恨のエラー

[ テーマ: がんばりアワード ]

2014年9月4日09:54:35

昨日、またまた品管ソフトで大エラーが発生しました

 

私のパソコン、ディスプレイが17インチなんですけど、そこで作ったユーザフォームを、別の社員のパソコンで開いた時、

 

ユーザーフォームがでかすぎて画面に入りません。下のほうが切れています

 

これではどうにもならないんで、ユーザーフォームをすべてコンパクトにして15インチサイズで収まるようにしないといけません。

 

またまたやり直しというか修正・・・・

 

まさか、こーゆーことになるとは思いませんでした。ソフト作りは手間がかかりますね~


印刷の微調整

[ テーマ: がんばりアワード ]

2014年9月3日09:49:00

品管ソフト、詰め込めるマクロはすべて終わり、最後の調整をしています。

 

品管ソフトの役割はデータ入力とそのデータを抽出した分析表作りなのですが、この分析表を過去のソフトで作成したものと見比べてみてアラ探しをしています。

 

すると、プリントされた表がやや左寄りになっていたりするので、これを微調整しています。

 

使用するコードは

 

.LeftMargin = Application.CentimetersToPoints(0.5)
.RightMargin = Application.CentimetersToPoints(1)

これで、左余白0.5cm、右余白1cmとかいった感じで調整しています。分析表の数が多いので、根気のいる作業ですが、がんばります