「Visual Basic 6の基礎 - 変数」の版間の差分
(→概要) |
(→動的配列) |
||
97行目: | 97行目: | ||
' 配列のサイズ変更 (既存データを保持) | ' 配列のサイズ変更 (既存データを保持) | ||
ReDim Preserve arrDynamic(30) | ReDim Preserve arrDynamic(30) | ||
</syntaxhighlight> | |||
<br><br> | |||
== Collection == | |||
キーと値のペアを管理できるが、キーは文字列のみである。<br> | |||
順序が保持され、インデックス番号でもアクセス可能である。<br> | |||
<br> | |||
主に、データの順序付きリストとして使用される。<br> | |||
<br> | |||
* Countプロパティ | |||
*: 要素数を取得する。 | |||
* Itemメソッド | |||
*: 要素を取得する。(デフォルトメソッド) | |||
* Beforeメソッド / Afterメソッド | |||
*: 特定の位置に項目を挿入する。 | |||
<br> | |||
<syntaxhighlight lang="vb"> | |||
Dim colItems As New Collection | |||
' 項目の追加(Add) | |||
colItems.Add "データ1", "key1" | |||
colItems.Add "データ2", "key2" | |||
colItems.Add "データ3" 'キー省略可能 | |||
' 項目の取得 | |||
Debug.Print colItems("key1") 'キーで取得 | |||
Debug.Print colItems(1) 'インデックスで取得 | |||
' コレクションの走査 | |||
Dim varItem As Variant | |||
For Each varItem In colItems | |||
Debug.Print varItem | |||
Next | |||
' 項目の削除 | |||
colItems.Remove "key1" 'キーで削除 | |||
colItems.Remove 1 'インデックスで削除 | |||
</syntaxhighlight> | |||
<br><br> | |||
== Dictionary == | |||
より柔軟な連想配列である。<br> | |||
キーには文字列以外の型も使用でき、任意の型の値を格納することができる。<br> | |||
<br> | |||
ハッシュテーブルベースで実装されているため、大量のデータを扱う場合はCollectionより高速である。<br> | |||
<br> | |||
また、Exists関数でキーの存在が確認できる。<br> | |||
ただし、インデックス番号での参照はできない。<br> | |||
<br> | |||
<syntaxhighlight lang="vb"> | |||
Dim dicItems As New Dictionary | |||
' 項目の追加 | |||
dicItems.Add "名前", "山田太郎" | |||
dicItems.Add "年齢", 30 | |||
dicItems.Add "住所", "東京都" | |||
' 項目の取得 | |||
Debug.Print dicItems("名前") | |||
' 存在確認 | |||
If dicItems.Exists("年齢") Then | |||
Debug.Print dicItems("年齢") | |||
End If | |||
' 項目の変更 | |||
dicItems("住所") = "大阪府" | |||
' 全てのキーを取得 | |||
Dim varKey As Variant | |||
For Each varKey In dicItems.Keys | |||
Debug.Print varKey & ": " & dicItems(varKey) | |||
Next | |||
' 項目の削除 | |||
dicItems.Remove "住所" | |||
' 全項目の削除 | |||
dicItems.RemoveAll | |||
</syntaxhighlight> | </syntaxhighlight> | ||
<br><br> | <br><br> |
2025年1月23日 (木) 16:50時点における最新版
概要
変数は、プログラム内でデータを一時的に格納するためのメモリ領域である。
変数名を使用してデータにアクセスして、プログラムの実行中に値を変更することができる。
また、Option Explicit
キーワードを使用するこにより、全ての変数を明示的に宣言する必要があり、タイプミスによるバグを防ぐことができる。
Visual Basic 6は様々なデータ型を提供している。
- 数値型 (Integer、Long、Single、Double)
- 計算処理に使用される。
- 文字列型 (String)
- テキストデータの処理に使用される。
- 論理型 (Boolean)
- 真偽値の判定に使用される。
- 日付型 (Date)
- 日付と時刻の処理に特化している。
- Variant型
- あらゆるデータ型を格納できる柔軟な型である。
変数のスコープは、その変数がアクセス可能な範囲を定義する。
モジュールレベル変数はそのモジュール全体で、プロシージャレベル変数はそのプロシージャ内でのみ有効である。
Private
キーワードは同じモジュール内でのみアクセス可能、Public
キーワードはプロジェクト全体からアクセス可能な変数を定義する。
Static
変数はプロシージャが終了しても値を保持する特殊な変数である。
固定長配列は宣言時にサイズを指定、動的配列は実行時にサイズを変更できる。
ReDim
ステートメントで配列のサイズを変更でき、Preserve
キーワードを使用すると既存のデータを保持したままサイズを変更することができる。
また、Collection、Dictionary等のオブジェクトを使用することにより、柔軟なデータ管理が可能である。
Option Explicit
Option Explicit
を使用する場合、全ての変数を明示的に宣言する必要がある。
これにより、タイプミスによるバグを防ぐことができる。
基本的なデータ型
各変数は、Dim
キーワードを使用して宣言する。
変数名の後にAs
<データ型>を指定して、変数の型を定義する。
整数型には範囲があり、その範囲を超えるとオーバーフローエラーが発生する。
Option Explicit ' 変数の明示的な宣言を強制
' 変数の定義
Dim intNumber As Integer '整数型 (-32,768 ~ 32,767)
Dim lngNumber As Long '長整数型 (-2,147,483,648 ~ 2,147,483,647)
Dim sngNumber As Single '単精度浮動小数点型
Dim dblNumber As Double '倍精度浮動小数点型
Dim strText As String '文字列型
Dim blnFlag As Boolean '論理型 (True / False)
' 値の代入
intNumber = 100
lngNumber = 1000000
sngNumber = 3.14
dblNumber = 3.14159
strText = "サンプルテキスト"
blnFlag = True
配列
Visual Basic 6の配列には、固定長配列と動的配列の2種類がある。
Visual Basic 6の配列は、0から始まる。
固定長配列
固定長配列は宣言時にサイズを指定するため、後でサイズを変更することはできない。
' 固定長配列
Dim arrFixed(5) As String '6要素の配列(0~5)
' 配列への値の代入
For i = 0 To 5
arrFixed(i) = "要素" & i
Next i
動的配列
動的配列はReDim
キーワードを使用して、サイズを変更することができる。
また、Preserve
キーワードを使用する時、既存のデータを保持したままサイズを変更できる。
' 動的配列
Dim arrDynamic() As Integer
Dim i As Integer
' 動的配列のサイズ設定
ReDim arrDynamic(10)
' 配列のサイズ変更 (既存データは消去)
ReDim arrDynamic(20)
' 配列のサイズ変更 (既存データを保持)
ReDim Preserve arrDynamic(30)
Collection
キーと値のペアを管理できるが、キーは文字列のみである。
順序が保持され、インデックス番号でもアクセス可能である。
主に、データの順序付きリストとして使用される。
- Countプロパティ
- 要素数を取得する。
- Itemメソッド
- 要素を取得する。(デフォルトメソッド)
- Beforeメソッド / Afterメソッド
- 特定の位置に項目を挿入する。
Dim colItems As New Collection
' 項目の追加(Add)
colItems.Add "データ1", "key1"
colItems.Add "データ2", "key2"
colItems.Add "データ3" 'キー省略可能
' 項目の取得
Debug.Print colItems("key1") 'キーで取得
Debug.Print colItems(1) 'インデックスで取得
' コレクションの走査
Dim varItem As Variant
For Each varItem In colItems
Debug.Print varItem
Next
' 項目の削除
colItems.Remove "key1" 'キーで削除
colItems.Remove 1 'インデックスで削除
Dictionary
より柔軟な連想配列である。
キーには文字列以外の型も使用でき、任意の型の値を格納することができる。
ハッシュテーブルベースで実装されているため、大量のデータを扱う場合はCollectionより高速である。
また、Exists関数でキーの存在が確認できる。
ただし、インデックス番号での参照はできない。
Dim dicItems As New Dictionary
' 項目の追加
dicItems.Add "名前", "山田太郎"
dicItems.Add "年齢", 30
dicItems.Add "住所", "東京都"
' 項目の取得
Debug.Print dicItems("名前")
' 存在確認
If dicItems.Exists("年齢") Then
Debug.Print dicItems("年齢")
End If
' 項目の変更
dicItems("住所") = "大阪府"
' 全てのキーを取得
Dim varKey As Variant
For Each varKey In dicItems.Keys
Debug.Print varKey & ": " & dicItems(varKey)
Next
' 項目の削除
dicItems.Remove "住所"
' 全項目の削除
dicItems.RemoveAll
日付 / 時刻の変数
日付 / 時刻を扱うための専用データ型である。
日付 / 時刻関数
- Now
- 現在の日時を取得
- Date
- 現在の日付を取得
- Time
- 現在の時刻を取得
- DateAdd
- 日付の加算 / 減算
- DateDiff
- 日付の差分計算
- Format
- 日付 / 時刻の書式設定
フォーマット文字列の主な指定子
- yyyy
- 4桁の年
- mm
- 月
- dd
- 日
- hh
- 時
- nn
- 分
- ss
- 秒
Dim dtNow As Date
Dim dtCustom As Date
dtNow = Now ' 現在の日時を取得
dtCustom = #1/23/2025 14:30:00# ' 特定の日時を指定
' 日付/時刻のフォーマット
Debug.Print "現在: " & Format(dtNow, "yyyy/mm/dd hh:nn:ss")
Debug.Print "指定日時: " & Format(dtCustom, "yyyy/mm/dd hh:nn:ss")
バリアント型
Variant型は、あらゆる型のデータを格納できる汎用データ型である。
型変換が自動的に行われるため、異なる型のデータを扱う場合に便利である。
ただし、メモリ使用量が多い、型の安全性が低い、実行速度が遅い等のデメリットもある。
Dim varData As Variant
' 数値として使用
varData = 100 ' 自動的に数値型として解釈
Debug.Print varData + 50 ' 数値計算が可能
' 文字列として使用
varData = "テスト" ' 自動的に文字列型として解釈
Debug.Print varData & "文字列" ' 文字列連結が可能
' 日付として使用
varData = #1/23/2025# ' 自動的に日付型として解釈
オブジェクト変数
オブジェクト変数は、Set
キーワードを使用して値を代入する。
オブジェクトのインスタンスを生成する場合は、New
キーワードを使用する。
オブジェクト変数は、使用後にNothing
を代入して解放することが推奨される。
また、CreateObject
関数を使用してActiveXオブジェクトを生成することもできる。
コレクションやディクショナリは、データを効率的に管理するために使用される。
Dim objForm As Form
Dim objControl As Control
Dim colItems As Collection
Dim dicData As Dictionary
' フォームのインスタンス作成
Set objForm = New Form1
' コレクションの使用
Set colItems = New Collection
colItems.Add "項目1"
colItems.Add "項目2"
' ディクショナリ (連想配列) の使用
Set dicData = CreateObject("Scripting.Dictionary")
dicData.Add "key1", "値1"
dicData.Add "key2", "値2"
'参照の解放
Set objForm = Nothing
Set colItems = Nothing
Set dicData = Nothing
変数のスコープ
変数のスコープは、宣言の場所と使用するキーワードによって決まる。
- Private変数
- 同じモジュール内でのみアクセス可能である。
- Public変数
- プロジェクト内のどこからでもアクセス可能である。
- Static変数
- プロシージャが終了しても値が保持される。
- ローカル変数
- プロシージャ内でのみ有効である。
' モジュールレベル変数
Private m_strGlobalVar As String
Public g_strPublicVar As String
Private Sub ScopeExample()
' ローカル変数
Dim strLocalVar As String
Static strStaticVar As String '静的変数
' プロシージャ内でのみ有効
strLocalVar = "ローカル変数"
' 値が保持される
strStaticVar = "静的変数"
' モジュール内でアクセス可能
m_strGlobalVar = "プライベート変数"
' 他のモジュールからもアクセス可能
g_strPublicVar = "パブリック変数"
End Sub
列挙型
列挙型 (Enum) は、関連する定数値をグループ化して名前を付ける機能である。
Private Enum ColorType
Red = 1
Blue = 2
Green = 3
End Enum
Private Sub EnumExample()
Dim myColor As ColorType
myColor = Blue
Select Case myColor
Case Red
Debug.Print "赤が選択されました"
Case Blue
Debug.Print "青が選択されました"
Case Green
Debug.Print "緑が選択されました"
End Select
End Sub
型変換
- CInt関数
- 整数型に変換
- CLng関数
- 長整数型に変換
- CSng関数
- 単精度浮動小数点型に変換
- CDbl関数
- 倍精度浮動小数点型に変換
- CStr関数
- 文字列型に変換
- CBool関数
- 論理型に変換
- CDate関数
- 日付型に変換
※注意
変換時にデータが範囲外の場合はエラーが発生する。
数値から文字列への変換は、Str
関数とCStr
関数で動作が異なる。
また、変換前にデータの妥当性の確認を行うことが推奨される。
Dim strNumber As String
Dim intValue As Integer
Dim dblValue As Double
strNumber = "123"
intValue = CInt(strNumber) ' 文字列から整数へ
dblValue = CDbl("123.45") ' 文字列から倍精度へ
Debug.Print Str(intValue) ' 数値から文字列へ
Debug.Print CStr(dblValue) ' 数値から文字列へ