質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

1回答

9101閲覧

VBA cpu使用率取得

drumath2237

総合スコア91

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

7クリップ

投稿2014/11/24 01:53

プログラミング初心者のものです。管理者の制約で、学校でタスクマネージャを開くことができません。そこでエクセルvbaでタスクマネージャを再現しようと思い、日々精進しております。学校には4Gのcore i5搭載のパソコンとcore i7搭載の8Gのパソコンがあります。どちらもOSは7です。
今のところcpu使用率と周波数、物理メモリ使用率のグラフの描画に成功していますが、やはり重いです。そこでもっと軽く動くプログラムがほしいと思っています。ご協力お願いします。
またそのコードの解説までしていただくと、ありがたく幸いに思います。
(今はテストが近いので最近やっていないのですが・・・。)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自分も再現してみましたが、既存のタスクマネージャーの普通速度と同じくらいの速度で更新されました。(OS Windows10 ,CPU Core i7 ,Excel 2013)

CPU使用率は4%くらい増えました。当然Excelは占有されてしまうので重たいと言われればそれまでかもしれませんが、他のアプリケーションを操作する分には影響が無い様に思われます。

自分のコードだと短くする要素がこれ以上ないので、アドバイスができないです。
VBで作れば更新が早いのが作れると思うのですが、Excelのグラフ再計算機能が少しネックになっている気がしました。
参考サイト:http://www.wmifun.net/sample/

ちなみに、エクセルに開始ボタンと、停止ボタンを付けて、それぞれにマクロを割り振っています。

参考になれば幸いです。

以下コード

VBA

1Option Explicit 2Dim fStop As Boolean 'グローバル変数を宣言 3Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) 4 5Sub グラフ描画開始() 6 fStop = False 7 Do While True ’無限ループ 8 Call データ更新 9 Sleep 1 '描画速度を変えたい場合値を大きくすると更新頻度が下がる。 10 DoEvents 11 DoEvents 'グラフを更新するために2個必要 12 If fStop = True Then 13 MsgBox "グラフ更新停止" 14 Exit Do 15 End If 16 Loop 17End Sub 18 19Public Sub 停止ボタン() 20 fStop = True 21End Sub 22 23Sub データ更新() 24 'WMIにて使用する各種オブジェクトを定義・生成する。 25 Dim oClassSet As Object 26 Dim oClass As Object 27 Dim oLocator As Object 28 Dim oService As Object 29 Dim CPU使用率 As Long 30 Dim Tmp As Variant 'グラフデータをずらすために使う 31 32 'ローカルコンピュータに接続する。 33 Set oLocator = CreateObject("WbemScripting.SWbemLocator") 34 Set oService = oLocator.ConnectServer 35 'クエリー条件を WQL にて指定する。 36 Set oClassSet = oService.ExecQuery("Select * From Win32_Processor") 37 'コレクションを解析する。 38 For Each oClass In oClassSet 39 CPU使用率 = oClass.LoadPercentage 40 Next 41 42 Tmp = Range("C6:C103").Value 'CPUの使用率が格納されているセル 43 Range("C5:C102").Value = Tmp '1セルずらす 44 Range("C103").Value = CPU使用率 '最後のセルに最新の値を入れる。 45 46 '使用した各種オブジェクトを後片付けする。 47 Set oClassSet = Nothing 48 Set oClass = Nothing 49 Set oService = Nothing 50 Set oLocator = Nothing 51End Sub

投稿2017/07/04 05:06

SuperTarokun

総合スコア44

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問