「Visual Basic 6の基礎 - 変数」の版間の差分

提供:MochiuWiki - SUSE, Electronic Circuit, PCB
ナビゲーションに移動 検索に移動
 
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)  ' 数値から文字列へ