解析エンジニアの自動化 blog

コツコツと自動化した方法を残す blog

VBScript による Web スクレイピング




こんにちは。
仕事の自動化にやりがいと達成感を感じるガッくんです。



この記事の目次




背景


今日は以前の記事に関わる事務作業の自動化の準備です。

ブラウザシステムや Web をスクレイピングしたいときは結構あります。

一度作ったプログラムをうまく管理して、資産的に使用して行くことが今後の自動化の生産性を上げることにもつながります。

そこで、フォルダ構成や作成するプログラムの構成を考えていきます。


目的


個人的にはWebスクレイピングPython で実装するのが主流な気がしますが、VBS で実装します。(笑)

自動化をして行く上で、都合の良い便利なプログラムの組み方を考えます。まぁ、基本通りです。ダラダラと書かずに関数もしくはサブルーチンを作成し、なるべくプログラムは関数、サブルーチンのみで構成する方針でいきます。

まず、VBScript をしまうためのフォルダ構成を作成します。 何でもいいので1つフォルダを作成します。私は『VBS』というフォルダを作成しています。 そして、関数、サブルーチンをしまうためにVBSフォルダの中に『myFunc』というフォルダを作成しました。

使えそうな関数のアイデアが浮かんだら、『myFunc』フォルダに関数の VBScript を保存しています。

まず、 VBScriptIE を新規に作成する関数を作成し、『myFunc』フォルダに保存します。
そして、外部から IE を新規に作成する関数を読み込んで IE で Web を表示させてみます。




関数

ソースコード

この関数は URL を引数で渡して、新規 IE で URL を表示するサブルーチンです。

newIE-targetURL.vbs

Sub newIE(targetURL)
   '--------------------------------------------------------------------
   ' IE オブジェクトの生成
   '--------------------------------------------------------------------
   Set objIE = CreateObject("InternetExplorer.Application")
   '--------------------------------------------------------------------
   ' IE オブジェクトの可視化
   '--------------------------------------------------------------------
   objIE.Visible = True
   '--------------------------------------------------------------------
   ' IEを開く
   '--------------------------------------------------------------------
   objIE.navigate targetURL
   '--------------------------------------------------------------------
   ' ページが読み込まれるまで待つ
   '--------------------------------------------------------------------
   Do While objIE.Busy = True Or objIE.readyState <> 4
      WScript.Sleep 100
   Loop
   Set objIE = Nothing
End Sub

使い方

作成したnewIE-targetURL.vbs ファイルを呼び出して使うプログラムを書きます。

main.vbs

'------------------------------------------------------------------------------
' 自作関数のインクルード
'------------------------------------------------------------------------------
call IncludeFunction()
 
'_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
' IE を開く
'_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
   '--- 変数宣言 ---
   targetURL = "https://transit.yahoo.co.jp/"
   '--- 実行 ---
   call newIE(targetURL)
 
'------------------------------------------------------------------------------
' 終了通知
'------------------------------------------------------------------------------
MsgBox wscript.scriptname & " の処理が完了しました。"
'------------------------------------------------------------------------------
' 自作関数をコールするサブルーチン
'------------------------------------------------------------------------------
sub IncludeFunction()
   '----------------------------------------------------------------------------
   ' 自分(=VBSファイル)のディレクトリを取得する
   '----------------------------------------------------------------------------
   FullPath = wscript.scriptfullname
   FileName = wscript.scriptname
   pathLen= len(FullPath) - len(FileName)
   crrDir = left(FullPath, pathLen)
   chiDir = "myFunc"
   crrDir = crrDir & chiDir
   '----------------------------------------------------------------------------
   ' ファイルシステムを扱うオブジェクトを作成
   '----------------------------------------------------------------------------
   Set objFileSys = CreateObject("Scripting.FileSystemObject")
   '----------------------------------------------------------------------------
   ' フォルダのオブジェクトを取得
   '----------------------------------------------------------------------------
   Set objFolder = objFileSys.GetFolder(crrDir)
   '----------------------------------------------------------------------------
   ' FolderオブジェクトのFilesプロパティからFileオブジェクトを取得
   '----------------------------------------------------------------------------
   For Each objFile In objFolder.Files
      '--------------------------------------------------------------------------
      ' 自作関数のコール
      '--------------------------------------------------------------------------
      FuncFile = objFile.Name
      Set objFile = objFileSys.OpenTextFile(crrDir & "\" & FuncFile)
      ExecuteGlobal objFile.ReadAll()
      objFile.Close
   Next
   '----------------------------------------------------------------------------
   ' メモリ解放
   '----------------------------------------------------------------------------
   Set objFile = Nothing
   Set objFolder = Nothing
   Set objFileSys = Nothing
end sub



コメント

これで、 main.vbs を起動すると Yahoo! の路線情報の検索ページが新しい IE で開きます。

さらに、 IncludeFunction というサブルーチンで外部の VBScript ファイルの関数やサブルーチンを使用可能な状態にしています。

これからは、newIE-targetURL.vbs の様な色々な機能の関数、サブルーチンを作って、『myFunc』フォルダの保存していきます。




以上

解析の実行を自動化!!

 

 

こんにちはm(_ _)m
仕事の自動化にやりがいと達成感を感じるガッくんです。

 

今日は固有値解析、静解析の自動化を考えます。ちなみに固有値解析、静解析といってもやり方も解析ソフトも沢山あります。この記事ではNastran系の固有値解析、静解析を考えていきます。

まぁ、解析エンジニアなので、文字通り解析します。

その際、計算サーバーへアクセス、ファイルの送受信、計算の実行を行います。

コマンドでカタカタやるのも良いんですが、TeraTermにはマクロ機能が有ります。Tera Term Language(TTL)という言語で拡張子は「.ttl」です。有るのもは使いましょう!!

 

それでは、計算サーバーへのLog in〜解析結果のOutputまでを自動化してしまいましょう。

プログラミング言語TTL、VBS、VBAを使います。

それぞれの言語で何を書くかは以下の通り。
VBS:TTLの実行
TTL:log in〜解析結果のOutput
VBA:セットアップ

 

【VBS:TTLの実行】
実行などのスイッチング動作は単純、簡単であればあるほど良いです。

VBSはドラッグ&ドロップを標準で実装できます。また、Windows OSなら動作します。

VBSは意外と優秀です。

作成するプログラムは以下の様にします。
解析に必要な設定ファイルをドラッグ&ドロップすると、TTLで書いたlog in〜解析結果のOutputのプログラムを実行する。

 

TTL:log in〜解析結果のOutput】
TeraTermが標準で備えているTTLというマクロ機能です。

安定動作第1です。標準での実装は理想的です。

作成するプログラムは以下の様にします。
計算サーバーにlog inし、解析に必要な設定ファイルをアップロードして、解析を実行し、解析結果を解析に必要な設定ファイルと同じディレクトリにダウンロードする。

 こ

VBA:セットアップ】
この手の自動化プログラムはユーザー名、パスワードなど使用者固有のデータが必要になります。

インストール(≒初期設定)の時にソースコードを使用者に編集してもらうのではなく、自動で書き換えるプログラムが必要になります。

作成するプログラムは以下の様にします。
ユーザー名、パスワード、その他使用者固有データを入力し、コマンドボタンをトリガーとしてVBSとTTLソースコードを書き換える。そして、デスクトップにショートカットを作成してアイコンの設定をする。

 

次回以降ソースコードを書いていきます。

 

以上

 

解析業務の自動化に向けて

 

 

 

こんにちはm(_ _)m

仕事の自動化にやりがいと達成感を感じるガッくんです。

 

 

 

今日は事務処理では無く、解析エンジニアとしての仕事の自動化を考えます。

 

まずは業務で使用するソフトウェアを整理してみます。

 

 

 

1.プリポスト(モデル作成、結果表示ソフト)

HyperWorks

 

2.ソルバー(計算ソフト)

MSC Nastran

NX Nastran

 

3.パッケージ(全部の機能のあるソフト)

Abaqus

Femap with NX Nastran

STAR-CCM

Ls-Dyna

 

4.通信ソフト

TeraTerm

 

 

 

もっと使っていると思いますが、私が使ったりしているのはこんなもんですね。

 

では、このソフトを使ってどんな事しているのかを整理してみます。実は解析ってソフトウェアの操作方法とかは違いますが、やってることはだいたい同じです。

 

 

 

【静解析編】

1.図面を良く読む

2.解析モデル作成する

3.固有値解析

4.境界条件を作成する

5.静解析

6.評価をまとめる

7.プロパティ、マテリアルチェック

8.結合、集中マスチェック

9.寸法チェック

 

 

 

以上、作業としてはだいたい9項目程ですかね。動解析の場合は境界条件を作成する時に時間の概念が出てきたりします。

 

 

 

下記の作業については業界、製作対象及び会社などで特色が出ます。

1.図面を良く読む

6.評価をまとめる

 

図面の 書き方=読み方 はかなり苦労します。また、評価の方法も応力評価、加速度評価など様々な方法が有ります。複数の評価方法を採用する事も有ります。

 

 

 

下記の作業についても業界、製作対象、会社で異なってきます。取り扱う問題の差から、主流なソフトウェアが異なってきますので、操作方法はソフトウェア毎となり、多岐に渡ります。

2.解析モデル作成する

3.固有値解析

4.境界条件を作成する

5.静解析

 

特に下記はソフトウェアに完全に依存しますので、操作方法を覚える必要があります。

2.解析モデル作成する

4.境界条件を作成する

 

下記の解析作業方法も計算を実行するソフトウェアに依存しますが、解析実行するだけなので、比較的簡単です。

3.固有値解析

5.静解析

 

 

 

下記のチェック作業は業界、製作対象、会社による特色は少ないです。テキストデータで解析結果を出力するソルバーが多く。テキストデータを確認して下記の内容をチェックします。単純な作業ですが、チェック項目が多く、1番大変な作業です。

7.プロパティ、マテリアルチェック

8.結合、集中マスチェック

9.寸法チェック

 

 

 

解析業務の簡単な内容は以上です。

表1に作業の工数、頻度、自動化にかかる工数、自動化の優先度をまとめました。

f:id:chuckischarles:20171128144822p:plain

 

 

 

表1の優先度から下記の順番で自動化を行います。

1.固有値解析

2.静解析

3.プロパティチェック

4.結合、集中荷重チェック

5.図面を良く読む

6.解析モデルを作成する

7.境界条件を作成する

8.評価をまとめる

9.寸法チェック

 

 

 

事務作業の自動化とは違って大変な作業になりそうです。

 

 

 

以上

 

 

 

 

バッチファイルで PC シャットダウンする

 

 

 
こんにちはm(_ _)m
仕事の自動化にやりがいと達成感を感じるガッくんです。
 
 
 
今日は前回の記事で決めた優先度で自動化してみます。
 
まず、最初に自動化するのはPC シャットダウンでした。
 
PC シャットダウン……これはもう、バッチファイルしかないでしょう。
 
むしろ、PC のシャットダウンなんぞ自動化する意味あるのか?と思うほどの単純な作業です。
 
まぁ、自動化してみましょう。(笑)
 
 
 
【バッチファイルを作る】
①メモ帳を開く。
  1. Windowsキー」を押しながら「Rキー」を押す。
  2. 「notepad」と入力する。
  3. 「OKボタン」を押す。
 
 
②バッチ内容を作成する。
  1. 「2秒後にシャットダウンする」コマンドの「shutdown /s /t 2」と入力する。
 
 
③ファイルの保存
  1. メニューバーの「ファイル」をクリックする。
  2. プルダウンの「名前をつけて保存」をクリックする。
  3. 保存場所を選択する。
  4. ファイルの種類を「テキスト文書(*.txt)」から「すべての種類」に変更する。
  5. ファイル名に「ShutdownPC.bat」と入力する。
  6. 「保存ボタン」を押す。
 
 
 
これでバッチファイルが作成出来ました。これからはダブルクリックでPC をシャットダウン出来ます。
 
 
 
作った後に分かりましたが、外出先からリモートで会社のPCに接続していた場合、会社のPCをシャットダウンするのに便利でした!
 
 
 
以上
 

事務作業の自動化

 

 
 
こんにちはm(_ _)m
仕事の自動化にやりがいと達成感を感じるガッくんです。
 
 
 
今日は【自動化すること】を実際に決めてみます。
 
 
 
簡単な決め方は以下の①〜④の通りです。
①1日の作業を書き出す。
②作業工数を書き出す。
③頻度を書き出す。(毎日、毎週、隔週、毎月)
④自動化にかかる工数を書き出す。
 
以下に私が日頃行なっている作業について、①〜④をまとめた表1 付帯作業リストに示します。

f:id:chuckischarles:20171123202919p:plain

※:業務については別途まとめる。
 
表1 付帯作業リストの自動化優先度が1番大きい作業から自動化します。なお、自動化優先度がゼロの作業は自動化不可なので無視します。
 
 
 
以下に示す1〜4の順で自動化を行います。
1.PC シャットダウン
2.残業申請
3.休暇申請
4.経費精算書作成
 
 
 
残業申請、休暇申請は社内システムをスクレイピングしないといけないので、やってみたらめっちゃ時間がかかるかもしれません。
楽しんでやるから良いですけどね。
 
 
 
以上

自動化・効率化のはじめ方

 

こんにちはm(_ _)m
仕事の自動化にやりがいと達成感を感じるガッくんです。
 
 
 
今日は【自動化をする作業】について考えた結果を書きます。
 
 
 
自動化を【行う】or【行わない】の判断!!
これは以外と重要です。
 
目的は時間を持て余すことであって、自動化をすることではありません。時間を生まない自動化には1秒も使いたくありません。
 
 
 
そこで、判断材料として次の①自動化の効果と②自動化にかかる工数を数値化して判断します。①、②について以下で説明します。
 
①自動化の効果
頻度と工数で作業を4種類に分類します。分類した表を表1 作業の効果に示します。

f:id:chuckischarles:20171105162849p:plain

 
しかし、このままでは分類しただけで、イマイチ分かりづらいので、点数にしてみます。
表1で『多』もしくは『大』とした所を8点、『少』もしくは『小』とした所を3点とした表を表2 作業の効果(点数)に示します。

f:id:chuckischarles:20171105163203p:plain

 
点数にしたら、頻度と工数を足して、効果を算出します。効果を算出した表を表3 作業の効果(総合得点)に示します。

f:id:chuckischarles:20171105163225p:plain

 
表3 から自動化の効果は16点、11点、6点に分かれます。ちょうど、大、中、小に分かれています。
 
②自動化にかかる工数
工数も①と同じく大小で点数をつけます。
 
 
 
そして、自動化要否の判断の結果を表4 自動化すべき作業に示します。

f:id:chuckischarles:20171105163246p:plain

 
以上が自動化すべき作業をまとめた結果です。
 
自動化の効果が大きく、自動化にかかる工数が小さい作業をもっとも自動化すべきで、自動化の効果が小さく、自動化にかかる工数が大きい作業はとにかく手を動かして作業する。という当たり前の結果になりました。
 
時間は有限ですし、全部を自動化してる時間はありません。
効果的なものから自動化して、作業すべきは作業しましょう。
 
 
 
以上。
 
 
 
計画的自動化:部分的に自動化していき、最終的に作業全体を自動化する。
 

効率化・自動化は人生に必要です



こんにちは。
仕事の自動化にやりがいと達成感を感じるガッくんです。



この記事の目次



背景・目的


私事ながら 2017/10/01 から職場を変えまして、慣れた仕事が無くなりました。

前の職場ではかなりの仕事を自動化していたのですが、今はまだまだ仕事のほとんどが手作業です。

なので、 1 から自動化を頑張って時間を持て余して行きたいと、あれこれ画策してます。

このブログでは効率化・自動化した事を記録していきます。



なぜ自動化・効率化をするのか

なぜ

ズバリ時間を使い尽くしたいからです。

世の中、平等なものはほとんどありません。

寿命は人それぞれ違うわけですから、時間でさえ平等には与えられていません。

時間の流れる速さだけが平等です。

時間をより多くの事に使えるようになる為に効率化・自動化をします。

暮らしの時間を振り返る

あまりに日常過ぎてどんな事に何時間かかっているか気にした事が無い場合が多いんじゃ無いでしょうか?

私の 1 日の行動と時間配分を表1 にまとめました。


実際、時間はカツカツです。
家が会社から遠い人はあっという間に余暇の時間が無くなり、残業が多い人は睡眠時間が削られる事が容易に想像出来ます。

残業をゼロとしだ場合の行動と時間分配を表2 にまとめました。
そんなに時間に余裕は持てません。



効率化・自動化が出来たら

どんな事が出来るかポジティブに考えてまとめてみます。

家族との時間が増やせる。
恋人との時間が増やせる。
友人との時間が増やせる。
趣味の時間が増やせる。
副業が出来る。
もっと仕事が出来る。

私は資格の勉強や副業に興味を持っているので、そういった話もブログにしていきたいです。



自動化・効率化のやり方

やり方は人それぞれではありますが、簡単で効果的なのはプログラムを作る事だと思っています。

テンプレートを作る事も有効的な方法だと思います。

ただ、このブログではプログラムの作成により、効率化・自動化をしていく予定です。



動作環境紹介


私が使用している PC 環境、開発環境をまとめておきます。
もちろんこの他も必要があれば使用します。

メイン OS

Windows vista 64bit
Windows 7 professional 64bit
Windows 10 64bit

メインプログラム開発環境

Excel 2002 VBE
Excel 2007 VBE
Visual Studio Community 2017
WinPython 3.4.4

メインプログラム言語

VBA
C#
C++
Python



コメント

プログラム言語を学ぶためのブログではなく、基本的には効率化・自動化の例を具体的にまとめていきたいと考えています。

ですが、効率化・自動化を行なっていく上でつまずいた内容や初めての取り組み等もまとめていきたいと思いますので、基本的な使い方のまとめも少し入ってくると思います。



以上