Access VBA

2017年11月29日 (水)

[Access VBA]切り捨てを行う

少数の切り捨てを行うには、Int関数かFix関数を使う。

対象となる値が正数の場合は両関数とも同じ結果を返すが、負数の場合は異なる。Fix関数は単純に小数点以下を切り捨てるが、Int関数は小数点以下を切り捨てた上で0から離れる方向に数値を切り上げる。

以下、例。

d1 = 1.3
d2 = -1.3
Debug.Print Int(d1)
Debug.Print Int(d2)
Debug.Print Fix(d1)
Debug.Print Fix(d2)

出力は以下のとおり。

1
-2
1
-1

なお、任意の桁で切り捨てを行う組み込み関数はAccess VBAにはない。

2017年9月 9日 (土)

[Access VBA]数値の四捨五入を行う

Access VBAには四捨五入を行う関数はないので、int関数を組み合わせて計算をする必要がある。

なお、ここで行う四捨五入とは、小数点以下第一位の数値が5以上の場合は小数点以下を0にして(切り捨てて)一の位を一増やす、5未満の場合は小数点以下を切り捨て一の位をそのままにすることである。以下、四捨五入の例。

2.4 → 2.0
2.5 → 3.0
2.6 → 3.0
3.4 → 3.0
3.5 → 4.0
3.6 → 4.0

例えば、変数a代入されている数値を四捨五入して変数bに代入する場合は、以下のようにすればよい。

a = 2.5
b = int(a + 0.5)
debug.print
(出力結果)
3

小数点以下第二位の数値で四捨五入を行う場合は、以下のようにする。

a = 2.225
b = Int(a * 100 + 0.5) / 100
Debug.Print b
(出力結果)
2.23

上記の例では、第二位で四捨五入をするためにint関数内で変数aに100を掛け、int関数の外で100で割っている。これを第三位にするのであれば、それぞれ1000となる。

2017年4月27日 (木)

[Access VBA]サブフォーム(帳票フォーム)のレコードすべての値を一括で変更する

サブフォームを使用しているフォームで、サブフォーム(帳票フォーム)に表示されているレコードについて、何かの値を一括で変更する方法はない。そのような場合は、先頭レコードから最終レコードまで順番に変更する必要がある。

以下に、先頭レコードから最終レコードまで順番に処理をする例を示す。帳票フォームで各レコードに「数値」というテキストボックスがあり、そのテキストをすべて「A」にする。

Private Sub 一括処理_Click()
    DoCmd.GoToRecord , , acFirst
    Do While Me.CurrentRecord <= Me.Recordset.RecordCount
        Me.数値 = "A"
        DoCmd.GoToRecord , , acNext
    Loop
End Sub

これを例えば、サブフォームのヘッダーに配置したボタンが押された時に、このサブルーチンが動作するように設定すればよい。

2017年4月19日 (水)

[Access VBA]数値の計算時(特に割り算)に小数点以下の数値がおかしくなる

その計算を行っているテーブルのフィールドのデータ型が数値型である場合は、その数値型のフィールドサイズを確認する。

テーブルを新規作成時、データ型に数値を指定すると、初期状態(デフォルト)ではフィールドサイズ(ここでは数値の種類)は長整数型になる。つまり、整数しか扱えない。「倍精度浮動小数点型」にすること。