例文を使って繰り返し業務を時短

【マクロ・VBA】縦(行)ループして切り捨て・切り上げをする

エクセル、マクロ、VBAでループして、切り捨て、切り上げ処理する VBA

四捨五入など

  • Round関数   :四捨五入
    • 構文:Round(数値)⇒整数にする
    • 構文:Round(数値・桁数)⇒指定した少数の桁数になるようにする
  • Rounddown関数:切り捨て
  • Roundupp関数 :切り上げ

 参考)Format 関数/Fix関数/Int関数(小数点の切り捨て)

切り捨て処理・RoundDown

構文:

RoundDown(expression, numdecimalplaces)
  • expression: 切り捨てたい数値の式。
  • numdecimalplaces: 切り捨てたい桁数。
Dim x As Double
x = 3.141592653589793
Debug.Print RoundDown(x, 2) ' 3.14

上記の例では、変数 x の値を小数点以下2桁に切り捨てた結果が表示されます。

例文

このVBAコードは、アクティブシート内のすべてのセルの値を0で切り捨てるものです。

Sub 切り捨て()

Dim i As Long
Dim ws As Worksheet
Set ws = ThisWorkbook.ActiveSheet             
        
    Dim MaxRow1 As Long
    MaxRow1 = ws.Cells(Rows.Count, 2).End(xlUp).Row          
        'Set rH = ws.Range("A2:A" & MaxRow1)
        
    Dim MaxCol1 As Long
    MaxCol1 = ws.Cells(2, Columns.Count).End(xlToLeft).Column 
        'Set cH = ws.Range("E2:E" & MaxCol1)
    
    For i = 2 To MaxRow1
        For j = 2 To MaxCol1
        
            ws.Cells(i, j).Value = WorksheetFunction.RoundDown(ws.Cells(i, j), 0)

        Next
    Next
    
    MsgBox "完了"
End Sub

解説

1行目から4行目:変数の宣言およびアクティブシートの設定を行っています。

6行目から8行目:処理する範囲の最大行数および最大列数を取得しています。

10行目から16行目:forループを使って、各セルを切り捨てた後、その値を元のセルに戻します。

18行目:処理が終了したことを示すメッセージボックスを表示します。

具体的には、forループを使って、アクティブシート内のセルを走査し、各セルに対してRoundDown関数を適用します。RoundDown関数は、指定された小数以下の桁を切り捨て、整数を返します。そして、切り捨てた後の値を、元のセルに戻します。最後に、処理が完了したことを示すメッセージボックスが表示されます。

切り捨て処理 ・Int

Sub 切り捨て()

Dim i As Long
Dim ws As Worksheet
Set ws = ThisWorkbook.ActiveSheet
        
    Dim MaxRow1 As Long
    MaxRow1 = ws.Cells(Rows.Count, 2).End(xlUp).Row
        'Set rH = ws.Range("A2:A" & MaxRow1)
        
    Dim MaxCol1 As Long
    MaxCol1 = ws.Cells(2, Columns.Count).End(xlToLeft).Column
        'Set cH = ws.Range("E2:E" & MaxCol1)
    
    For i = 2 To MaxRow1
        For j = 2 To MaxCol1
        
             Cells(3 + i, 2 + j) = Int(100 * Rnd())
             
        Next
    Next
    
    MsgBox "完了"
End Sub

切り上げ処理

Sub 切り上げ()

Dim i As Long
Dim ws As Worksheet
Set ws = ThisWorkbook.ActiveSheet               
        
    Dim MaxRow1 As Long
    MaxRow1 = ws.Cells(Rows.Count, 2).End(xlUp).Row           
    
    For i = 2 To MaxRow1

            ws.Cells(i, 2).Value = WorksheetFunction.RoundDown(ws.Cells(i, 2), 0)

    Next
    
    MsgBox "完了"
End Sub

コメント

タイトルとURLをコピーしました