アニメーションカウントアップの作成(Microsoft Excel)
Rayは、可能であれば、セル内の値の「カウントアップ」をアニメーション化する方法を望んでいます。たとえば、セルB7では、値が23である可能性があります。セルE4でその値を参照し、セルE4を0から23(0、1、2、3など)までカウントアップして、各番号を表示したいとします。順番に。
Excelでこれを行う組み込みの方法はありませんが、マクロを使用してアニメーションを行うことができます。基本的に、マクロはセルB7にあるものを見つけてから、For … Nextループを使用して、0からB7にあるものまでの値をステップスルーする必要があります。ループの各反復中に、E4の値が変更され、ある種の遅延が発生します。
マクロの遅延部分は、マクロの動作を変更する機能を実際に提供するものです。アニメーションが機能しているように見せるためには、遅延が必要です。これがないと、E4の数値の増分が速すぎます。 Excelには、遅延を実装するための便利な方法がいくつか用意されています。たとえば、このマクロの例は、スリープ機能に依存しています。
#If VBA7 Then Private Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) #Else Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) #End If Private Sub Worksheet_Change(ByVal Target As Range) Dim n As Integer Const cellWatch As String = "$B$7" Const cellCount As String = "$E$4" Const msec As Long = 200 ' milliseconds If Target.Address = cellWatch Then Application.EnableEvents = False Range(cellCount).Show If IsNumeric(Target) Then For n = 0 To Target ' skipped if Target < 0 Range(cellCount) = n Sleep msec ' delay each increment Next n End If Range(cellCount) = Target Application.EnableEvents = True End If End Sub
このコードは、ワークシートで何かが変更されるたびに実行されるように設計されているため、ThisWorksheetモジュールに追加する必要があります。コードは、変更されるセルがターゲットセル(B7)であるかどうかを確認します。そうである場合は、そこで値を取得し、セルE4にあるものを更新するFor … Nextループにジャンプします。スリープ機能は、この場合、E4の各更新の間に200ミリ秒を遅らせるために使用されます。
より短く、Worksheet_Changeイベントハンドラーに依存しないマクロが必要な場合は、次のことを検討してください。これは、Waitメソッドを利用してFor … Nextループで一時停止します:
Sub CountUp() Dim J As Integer For J = 0 To Range("B7").Value Range("E4").Value = J Application.Wait (Now + TimeValue("0:00:01")) Next J Range("E4").Value = Range("B7").Value End Sub
このバージョンのマクロは、セルE4への各更新の間に1秒間一時停止します。
ある種の遅延を実装するこのようなマクロを使用する場合は常に、ワークシートの応答性が低下する可能性があることに注意してください。これはその遅延によるものですが、セルE4の値がどれほど大きいかを示しています。 (値が大きいほど、総遅延が長くなります。)
注:
このページ(または_ExcelTips_サイトの他のページ)で説明されているマクロの使用方法を知りたい場合は、役立つ情報を含む特別なページを用意しました。
_ExcelTips_は、費用効果の高いMicrosoftExcelトレーニングのソースです。
このヒント(13753)は、Microsoft Excel 2007、2010、2013、2016、2019、およびOffice365のExcelに適用されます。