1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

AutoitでEXCELの値を他のフォームに移し替える。

Posted at

どれで役立つか

・会社独自のソフトに値を入れ込む必要があるが、
 csvの読み込みができないので一つずつ打ち込んで入力している方に。

はじめに

今回は自動化ツールのautoitを使って
Excelでまとめた値を他のフォームに移し替える作業についてまとめてみました。

csvで一気に取り込みができたら楽なのですが
その仕様がなく、EXCELの値をコピーし、独自ソフトに貼り付けのループというのは意外と多いです。

今回のコードは、EXCELの値をメモ帳にコピーしているだけですが
メモ帳を「フォームの特定の場所」に変更すれば応用できると思います。

材料

・autoit
autoスパイツール

スパイツールは、フォームの特定の場所を取得をするためにを必要です。
以前の記事で使い方をまとめています。

素材について

pic1.jpg

今回は画像のように
顧客,品番,数量,価格をエクセルで入力してあるものとします。

コード

excel.au3
# 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の中に入れておきます。
pic2.jpg

書き順について

この記事は、プログラミングがわからない人向けに書いています。
実際に私が書いた順番はこのような感じです。

excel(ver0.1).au3
# 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で聞き出して
あとで活用することに

excel(ver0.5).au3
# 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,"お知らせ","おわったよ")

スパイツールでメモ帳の「この項目はなんていう」を取得。
それを設定すると型宣言と必要みたいなので、今のようなコードになりました。

excel.au3
# 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"(上書き)でも動くと思います。

また私の会社では、実際に売上計上をプログラムで自動計上しています。

今回紹介した仕様に追加して
在庫がない場合にフォームからエラーが出た時の処理も記載しています。

・品番を入れたら、「在庫がないエラー」が出ていないか検知
・その分は計上しない。
・エクセルのその行の所に「在庫なし」と記載
・次の計上スタート

パソコンでパチパチ打つだけ作業は自動化して
考える仕事に注力しています。

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?