「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)  ' 数値から文字列へ