この記事は、Web情報をExcelへコピペ収集する、それも業務でひたすらコピペを繰り返さなければならない人へ向けて書きました。
-
Web記事の収集対象部をドラッグしてコピー(Ctl+Cキー)
-
Excelのウィンドウへ表示切替(Alt+Tabキー)
-
Excelのセルを選択してペースト(Ctl+Vキー)
-
Webブラウザのウィンドウへ表示切替(Alt+Tabキー)
マクロを使用すると次の操作で可能になります。
-
Web記事の収集対象部をドラッグ
-
Excelのウィンドウへ表示切替(Alt+Tabキー)
-
Excelのマクロを起動(Ctl+Nキー)
-
Webブラウザのウィンドウへ表示切替(Alt+Tabキー)
文章にするとあまり変化が感じられませんが、コピー操作とExcelのセルを選択する操作は不要となります。
目次
具体例での説明
コピーするものは文字列、数字、日付、URL等いろいろあり、Excelへペーストする度に文字列の整形やセルの書式見直しを行わなければならないことがあります。
例えば以下のような情報を収集する操作で説明します。
収集年月日へ本日の日付をキーボードから入力しますが、マクロを使用すればCtl+Nキーで済みます。
番号、掲載年月日、一般名、販売名、製造販売業者については、IEで表示した回収一覧からCtl+Cキーと画面切替そしてCtl+Vキーを使用してコピペしますが、マクロを使用すればそれぞれ画面切替とCtl+Nキーで済みます。
問題の概要、台数、URLについては、IEで医療機器改修の概要詳細画面を表示し必要箇所をCtl+Cキーと画面切替そしてCtl+Vキーを使用してコピペします。必要があればコピペした内容の改行を削除したりコピペを使用せずキーボードから入力を行います。マクロを使用すればそれぞれ画面切替とCtl+Nキーで済みます。改行の削除はマクロ中で行います。
マクロの仕様
-
アクティブセルが、A2~I2にある場合だけ動作します。
-
コピペする前にアクティブセルの真下のセルの書式をコピペします。
-
IEのアクティブなタブ内で選択されている文字をコピペします。コピペする際に改行文字を削除します。
-
コピペができたら直ぐ横のセルをアクティブにします。
- 収集年月日(A2セル)とURL(I2セル)は、IEで文字が選択されている必要はありません。
ダウンロード
この後に紹介する記事は、わずかマウス1クリックでIEからExcelへのコピペが完了するコピペ業務の効率化と時短の最終ゴールです。是非そちらも一読してください。
VBAマクロの説明
Ctl+Nキーで起動されるマクロ本体:captureFromIE
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
Sub captureFromIE() Dim buf As String If ActiveCell.Row <> 2 Or ActiveCell.Column > 9 Then Exit Sub ActiveCell.Offset(1).Copy '3行目のセル書式をコピー ActiveCell.PasteSpecial (xlPasteFormats) If ActiveCell.Column = 1 Then ActiveCell = Date Else If ActiveCell.Column = 9 Then buf = getUrlFromIE() Else buf = getTextFromIE() End If ActiveCell = buf End If If ActiveCell <> "" Then ActiveCell.Offset(, 1).Activate End If End Sub |
アクティブセルがA2~I2の範囲に存在しない場合は、終了します。
アクティブセルの直ぐ下のセルの書式をコピーします。(列毎に左そろえ、中央そろえの書式が違っています)
アクティブセルがA2の場合は、その日の日付を設定します。
アクティブセルがB2~H2の場合は、IEのアクティブタブのドラッグした部分の文字列をコピペします。
アクティブセルがI2の場合は、IEのアクティブタブで表示しているURLをコピペします。
アクティブセルに文字が設定されたら右隣のセルをアクティブにします。
マクロ本体から呼ばれる関数:getTextFromIE
リターン値:IEのアクティブタブ内のドラッグされた文字列
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
Private Function getTextFromIE() As String Dim objIE As InternetExplorer Dim cb As DataObject Set objIE = getIEObject() If objIE Is Nothing Then MsgBox "IEが起動されてません!", vbCritical Exit Function End If objIE.ExecWB 12, 0, 0 '選択部分をクリップボードへコピー Set cb = New DataObject cb.GetFromClipboard If cb.GetFormat(1) = True Then getTextFromIE = Replace(cb.GetText, vbCrLf, "") '改行文字を削除 End If End Function |
まずIEが起動されているかどうかを判定します。
IEのアクティブタブのドラッグされている文字列をクリップボードへコピーします。
クリップボードから取り出した文字列から改行文字を削除した文字列をリターン値とします。
マクロ本体から呼ばれる関数:getUrlFromIE
リターン値:IEのアクティブタブに表示されるURL
1 2 3 4 5 6 7 8 9 10 11 12 |
Private Function getUrlFromIE() As String Dim objIE As InternetExplorer Set objIE = getIEObject() If objIE Is Nothing Then MsgBox "IEが起動されてません!", vbCritical Exit Function End If getUrlFromIE = objIE.Document.Url End Function |
IEのアクティブタブに表示されるURLをリターン値とします。
マクロ関数から呼ばれる共通関数:getIEObject
リターン値:IEのオブジェクト
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
Private Function getIEObject() As InternetExplorer Dim objShell As Object, objWin As Object Dim objIE As InternetExplorer 'Shellオブジェクトを作成する Set objShell = CreateObject("Shell.Application") For Each objWin In objShell.Windows If objWin.Name = "Internet Explorer" Then objWin.StatusText = "ActiveTest" 'テスト文字列を設定 If objWin.StatusText = "ActiveTest" Then 'アクティブタブ判定 objWin.StatusText = "" Set objIE = objWin Exit For End If End If Next Set getIEObject = objIE End Function |
IEのアクティブタブを見つけたらそのオブジェクトをリターン値とします。
Ctl+Qキーで起動されるマクロ本体(おまけ):addRow
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
Sub addRow() With Range("A2") .EntireRow.Insert .EntireRow.Copy End With With Range("A2") .PasteSpecial Paste:=xlPasteFormats .Select .Value = Date .Offset(, 1).Activate End With Application.CutCopyMode = False End Sub |
3行目の書式を挿入した2行目にコピーします。
A2へ本日の日付を設定します。
まとめ
IEでドラッグした箇所をExcelのアクティブセルへコピペするマクロを紹介しました。
マクロをCtl+Nキーで起動するように設定しましたので次の操作でコピペを行います。
- IEでコピペ箇所をドラッグします。
- Ctl+TabでExcelウィンドウへ切り替えます。
- Ctl+Nキーでコピペします。
- Ctl+TabでIEウィンドウへ切り替えます。
この後の記事では、上記操作をマウス1クリックで行える究極のコピペ方法を紹介します。
コメントを残す