Microsoft Excel VBA - メモリーの使用状況を表示する
◆概要
このページは、Excelでメモリー容量を取得する方法について記載しています。
APIのGlobalMemoryStatus関数を使うとメモリー容量を取得することができます。GlobalMemoryStatus関数は2GBを超えるとエラーになりますので、2GBを超える場合はMEMORYSTATUSEX関数を使います。
◆Sample code
次の例は、空き物理メモリを取得しメッセージボックスに表示します。
Private Type MEMORYSTATUSEX dwLength As Long ' MEMORYSTATUSの大きさ dwMemoryLoad As Long ' 使用中メモリの割合 ullTotalPhys As Currency ' 全物理メモリ ullAvailPhys As Currency ' 空き物理メモリ ullTotalPageFile As Currency ' ページング可能な最大ファイルサイズ ullAvailPageFile As Currency ' 現在ページング可能なファイルサイズ ullTotalVirtual As Currency ' 最大仮想メモリ ullAvailVirtual As Currency ' 現在使用可能な仮想メモリ ullAvailExtendedVirtual As Currency End Type Private Declare Function GlobalMemoryStatusEx _ Lib "kernel32" (mseStatus As MEMORYSTATUSEX) As Long Private Type MEMORYSTATUS dwLength As Long ' MEMORYSTATUSの大きさ dwMemoryLoad As Long ' 使用中メモリの割合 dwTotalPhys As Long ' 全物理メモリ dwAvailPhys As Long ' 空き物理メモリ dwTotalPageFile As Long ' ページング可能な最大ファイルサイズ dwAvailPageFile As Long ' 現在ページング可能なファイルサイズ dwTotalVirtual As Long ' 最大仮想メモリ dwAvailVirtual As Long ' 現在使用可能な仮想メモリ End Type Private Declare Sub GlobalMemoryStatus Lib "kernel32" ( _ lpBuffer As MEMORYSTATUS) Sub Test() Dim dMemoryLoad As Double ' メモリ使用率 Dim dTotPhys As Double ' 全物理メモリ Dim dAvailPhys As Double ' 利用可能メモリ Dim dTotalPageFile As Double ' ページング可能な最大ファイルサイズ Dim dAvailPageFile As Double ' 現在ページング可能なファイルサイズ Dim dTotalVirtual As Double ' 最大仮想メモリ Dim dAvailVirtual As Double ' 現在使用可能な仮想メモリ Dim res As Long Dim mem As MEMORYSTATUS Dim MemStat As MEMORYSTATUSEX ' GlobalMemoryStatus はWindows98ではエラーになる On Error Resume Next MemStat.dwLength = Len(MemStat) 'If Err.Number = 0 Then res = GlobalMemoryStatusEx(MemStat) If res Then dMemoryLoad = MemStat.dwMemoryLoad ' メモリ使用率 dTotPhys = MemStat.ullTotalPhys * 10000& '/ (1024& * 1024)'全物理メモリ dAvailPhys = MemStat.ullAvailPhys * 10000& ' 利用可能メモリ dTotalPageFile = MemStat.ullTotalPageFile ' ページング可能な最大ファイルサイズ dAvailPageFile = MemStat.ullAvailPageFile ' 現在ページング可能なファイルサイズ dTotalVirtual = MemStat.ullTotalVirtual ' 現在使用可能な仮想メモリ ' don't assign 2+gig to a Long Else ' 次のコードはWindows98ではオーバーフローになってエラーとなる ' しかし、Windows 98では2GB以上はありそうもない Call GlobalMemoryStatus(mem) dMemoryLoad = mem.dwMemoryLoad ' メモリ使用率 dTotPhys = mem.dwTotalPhys ' 全物理メモリ dAvailPhys = mem.dwAvailPhys ' 利用可能メモリ dTotalPageFile = mem.dwTotalPageFile ' ページング可能な最大ファイルサイズ dAvailPageFile = mem.dwAvailPageFile ' 現在ページング可能なファイルサイズ dTotalVirtual = mem.dwTotalVirtual ' 現在使用可能な仮想メモリ End If ' メッセージボックスにメモリ情報を表示 MsgBox "メモリ使用率:" & dMemoryLoad & vbCrLf & _ "全物理メモリ;" & Format(dTotPhys / (1024& * 1024), "#,##0") & "MB" & vbCrLf & _ "利用可能メモリ;" & Format(dAvailPhys / (1024& * 1024), "#,##0") & "MB" & vbCrLf & _ "ページング可能な最大ファイルサイズ;" & Format(dTotalPageFile / 1024, "#,##0") & "KB" & vbCrLf & _ "現在ページング可能なファイルサイズ;" & Format(dAvailPageFile / 1024, "#,##0") & "KB" & vbCrLf & _ "現在使用可能な仮想メモリ;" & Format(dTotalVirtual / 1024, "#,##0") & "KB" End Sub
◆実行結果