どれで役立つか
・会社独自のソフトに値を入れ込む必要があるが、
csvの読み込みができないので一つずつ打ち込んで入力している方に。
はじめに
今回は自動化ツールのautoitを使って
Excelでまとめた値を他のフォームに移し替える作業についてまとめてみました。
csvで一気に取り込みができたら楽なのですが
その仕様がなく、EXCELの値をコピーし、独自ソフトに貼り付けのループというのは意外と多いです。
今回のコードは、EXCELの値をメモ帳にコピーしているだけですが
メモ帳を「フォームの特定の場所」に変更すれば応用できると思います。
材料
・autoit
・autoスパイツール
スパイツールは、フォームの特定の場所を取得をするためにを必要です。
以前の記事で使い方をまとめています。
素材について
今回は画像のように
顧客,品番,数量,価格をエクセルで入力してあるものとします。
コード
# include <Excel.au3>
# include <include/UIAWrappers.au3>
AutoItSetOption("MustDeclareVars", 1)
dim $oExcel
dim $oWorkbook
dim $i
dim $customer,$hinban,$lot,$price
dim $start,$end
$start = InputBox("桁数について","はじめての行は")
$end = InputBox("桁数について","終わりの行は")
;メモ帳の特定場所をmemo.window.editという変数に格納
_UIA_setVar("memo.window.edit","title:=テキスト エディター;classname:=Edit")
;============
; Excelを起動します
$oExcel = _Excel_Open()
; Excelで開くファイルを指定します(下記ではデスクトップ上のbook1.xlsxを開く想定)
$oWorkbook = _Excel_BookOpen($oExcel, "C:\Users\Desktop\book1.xlsx")
For $i = #start To $end ;はじまりからおわりまでfor
$customer = $oWorkbook.activesheet.cells($i,1).value ; 行i番目 列1番目の値を$customerとする。
$hinban = $oWorkbook.activesheet.cells($i,2).value ; 行i番目 列2番目の値を$hinbanとする。
$lot = $oWorkbook.activesheet.cells($i,3).value
$price = $oWorkbook.activesheet.cells($i,4).value
_UIA_action("memo.window.edit","setfocus")
_UIA_action("memo.window.edit","type",$customer) ;メモ帳に貼り付け
_UIA_action("memo.window.edit","type",$hinban)
_UIA_action("memo.window.edit","type",$lot)
_UIA_action("memo.window.edit","type",$price)
Next
MsgBox(0,"お知らせ","おわったよ")
スパイツールを使ってUIAを使う場合は、
拡張機能の「UIAWrappers.au3」と「CUIAutomation2.au3」が必要です。
また型宣言も必要になるっぽいです。dimの所です。VBAみたい。
ファイル配置はこちらです。
スパイツールからコピペしてきた「UIAWrappers.au3」と「CUIAutomation2.au3」を
includeの中に入れておきます。
書き順について
この記事は、プログラミングがわからない人向けに書いています。
実際に私が書いた順番はこのような感じです。
# include <Excel.au3>
; Excelを起動します
$oExcel = _Excel_Open()
; Excelで開くファイルを指定します(下記ではデスクトップ上のbook1.xlsxを開く想定)
$oWorkbook = _Excel_BookOpen($oExcel, "C:\Users\Desktop\book1.xlsx")
For $i = 1 To 2 ;はじまりからおわりまでfor
$customer = $oWorkbook.activesheet.cells($i,1).value ; 行i番目 列1番目の値を$customerとする。
MsgBox(0,"お知らせ","$customer")
Next
autoitでExcelを操作するときに
Excel.au3を読みこませます。
そこからエクセル開いて、どのファイルを開くか選択して、
行1行目、列1行目(A1)を取得してMsgboxで出力しました。
取得できる項目を増やして
はじまりの行とおわりの行をinputboxで聞き出して
あとで活用することに
# include <Excel.au3>
$start = InputBox("桁数について","はじめての行は")
$end = InputBox("桁数について","終わりの行は")
; Excelを起動します
$oExcel = _Excel_Open()
; Excelで開くファイルを指定します(下記ではデスクトップ上のtest.xlsxを開く想定)
$oWorkbook = _Excel_BookOpen($oExcel, "C:\Users\Desktop\book1.xlsx")
For $i = $start To $end
$customer = $oWorkbook.activesheet.cells($i,1).value
$hinban = $oWorkbook.activesheet.cells($i,2).value
$lot = $oWorkbook.activesheet.cells($i,3).value
$price = $oWorkbook.activesheet.cells($i,4).value
Next
MsgBox(0,"お知らせ","おわったよ")
スパイツールでメモ帳の「この項目はなんていう」を取得。
それを設定すると型宣言と必要みたいなので、今のようなコードになりました。
# include <Excel.au3>
# include <include/UIAWrappers.au3>
AutoItSetOption("MustDeclareVars", 1)
dim $oExcel
dim $oWorkbook
dim $i
dim $customer,$hinban,$lot,$price
dim $start,$end
$start = InputBox("桁数について","はじめての行は")
$end = InputBox("桁数について","終わりの行は")
;メモ帳の特定場所をmemo.window.editという変数に格納
_UIA_setVar("memo.window.edit","title:=テキスト エディター;classname:=Edit")
;============
; Excelを起動します
$oExcel = _Excel_Open()
; Excelで開くファイルを指定します(下記ではデスクトップ上のbook1.xlsxを開く想定)
$oWorkbook = _Excel_BookOpen($oExcel, "C:\Users\Desktop\book1.xlsx")
For $i = #start To $end ;はじまりからおわりまでfor
$customer = $oWorkbook.activesheet.cells($i,1).value ; 行i番目 列1番目の値を$customerとする。
$hinban = $oWorkbook.activesheet.cells($i,2).value ; 行i番目 列2番目の値を$hinbanとする。
$lot = $oWorkbook.activesheet.cells($i,3).value
$price = $oWorkbook.activesheet.cells($i,4).value
_UIA_action("memo.window.edit","setfocus")
_UIA_action("memo.window.edit","type",$customer) ;メモ帳に貼り付け
_UIA_action("memo.window.edit","type",$hinban)
_UIA_action("memo.window.edit","type",$lot)
_UIA_action("memo.window.edit","type",$price)
Next
MsgBox(0,"お知らせ","おわったよ")
おわりに
今回はメモ帳でしたが
会社独自のソフト(会計ソフト、売上計上ソフトなど)の「この部分」というのを取得して
今回のコード書き換えると出来上がると思います。
_UIA_actionでは
"type"(追記)ですが"setvalue"(上書き)でも動くと思います。
また私の会社では、実際に売上計上をプログラムで自動計上しています。
今回紹介した仕様に追加して
在庫がない場合にフォームからエラーが出た時の処理も記載しています。
・品番を入れたら、「在庫がないエラー」が出ていないか検知
・その分は計上しない。
・エクセルのその行の所に「在庫なし」と記載
・次の計上スタート
パソコンでパチパチ打つだけ作業は自動化して
考える仕事に注力しています。