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

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

◯VBScript による IE のフレーム構造のタグ取得




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



さぁ〜て!!この記事の目次は!?




目的


フレーム構造を持つ Web ページを操作するため、操作したいタグを取得する関数を作成します。




関数

ソースコード

この関数は上位オブジェクト、フレーム名、タグ名、タグに含まれる文字列を引数としてタグオブジェクトを返す関数です。タグが見つからなければ Nothing を返します。

getTagInFrameByNameProperty_objUpper-FrameNameProperty-TagName-InString.vbs

Function getTagInFrameByNameProperty(objUpper, FrameNameProperty, TagName, InString)
   '----------------------------
   '--- まず全フレームの取得 ---
   '----------------------------
   Set objFrames = objUpper.document.frames
   '----------------------------------
   '--- フレームのドキュメント取得 ---
   '----------------------------------
   Set objFrameDoc = objFrames(FrameNameProperty).Document
   '----------------------------------------------------
   '--- name 属性が FrameNameProperty の           ---
   '--- frame の InString を含む TagName タグを取得 ---
   '----------------------------------------------------
   Set Tags = objFrameDoc.getElementsByTagName(TagName)
   set LookAtTag = Nothing
   for i = 0 To Tags.Length - 1
       if Instr(Tags(i).outerHTML, InString)>0 then
           set LookAtTag = Tags(i)
           exit for
       end if
   Next
   '--------------------------------------
   '--- 対象オブジェクトの有無確認 ---
   '--------------------------------------
   if LookAtTag is Nothing then
       Msgbox "name 属性が " & FrameNameProperty & "の frame の " & InString & " を含む "  & TagName & " タグを見つけることが出来ませんでした。"
       set getTagInFrameByNameProperty = Nothing
   else
       set getTagInFrameByNameProperty = LookAtTag
   end if
End Function

使い方

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

main.vbs

'----------------------------------------------
'--- frame のタグオブジェクトを取得 ---
'----------------------------------------------
   '--- 変数宣言 ---
   FrameNameProperty = "frame_name"
   TagName = "a"
   InString = "リンク"
   '--- 実行 ---
   set objFrmDoc = getTagInFrameByNameProperty(objIE , FrameNameProperty , TagName , InString)




コメント

これで、 main.vbs を実行するとタグオブジェクトを返します。探しているタグが見つからない時は Nothing を返します。




以上

解析のいろは




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



この記事の目次




目的


解析エンジニアなのに解析の話を全然していませんでした。コーヒーブレイク的に簡単に解析について抽象的にまとめておきます。 基本的な事をただ列挙しましたが…こんなもんです。




解析のいろは

解析フロー

解析のモデルを準備する

材料を設定する

メッシュを作成する

拘束条件(固定方法)を定義する

荷重条件を定義する

材料の設定に必要な情報

縦弾性係数(ヤング率)
ポアソン
密度
熱膨張係数
熱伝導率

拘束条件

拘束位置(面や点など)
拘束方向

荷重条件

荷重の種類
集中荷重
等分布荷重
温度荷重
遠心力
圧力
強制変位
荷重をかける位置(面や点など)
荷重の方向

チェック

解析のモデル化方法は間違っていないか
材料設定は間違っていないか
単位系は間違っていないか
拘束条件は間違っていないか
拘束条件は不足していないか
荷重条件は間違っていないか
荷重条件は不足していないか




コメント

解析のインプット情報が整理出来れば、アウトプット情報から意図した解析が出来ているかを確認出来ますね。
自動化ポイントですね。




以上

Excel 数式で色々な乱数の作る




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



さぁ〜て!!この記事の目次は!?




目的


今回は Excel の数式で乱数の作り方についてまとめておきます。




数式

基本

0以上1未満の乱数
= RAND()

基本的な使い方

0以上5以下の乱数
= INT(RAND()*6)

0以上n-1以下の乱数
= INT(RAND()*n)

1以上6以下の乱数
= INT(RAND()*6)+1

1以上n以下の乱数
= INT(RAND()*n)+1

応用的な使い方

a以上b未満の乱数
= INT(RAND()*(b-a)+a)

a以上b以下の乱数
= INT(RAND()*(b-a+1)+a)

A±B
= A+B*(RAND()-0.5)

複雑な使い方

1〜30で15だけ出現率2倍
= IF(INT(RAND()*31)=0,15,INT(RAND()*30+1))




コメント

乱数はモンテカルロシミュレーションなどに使われていることで有名だと思います。 エクセルのフォーマットを作成する時や確率の確認に重宝しています。 覚えといて損のない数式です。




以上

VBScript で書く自動的に消えるメッセージボックス!!


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




この記事の目次




目的


自動化のプログラムでもメッセージボックスを表示させたい事はあります。

でも、標準のメッセージボックスだと、 OK ボタン等をクリックしないと次の処理に進みません。人間によるクリック動作が介在してしまうと自動化の意味が無くなってしまいます。

そこで、任意の時間だけメッセージを表示させたら、自動的に消えるメッセージボックスを関数にしてメモをしておきます。




関数

ソースコード

この関数は表示させたい文字列と表示させたい秒数を引数で渡すと、指定秒数だけ表示させたい文字列を表示した後、自動的に消えます。
『VBS』というフォルダの中に『myFunc』というフォルダを作成していて、自作した関数は全て『myFunc』フォルダに保存しています。

AutoMsg.vbs

function AutoMsg(ByVal strMsg, ByVal intTime)
   '--------------------------------------------------------------
   ' シェルオブジェクトの生成
   '--------------------------------------------------------------
   Set objShell = WScript.CreateObject("WScript.Shell")
   '--------------------------------------------------------------
   ' メッセージ表示
   '--------------------------------------------------------------
   objShell.PopUp strMsg, intTime
   '--------------------------------------------------------------
   ' メモリ解放
   '--------------------------------------------------------------
   Set objShell = Nothing
end function

使い方

作成した AutoMsg.vbs ファイルを呼び出して使うプログラムを書きます。
このプログラムは『VBS』フォルダの直下に保存します。

main.vbs

'------------------------------------------------------------------------------
' 自作関数のインクルード
'------------------------------------------------------------------------------
call IncludeFunction()

'-----------------------------------
'--- 自動的に消えるメッセージボックス ---
'-----------------------------------
   '--- 変数宣言 ---
   strMSG = "表示させたい文字列"
   Tsec = 5
   '--- 実行 ---
   call AutoMsg(strMSG, Tsec)

'------------------------------------------------------------------------------
' 終了通知
'------------------------------------------------------------------------------
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
      if instr(1, FuncFile, ".txt") = 0 then
         Set objFile = objFileSys.OpenTextFile(crrDir & "\" & FuncFile)
         ExecuteGlobal objFile.ReadAll()
         objFile.Close
      end if
   Next
   '----------------------------------------------------------------------------
   ' メモリ解放
   '----------------------------------------------------------------------------
   Set objFile = Nothing
   Set objFolder = Nothing
   Set objFileSys = Nothing
end sub




コメント

main.vbs を実行すると『表示させたい文字列』という文字列が5秒間表示されて自動的にメッセージが消えたと思います。
3行で書ける内容なんで、関数化する必要性が無いかもしれません。そこは、臨機応変にコーディングしましょう。




以上

VBA で飯が食えるか!?

 

 

 

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

 

 

 

この記事はコーヒーブレイク的な内容です。

このブログの記事では VBA 、 VBS でのコーディングが多いので、世の中で VBA の需要がどのくらいあるのか気になって調べてみました。


業務の募集内容を以下にリストアップします。


GUIの作成
・大量データの計算加工
・フォーマット加工
・会員管理システム
・物流の需給シミュレーション
・業務改善
・伝票発行システム
・図面変更連絡ツール
・料金システム
・証券系リスク管理システム

 

 

 

VBA 、 VBS に限らなず、ライトスクリプト系のプログラミング言語をメインで使う人も上にリストアップしたシステムの雛形でも自作しておくと良いのかもしれませんね。

 

 

 

以上

VBScript による IE への入力




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



この記事の目次




目的


Web ページを操作する為に操作したいタグオブジェクトを取得する関数を作成します。




関数

ソースコード

この関数は上位オブジェクト、タグ名、タグに含まれる文字列を引数としてタグオブジェクトを返す関数です。タグが見つからなければ Nothing を返します。
『VBS』というフォルダの中に『myFunc』というフォルダを作成していて、自作した関数は全て『myFunc』フォルダに保存します。

getTagByStr-objUpper-TagName-InString.vbs

Function getTagByStr(objUpper, TagName, InString)
   '-------------------------------------------------------------------------------------------------------------------
   ' TagName タグの内、 InString を含むタグを取得
   '-------------------------------------------------------------------------------------------------------------------
   Set objTags = objUpper.document.getElementsByTagName(TagName)
   set LookAtTag = Nothing
   for i = 0 To objTags.Length - 1
      if Instr(objTags(i).outerHTML, InString) then
         Set LookAtTag = objTags(i)
         exit for
      end if
   Next
   '-------------------------------------------------------------------------------------------------------------------
   ' 対象IEオブジェクトがあった場合
   '-------------------------------------------------------------------------------------------------------------------
   if LookAtTag is Nothing then
      Msgbox "対象の " & InString & " を含む <" & TagName & "> タグを見つけることが出来ませんでした。"
   end if
   Set objTags = Nothing
   Set getTagByStr = LookAtTag
End Function

使い方

作成した getTagByStr_objUpper-TagName-InString.vbs ファイルを呼び出して使うプログラムを書きます。
このプログラムは『VBS』フォルダの直下に保存します。

main.vbs

'------------------------------------------------------------------------------
' 自作関数のインクルード
'------------------------------------------------------------------------------
call IncludeFunction()
 
'_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
' IE を開く
'_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
   '--- 変数宣言 ---
   targetURL = "https://transit.yahoo.co.jp/"
   '--- 実行 ---
   call newIE(targetURL)
'_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
' IE オブジェクトを取得する
'_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
   '--- 変数宣言 ---
   targetURL = "https://transit.yahoo.co.jp/"
   '--- 実行 ---
   Set objIE = getObjectIE(targetURL)
   if objIE is nothing then
      '--- オブジェクトが無いので強制終了 ---
      WScript.Quit
   else
      '--- 続行 ---
   end if
'_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
' 文字列「 sfrom 」が含まれる input タグを取得する
'_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
   '--- 変数宣言 ---
   TagName = "input"
   InString = "sfrom"
   '--- 実行 ---
   set sfrom = getTagByStr(objIE, TagName, InString)
   sfrom.value = "東京"
'_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
' 文字列「 sto 」が含まれる input タグを取得する
'_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
   '--- 変数宣言 ---
   TagName = "input"
   InString = "sto"
   '--- 実行 ---
   set sto = getTagByStr(objIE, TagName, InString)
   sto.value = "品川"
'_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
' 文字列「 searchModuleSubmit 」が含まれる input タグを取得する
'_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
   '--- 変数宣言 ---
   TagName = "input"
   InString = "searchModuleSubmit"
   '--- 実行 ---
   set Btn = getTagByStr(objIE, TagName, InString)
   Btn.Click
 
'------------------------------------------------------------------------------
' 終了通知
'------------------------------------------------------------------------------
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
      if instr(1, FuncFile, ".txt") = 0 then
         Set objFile = objFileSys.OpenTextFile(crrDir & "\" & FuncFile)
         ExecuteGlobal objFile.ReadAll()
         objFile.Close
      end if
   Next
   '----------------------------------------------------------------------------
   ' メモリ解放
   '----------------------------------------------------------------------------
   Set objFile = Nothing
   Set objFolder = Nothing
   Set objFileSys = Nothing
end sub




コメント

これで、 main.vbs を実行すると 東京から品川までの路線検索が出来たんでは無いでしょうか?
IE の オブジェクトから TagName で指定したタグを抽出し、 InString で指定した文字列が含まれているタグのオブジェクトを取得して、操作しています。
タグのオブジェクトが見つからない時は Nothing を返します。




以上

VBScript による IE オブジェクトの取得




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



この記事の目次




目的


Web をスクレイピングする為には IEオブジェクトが必要です。
URL を手掛かりに IE のオブジェクトを取得する関数を作成します。




関数

ソースコード

この関数は URL を引数として IE オブジェクトを返す関数です。 URL が見つからなければ Nothing を返します。
『VBS』というフォルダの中に『myFunc』というフォルダを作成していて、自作した関数は全て『myFunc』フォルダに保存します。

getObjectIE-targetURL.vbs

Function getObjectIE(targetURL)
   '-------------------------------------------------------------------------
   ' IE オブジェクトの取得
   '-------------------------------------------------------------------------
      strMsg = ""
      '-----------------------------------------------------------------------
      ' シェルオブジェクトの生成
      '-----------------------------------------------------------------------
      Set objShell = CreateObject("Shell.Application")
      '-----------------------------------------------------------------------
      ' ウインドウコレクションのスキャン
      '-----------------------------------------------------------------------
      Set objIE = Nothing
      For Each objWindow In objShell.Windows
         '---------------------------------------------------------------------
         ' IWebBrowser2 だったら
         '---------------------------------------------------------------------
         If TypeName(objWindow) = "IWebBrowser2" Then
            '-------------------------------------------------------------------
            ' Internet Explorer だったら
            '-------------------------------------------------------------------
            if objWindow.Name = "Internet Explorer" then
               '-----------------------------------------------------------------
               ' targetURL が見つかったら
               '-----------------------------------------------------------------
               LookAtURL = objWindow.LocationURL
               if LookAtURL = targetURL then
                  Set objIE = objWindow
                  Exit For
               end if
            end if
         End If
      Next
      Set objShell = Nothing
   '-------------------------------------------------------------------------
   ' 対象IEオブジェクトがあった場合
   '-------------------------------------------------------------------------
   if objIE is Nothing  then
      Msgbox "対象となる IE を見つけることが出来ませんでした。"
   else
      'Msgbox strMsg
   end if
   Set getObjectIE = objIE
End Function

使い方

作成した getObjectIE_targetURL.vbs ファイルを呼び出して使うプログラムを書きます。
このプログラムは『VBS』フォルダの直下に保存します。

main.vbs

'------------------------------------------------------------------------------
' 自作関数のインクルード
'------------------------------------------------------------------------------
call IncludeFunction()
 
'_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
' IE を開く
'_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
   '--- 変数宣言 ---
   targetURL = "https://transit.yahoo.co.jp/"
   '--- 実行 ---
   call newIE(targetURL)
'_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
' IE オブジェクトを取得する
'_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
   '--- 変数宣言 ---
   targetURL = "https://transit.yahoo.co.jp/"
   '--- 実行 ---
   Set objIE = getObjectIE(targetURL)
   if objIE is nothing then
      '--- オブジェクトが無いので強制終了 ---
      WScript.Quit
   else
      '--- 続行 ---
      MsgBox "IE オブジェクト捕捉"
   end if

'------------------------------------------------------------------------------
' 終了通知
'------------------------------------------------------------------------------
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
      if instr(1, FuncFile, ".txt") = 0 then
         Set objFile = objFileSys.OpenTextFile(crrDir & "\" & FuncFile)
         ExecuteGlobal objFile.ReadAll()
         objFile.Close
      end if
   Next
   '----------------------------------------------------------------------------
   ' メモリ解放
   '----------------------------------------------------------------------------
   Set objFile = Nothing
   Set objFolder = Nothing
   Set objFileSys = Nothing
end sub




コメント

これで、 main.vbs を実行すると targetURL を開いている IE の オブジェクトを objIE に格納します。 targetURL が見つからない時は Nothing を objIE に格納します。




以上