![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
こんな作業を自動化・高速化できないでしょうか。
ある入力フォームについて、Excelデータから転記する作業をしています。その入力フォームには縦横に入力用テキストボックスが並んでいるわけですが、横方向の入力をする場合
ExcelファイルのA1セルをコピー(Ctrl+C) → 入力フォームをアクティブに(Alt+Tab) → 貼付け(Ctrl+V) → Excelをアクティブに(Alt+Tab) → ExcelのB1セルへ移動(Tab)してコピー(Ctrl+C) → 入力フォームをアクティブに(Alt+Tab) → 次のテキストボックスへ移動(Tab)して貼付け(Ctrl+V)
・・・というのを繰り返してやっています。非常に単純な機械的繰り返し作業なので、なんとか自動化できないでしょうか。
ちなみにA1セル~B1セルを一度にコピーしてテキストボックスに貼付けても、2つのテキストボックスに一度に貼付けられたりはせず、1つのテキストボックスにしか貼付きません。また、データの自動取込み機能などは、その入力フォームにはありません。
No.7ベストアンサー
- 回答日時:
それではマクロの部分だけ少し変更
---------------
Sub KDMacro2()
Dim v As Range
AppActivate ("無題 - メモ帳")
For Each v In Range(Range("A1"), Range("A1").End(xlDown).End(xlToRight))
SendKeys v.Value
SendKeys "{TAB}"
Call Sleep(1000)
Next
end sub
---------------
("無題 - メモ帳")←この部分を目的のウィンドーの名前に変更
添付画像参照
※名前が付いていないウインドーの場合はウインドウハンドルを取得する必要がありますが
面倒臭いのでその時はまたその時で
Call Sleep(1000)←この数値を小さくすると書き込みの速度が早くなります
※ただあまり早くし過ぎると、対象のアプリの反応に拠っては正しく動作しないので注意
注意
目的のウィンドーは最小化しないで下さい
![「転記作業を自動化できないか」の回答画像7](http://oshiete.xgoo.jp/_/bucket/oshietegoo/images/media/4/528952935_5497f211ae79c/M.jpg)
No.6
- 回答日時:
No2です
難しいとは書いたけど簡単な例を一つ
-----------------
Declare Sub Sleep Lib "kernel32.dll" (ByVal dwMilliseconds As Long)
Sub KDMacro()
Dim v As Range
AppActivate Shell("Notepad.exe", vbNormalFocus)
For Each v In Range(Range("A1"), Range("A1").End(xlDown).End(xlToRight))
SendKeys v.Value
SendKeys "{TAB}"
Call Sleep(1000)
Next
end sub
-----------------
↑
これを標準モジュールに貼り付けて
A1セルを起点になにか適当なデータを入力して実行してみてください
添付された図のようにデータを順にメモ帳に書き出します
1セルのデータを書き出してTABで間隔開けてとしていますので、質問内容の動作に近いと思いますよ
![「転記作業を自動化できないか」の回答画像6](http://oshiete.xgoo.jp/_/bucket/oshietegoo/images/media/2/528952935_5497f211384a9/M.jpg)
なるほど確かにできました。贅沢を言うようなのですが、AppActivate Shell("Notepad.exe", vbNormalFocus)と、アプリケーション名を具体的に指定し宣言しておくことは必須なのでしょうか。その入力フォームのアプリケーション名をこのように指定できる自信がなく、できれば「Alt+Tab」で切り替えながらやる方法を取れないかなと思っているのですが・・・。
No.5
- 回答日時:
>SendKeysとかもやってみましたが、Excelどうしのやり取りならともかく、別アプリケーションとのコピペやり取りといったときに、上手く行かない気がするのですが、気のせいですかね。
他のアプリケーションを使用する場合でも、すべての操作をショートカットで実行できるならSendkeysを使うことでコピーペーストが可能です。
具体的にはマクロを実行するときにExcelと入力フォームの2つのアプリケーションを立ち上げておいて、ExcelでCtrl+Cでコピー、Alt+タブでアプリケーションを切り替えて、Tabキーによるテキストボックスの選択とCtrl+Vのショートカット操作での貼り付け作業を繰り返せばよいことになります。
このときExcelでマクロ実行時のスタートセル(たとえばA1セル)を決めておき、2つ目のデータのB1セルの選択はAlt+Tabでエクセルに戻ってきたときに→キーのショートカット操作だけでB1セルを選択することが(すべてのマクロ操作を実行)できます。
たとえばExcelとメモ帳のみを立ち上げておいて、以下のコードを実行しても、メモ帳にデータが1回貼り付けばいい方で、上手く行きません。動作が短時間に連続しすぎるといけないのかと思ってSleepも入れたのですが、駄目です。Excel2010でやってみたのですが、なぜ上手くいかないのか。
Option Explicit
Declare Sub Sleep Lib "kernel32.dll" (ByVal dwMilliseconds As Long)
Sub test()
Dim i As Integer
Do Until i = 5
ActiveCell.Copy
ActiveCell.Offset(1, 0).Activate
Call Sleep(1000)
Application.SendKeys "%{TAB}", True
Application.SendKeys "^v", True
Call Sleep(1000)
Application.SendKeys "%{TAB}", True
i = i + 1
Loop
End Sub
No.4
- 回答日時:
ショートカットキー操作をマクロで実行する場合はSendkeysのコマンドを利用します。
使用法は以下のページを参考にしてください。
http://msdn.microsoft.com/ja-jp/library/office/f …
しかし、質問内容だけを見ると、入力用のフォームのテキストボックスにわざわざコピー貼り付けするのではなく、直接元データをデータベースシート(?)に貼り付けるようなマクロにするほうが合理的なような気がします。
>質問内容だけを見ると、入力用のフォームのテキストボックスにわざわざコピー貼り付けするのではなく、直接元データをデータベースシート(?)に貼り付けるようなマクロにするほうが合理的なような気がします。
この意味は良く分かりませんが、そもそも入力フォームに入力するために下書きとして、Excelファイルを作るような感じなんですよね。最終目的が、入力フォームに入力・送信することなので・・・。SendKeysとかもやってみましたが、Excelどうしのやり取りならともかく、別アプリケーションとのコピペやり取りといったときに、上手く行かない気がするのですが、気のせいですかね。
No.2
- 回答日時:
簡単じゃないけど出来ますよ
キーボードでの入力内容をそのまま再現するだけなら
http://3rd.geocities.jp/kaito_extra/Source/Keybo …
↑
こんな方法で
Excelから入力フォームを操作するなら
http://www.moug.net/tech/exvba/0150106.html
http://www.excel-vba.net/excel-function-018.html
http://www.excel-vba.net/excel-application-006.h …
↑
こんな感じで
今回の場合はエクセル内のデータを転記するようなので、Excelのマクロでクリップボードを使い貼付けするような処理が適しているとおもいます
No.1
- 回答日時:
エクセルのことは詳しくありませんが…、
プレイヤーの操作を覚えて繰り返し再生するようなフリーソフトが沢山あります。
『キーボードマクロ』『マウスマクロ』などで検索してみてください。
キーボードマクロのソフトでは「FreeMacro!」がシンプルで使いやすかったのですが、
残念ながら64bitのWindows7では動作しませんでした…(--;。
ありがとうございました。書き忘れていましたが、入力フォームについて。横10マス×縦50マスというように、横のテキストボックス数は一定で縦方向は無限に続く、単純な形式です。「HiMacroEx」というのも使ってみましたが、なんかExcelでやると「クリップボードを空にできませんでした」とかいうエラーが出ちゃうんですよね。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Windows 7 ショートカットキー 応用編 どういうの主に使いますか? 2 2022/12/28 23:46
- Excel(エクセル) VBA 特定の列に入っているテキストをコピペ 2 2023/06/14 11:24
- Excel(エクセル) Excelに文字データのみを貼り付けたい 8 2023/05/03 15:38
- Access(アクセス) アクセス 意図せずサブプロシージャを移動してしまうのを止めたい 1 2022/09/02 09:19
- その他(データベース) Accessフォームからパラメーターで表示したレコードを指定のExcelのセルへ転送する方法について 2 2022/08/22 18:04
- Visual Basic(VBA) Excel vbaについて知恵もしくは、コード教えて下さいm(__)m ① 表にあるデータをコピー、 2 2022/09/01 23:57
- Excel(エクセル) マクロVBA別Excelブックにデータ転記 2 2022/07/10 23:35
- Excel(エクセル) ログインIDの一発入力? 5 2023/07/07 12:30
- Excel(エクセル) 複数の同じ様式のエクセルデータの任意セルへの入力について 3 2022/04/27 15:00
- Excel(エクセル) Excel関数について質問です。 シート1に入力シートがあります。 =A1 =B1などで離れた数字な 5 2022/12/18 13:42
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
EXCELで特定のセルに表示...
-
Excel内での検索結果をシート...
-
エクセル 数字をすべて○などの...
-
Excelで、図形内の文字をセルに...
-
マクロを実行すると画像がズレ...
-
エクセルでPDFリンクを大量...
-
VBA 見つからなかった時の処理
-
現在のセルの位置を返す関数は...
-
エクセルでページ数をあるセル...
-
太字に設定されているセルの個...
-
Excelで挿入した図をセルの中央...
-
セルがクリックされた回数をカ...
-
フォントの色を指定して削除出...
-
エクセル 未入力セルがあると...
-
Excel2007 色のカウント (VBA)
-
クリックすると文章が表示され...
-
Excel ハイパーリンクのURLを別...
-
エクセル シート保護された共...
-
エクセルでの検索ボックスの作...
-
シート保護とグループ化機能を...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
EXCELで特定のセルに表示...
-
エクセル 数字をすべて○などの...
-
Excel内での検索結果をシート...
-
太字に設定されているセルの個...
-
クリックすると文章が表示され...
-
Excelで挿入した図をセルの中央...
-
【マクロ】ファイル名の変更に...
-
Excelで、図形内の文字をセルに...
-
マクロを実行すると画像がズレ...
-
Excel ハイパーリンクのURLを別...
-
フォントの色を指定して削除出...
-
Excelでセルをクリックす...
-
Excel2007 色のカウント (VBA)
-
エクセルでの検索ボックスの作...
-
現在のセルの位置を返す関数は...
-
エクセル マクロ チェックボックス
-
VBA 見つからなかった時の処理
-
アポストロフィーの一括挿入 ...
-
エクセルでPDFリンクを大量...
-
セルの値が変ると自動でマクロ...
おすすめ情報