記事ディレクトリ

VBA の作成方法

開発者ツール ウィンドウに入る

2. モジュールの挿入を選択し、プロシージャを挿入してサブルーチンを選択します

VBA 文法規則

Excel では、, データには、テキスト , 数値 , 日付値 , 論理値、エラー値の 5 つのタイプしかありません。 ただし、VBA の , データ型は Excel とまったく同じではありません。 VBA はデータの特性に応じて「Boolean」「boolean」「byte (バイト)」「integer (整数)」「高精度浮動小数点型」にデータを分割します。 (single) , 倍精度浮動小数点型 (double) , 通貨型 (currency) , 10 進数型 (10 進数) , 文字列型 ( string( string, ; xff09;,日付タイプ(日付)、オブジェクトタイプなど

変数を宣言する

変数の宣言 , は、実際には変数の名前と格納できるデータ型を指定することです , VBA で変数を宣言するには , 次のようないくつかの方法があります :< /p >

  1. データ型としての Dim 変数名
  2. データ型としてのプライベート変数名,private で変数を宣言, ;変数はプライベート変数になります
  3. データ型としてのパブリック変数名,パブリック変数で定義された変数はパブリック変数です
  4. データ型としての静的変数名,静的を使用して変数を宣言する場合,この変数は静的変数になります,プログラムが終了すると静的変数はその値を保持します元の値は変更されません。

変数に値を代入する

  1. データ型の変数に値を割り当てる,このステートメントを使用する必要があります:変数名に変数名を付けます= 保存するデータを指定します
  2. オブジェクト タイプの変数への代入,次のステートメントを使用する必要があります :"変数名を設定= 保存するオブジェクト名"

変数に格納されたデータを演算に参加させます

データ型変数は操作に参加します

2. オブジェクト変数は操作に参加します

変数の宣言に関する追加知識

複数の変数を宣言する場合は、次の形式でコードを記述できます:

2. 変数型宣言子を使用して変数型を定義できます

データ型 型宣言文字
Integer %
Long &
Single
Double #
currency @
string $
  1. 変数を宣言するときに変数の型を指定する必要はありません :VBA での変数の宣言は , よくわからない場合は、その型のデータが変数に格納される , 変数を宣言する場合、, は変数の名前のみを定義します, 変数の型は定義しません。 変数を宣言するときに , 変数の名前のみを指定し、変数のデータ型は指定しない場合 , VBA はデフォルトで変数を Variant 型として定義します , 変数が宣言されている場合バリアント型として, xff0c;あらゆるデータ型を格納可能
  2. すべての変数の宣言を必須: プログラム内の変数の宣言を忘れる心配がある場合,モジュールを開始できます , ;「Option Explicit」と入力してください

変数のスコープ

スコープによる分割 , VBA の変数は、ローカル変数 , モジュール変数とパブリック変数に分割できます。

スコープ 説明
単一プロシージャ プロセス内の dim または static ステートメントで宣言された変数 , スコープはプロセスです , つまり、変数を宣言するステートメントが配置されているプロセスのみがその変数を使用できます , そのような変数 &# xff0c; 呼び出されたローカル変数
個別モジュール 最初のプロシージャの前に dim または private ステートメントで宣言された変数モジュール ,スコープは、ステートメントが変数を宣言しているモジュール内のすべてのプロシージャです ,つまり、モジュール内のすべてのプロシージャがその変数を使用できます, このような境界はモジュール レベル変数<と呼ばれます
すべてのモジュール モジュールの最初のプロセスの前に public ステートメントで宣言された変数 , スコープはすべてのモジュールです&# xff0c ; つまり、モジュール内のすべてのプロセスがそれを使用できます , このような変数はパブリック変数

特殊変数 - 配列

  1. 配列は同じ型の複数の変数のコレクションです
  2. 配列内の要素はインデックス値によって取得できます
  3. 配列を宣言するとき、配列のサイズを宣言する必要があります
    "パブリック dim 配列名(a から b) データ型として"
  4. 配列に値を割り当てるということは、配列の各要素に値を割り当てる

多次元配列を宣言する

Dim arr(a,b) as Integer

ここに arr , という名前の配列があり、その形状は行 a、列 b です。

動的配列の宣言

配列を宣言するとき、配列に入力するデータの数がわからない場合は、動的配列を使用できます。 配列を動的配列として宣言する場合、変数を直接使用することはできません。redim を使用して配列のサイズを変更する必要があります

Sub test()
    a = Application.WorksheetFunction.CountA(rang("A:A"))
    Dim arr() As String
    ReDim arr(1 To a)
End Sub

配列を作成するその他の方法

  1. 配列関数を使用して配列を宣言する
Sub arraytest()
    Dim arr As Variant
    arr = Array(1, 2, 3, 4)
 	MsgBox "arr 配列の 2 番目の要素は次のとおりです:" & arr(1)
   
End Sub

2. Split 関数を使用して配列を宣言します

Sub arraytest()
    Dim arr As Variant
    arr = Split("イェフェン、コンコン、シャオユエ、老竹", ",")
    MsgBox "arr 配列の 2 番目の要素は次のとおりです:" & arr(1)
   
End Sub

セル領域から直接配列を作成する

Sub arraytest()
    Dim arr As Variant
    Range("A1:C3").Value = 5
    arr = Range("A1:C1").Value
    Range("e1:G1").Value = arr
   
End Sub

配列関数

UBound を使用して配列の最大インデックス番号を見つける

Sub arraytest()
    Dim arr As Variant
    Range("A1:C3").Value = 5
    arr = Range("A1:C1").Value
	MsgBox "配列の最大インデックス番号は次のとおりです:" & UBound(arr)
   
End Sub

LBound 関数を使用して最小インデックス番号を見つける

Sub arraytest()
    Dim arr As Variant
    Range("A1:C3").Value = 5
    arr = Range("A1:C1").Value
	MsgBox "配列の最小インデックス番号は次のとおりです:" & LBound(arr)
   
End Sub

多次元配列の最大インデックス番号と最小インデックス番号を見つける

Sub arraytest()
   Dim arr(10, 100) As Integer
   Dim a As Integer, b As Integer
   a = UBound(arr, 1)
   b = UBound(arr, 2)
   MsgBox "最初の次元の最大インデックスは次のとおりです:" & a & Chr(13) & "2 番目の次元の最大インデックスは次のとおりです:" & b
   
End Sub

join 関数を使用して 1 次元配列を文字列に結合する

Sub arraytest()
    Dim arr As Variant
    arr = Array(1, 2, 3, 4)
    Text = Join(arr)
    MsgBox Text
   
End Sub

配列の内容をワークシートに書き込む

Sub arraytest()
    Dim arr As Variant
    arr = Array(1, 2, 3, 4, 5, 6, 7)
    Range("A4:A11").Value = Application.WorksheetFunction.Transpose(arr)
    
End Sub

転置とは、配列に対して列変換を実行することです。 配列の内容がセルの長さを埋めるのに十分でない場合、余分なデータは NA 値で埋められます。 埋められるセルの数が配列の長さに足りない場合は、順番に埋められます。

配列アクセス

Excel テーブルのデータが配列に渡されると、デフォルトで 2 次元配列が作成されますので、配列の値を取得するときは 2 つの値を渡す必要があります配列の場合のみ、添字の範囲外の警告が表示されます。 配列の最初の数値は行を指定し、2 番目の数値は列を指定します

arr = range("B1:C1").value
msgbox arr(1,2)

特別なデータ用の特別なコンテナ - 定数

定数は、金利、税率、円周率などの固定データを保存するためによく使用されます。 **定数を宣言するときは、定数の名前、保存できるデータ型、および定数に保存されるデータも定義します。 ステートメントは次のとおりです:

const データ型としての確定的な数値名 = 定数に格NAされるデータ

変数の定義と同様に、プロセス内の const ステートメントで定義された定数はローカル定数と呼ばれ、定数を宣言するプロセスでのみ使用できます。

const ステートメントを使用してモジュール内の最初のプロシージャの前に定数を宣言すると、その定数はモジュール レベルの定数と呼ばれ、モジュール内のすべてのプロシージャでその定数を使用できます。 p>

宣言された定数をすべてのモジュールで使用できるようにするには、モジュールの最初のプロシージャの前に、public ステートメントを使用してそれをパブリック定数として宣言する必要があります。

オブジェクト、コレクション、オブジェクトのプロパティとメソッド

オブジェクトとは、VBA コードを使用して操作および制御される物であり、名詞です。 VBA では、Excel ワークブック、ワークシート、セルなどがオブジェクトであり、グラフ、ピボット テーブル、画像などもオブジェクトであり、セルの境界線や挿入されたコメントもオブジェクトです...

コレクションは、同じタイプの複数のオブジェクトの総称であるオブジェクトでもあります。

各オブジェクトには属性があり、オブジェクトの属性は、このオブジェクトの内容または特性として理解できます。 オブジェクトとプロパティは相対的な用語です。 セルはフォントに関連したオブジェクトですが、 セルはワークシートに関連したプロパティです

メソッドはオブジェクトに対して実行されるアクションまたは操作であり、各オブジェクトには対応する 1 つ以上のメソッドがあります。 メソッドとプロパティの違いは、プロパティはサブオブジェクト、色、サイズなどのオブジェクトの内容または特性を返しますが、 メソッドは選択、アクティブ化などのオブジェクトに対する操作であることです。 >

VBA の演算子

算術演算子

演算子 アクション
+ 2 つの数値の合計を求める 5+9=14
- 差2 つの数値の間、または数値の反対 8-3=5
* 2 つの数値の積を見つける  
/ 2 つの数値の商を求める  
\ 数値を結んだ商の整数を求めます 5\2=2
^ 特定の数の累乗を求めます  
Mod 2 を求めます。数字の割り算 12 mod 9 =3

比較演算子

演算子 関数 構文 戻り結果
= 2 つのデータが等しいかどうかを比較 expression1=expression2 等しい場合は TRUE を返し、等しくない場合は false を返します
<> 等しくない 式1<>式2 反対
> 2 つの数値の大きさを比較 expression1>expression2  
>= 2 つの数値の大きさを比較 expression1>=expression2  
< 2 つの数値の大小を比較します expression1<expression2  
<= 2 つの数値の大きさを比較 expression1<=expression2  
2 つのオブジェクトの参照変数を比較します オブジェクト 1 はオブジェクト 2 です オブジェクト 1 とオブジェクト 2 が同じオブジェクトを参照する場合に TRUE を返しますそれ以外の場合は false を返します
like 2 つの文字列が一致するかどうかを比較します 文字列 1 が文字列 2 のように一致する は返しますstring1 が string2 と一致する場合は TRUE、それ以外の場合は false

ワイルドカード

ワイルドカード 関数 コード例
* 任意の数の文字を置き換えます 「李家俊」を「李*」のように
? 任意の 1 文字を置き換えます 「李家俊」を「李??」のように
# 任意の 1 文字を置き換えます “Commodity 5” like “Commodity#”
[charlist] charlist 内の任意の文字を置換します “I” like “[A-Z]”
[!charlist] 文字リストにない文字を置換します “I” like “[!A-Z]”

論理演算子

演算子 関数 ステートメント形式 計算ルール
and 論理 AND 演算を実行します 式 1 and 式 2 式 1 の値と式 2 の値が両方とも同じである場合TRUE、TRUE を返し、それ以外の場合は false を返します
or 論理「OR」演算を実行します 式 1 or 式 2 2 つのうち 1 つが true で TRUE を返し、同時に false で false を返す
not 論理的な " を実行します。 not" 演算 not 逆演算
xor 論理的な「排他的論理和」演算を実行します 式 1 xor 式 2 式 1 と式 2 で返される値が異なる場合は TRUE を返し、それ以外の場合は false を返します
eqv 論理的な「同等の」演算を実行します 式 1 eqv 式 2 式 1 が TRUE と評価され、式 2 が False と評価された場合は false を返し、それ以外の場合は TRU を返します。

VBA 組み込み関数

関数はたくさんありますが、それほど正確に覚える必要はありません。 **ある関数のおおよそのスペルを覚えていれば、コードを書くときに[コードウィンドウ]に「VBA.」と入力するだけで、システムが表示する関数一覧から使いたい関数を選択できます。 。

プログラム実行の基本的なステートメント構造を実行する

if ステートメント

VBA では、if ステートメントの規則は次のとおりです。

if 条件 then ステートメント else 条件

select case ステートメント

if文を使えば「たくさんある中から一つを選ぶ」という問題は解決できますが、判定の選択条件が多すぎる場合、elseif文やif文を複数使うのは、一文の中でifを多用するのと同じで、コードのロジックを理解することが難しくなります。 通常、3 つ以上の戦略から選択する必要がある場合、問題を解決するために select case ステートメントを使用することを選択します

Sub test()
    Select Case Range("B2").Value
        Case Is >= 90
            Range("C2").Value = "素晴らしい"
        Case Is >= 80
            Range("C2").Value = "良い"
        Case Is >= 60
            Range("C2").Value = "合格"
        Case Is < 60
            Range("c1").Value = "失敗した"
    End Select
    
End Sub

for ループ

VBA で for ループを定義するための構文規則は次のとおりです。


for ループ変数=初期値 to 終了値 step ステップ値
   ループ本体
next ループ変数名

for ループは next で終了する必要があります

Sub test()
    Dim irow As Byte
    Dim i As Byte
    For i = 1 To 10 Step 1
        Select Case Range("B" & i).Value
            Case Is > 100
                Range("C" & i).Value = "エラー"
            Case Is >= 90
                Range("C" & i).Value = "素晴らしい"
            Case Is >= 80
                Range("C" & i).Value = "良い"
            Case Is >= 60
                Range("C" & i).Value = "合格"
            Case Is < 60
                Range("C" & i).Value = "失敗した"
        End Select
    Next i
End Sub

for each...next ステートメントは、コレクションまたは配列内のメンバーをループします

配列の各要素またはコレクションの各メンバーをループする必要がある場合は、for each...next ステートメントを使用します。

Sub test()
   Dim i As Byte
  j = 1
    For Each sht In Worksheets
        Range("D" & j).Value = sht.Name
        j = j + 1
    Next sht
   
End Sub

do while ループ

do while文は2種類に分けられ、ループ条件を設定する位置により先頭判定タイプと切り捨て判定タイプに分けられます。 ステートメントの構造は次のとおりです。

始まりの審判


do [while ループ条件]
    ループ本体
    exit do
    ループ本体
loop

検閲された判定式

do 
    ループ本体
    exit do
    ループ本体
loop [while ループ条件]

各 do ステートメントはループで終わる必要があります。ループがループに到達すると、条件が true かどうかを判断するために do ステートメントに戻ります。

Sub test()
   Dim i As Byte
   i = 1
   Do
        Worksheets.Add
        i = i + 1
    Loop While i < 5
End Sub

Goto ステートメントを使用して、プログラムを別のステートメントに移動して実行します。

goto ステートメントに対象となるターゲット ステートメントを明確に知らせるには、ターゲット ステートメントの前にコロン付きのテキスト文字またはコロンなしの数値ラベルを追加してから、goto ステートメントを書き込みます。その後のタグ名

Sub test()
   Dim i As Integer
   Dim sum As Long
   i = 1
x:    mysum = mysum + i
    i = i + 1
    If i <= 100 Then GoTo x
    MsgBox "1 から 100 までの合計は次のとおりです:" & mysum
End Sub

ステートメント付き、短縮コード

同じオブジェクトに対して複数の操作を実行する必要がある場合、繰り返しコードを記述することがよくあります。 同じステートメントを複数回繰り返したくない場合は、with ステートメントを使用して簡素化できます。

Sub fontest()
    With Worksheets("Sheet1").Range("A1").Font
        .Name = "イミテーションソングフォント"
        .ColorIndex = 3
        .Bold = True
        .Size = 12
    End With
End Sub

sub プロセス、基本プログラム単位

sub プロセスの基本構造

[private|public|static] sub プロシージャ名([パラメータリスト])
    ステートメントブロック
[exit sub]
    ステートメントブロック
end sub

private または public は、プロセスのスコープを宣言するために使用されます。同時に使用できるのは 1 つだけであり、省略できます。省略した場合は、デフォルトで public が使用されます。 静的が選択されている場合、プロセスの実行終了後も、プロセス内の変数の値は引き続き保存されます

プロシージャ内でのプロシージャの呼び出し

プロシージャ名を直接使用してプロシージャを呼び出し、プロシージャ名とパラメータを英語のカンマで区切ります

subname,arg1,arg2

sub runsub()
    subadd
end sub

call キーワードを使用してプロセスを呼び出します。パラメータはプロセスのかっこ内に記述され、さまざまなパラメータはカンマで区切られます。

call プロセス名(args,arg2)
sub runsub()
    call subadd
end sub

applicationation オブジェクトの run メソッドを使用してプロセスを呼び出します

application.run "subname,arg1,arg2"
sub runsub()
    application.run "subadd"

サブプロセスで渡すパラメータ

VBA では、プロシージャ パラメータの受け渡しには、参照による受け渡しとによる受け渡しの 2 つの主な形式があります。 デフォルトでは、 プロシージャはパラメータを参照によって渡します。 プログラムがパラメータを参照渡しする場合、データが保存されているメモリ アドレスのみが渡され、プロセス中にパラメータを変更すると元のデータに影響します。

Sub shtadd(shtcount As Integer)
    Worksheets.Add Count:=shtcount
    shtcount = 8
    MsgBox "shtcount の値:" & shtcount
End Sub

Sub test()
    Dim c As Integer
    c = 2
    Call shtadd(c)
	MsgBox "パラメータ プロシージャの値は次のとおりです:" & c
End Sub

カスタム関数、function プロセス

カスタム関数を宣言する

public function 関数名([パラメータ])
   	関数本体
    関数名 = 結果
end function

function プロシージャに含まれるコードの量や実行する計算の数に関係なく、最終的な計算結果はプロシージャ名に保存される必要があります。これは、他の言語での関数の戻り内容に相当します。

独自に定義した関数を使用する

Excel での使用:
定義された関数がプライベート プロシージャとして定義されていない場合は、【関数の挿入】を使用して Excel でカスタム関数を使用できます。


Public Function fun()
    fun = Int(Rnd() * 10) + 1
End Function

VBA プロセスで使用する

Sub test()
    MsgBox fun()
End Sub

function example

Public Function count_color(arr As Range, c As Range)
    Dim rng As Range
    For Each rng In arr
        If rng.Interior.Color = c.Interior.Color Then
            count_color = 1 + count_color
        End If
    Next rng
    
End Function

カスタム関数も再計算できるように、関数を揮発性関数として設定します

ワークシートが再計算されるときに、カスタム関数が再計算されない場合があります。 ワークシートの再計算後にカスタム関数を再計算したい場合は、カスタム関数を揮発性関数として定義する必要があります。 カスタム関数を揮発性関数として定義するには、関数プロセスの先頭に次のコード行を追加するだけです:

application.voliatile true

example


Public Function fun()
    application.voliatile true
    fun = Int(Rnd() * 10) + 1
End Function

オペレーション オブジェクト

VBA でよく使用されるオブジェクト

オブジェクト オブジェクトの説明
Application Excel アプリケーションを表します ( Word で VBA が使用されている場合、Word アプリケーションを表します )
Workbook Excel の作業を表しますBook、ワークブック オブジェクトはワークブック ファイルを表します
worksheet は Excel ワークシートを表します、ワークシート オブジェクトはワークブック内の通常のワークシートを表します
range は Excel のセルを表し、単一のセルまたはセル領域になります。

アプリケーション オブジェクトの操作

ScreenUpdating プロパティ設定を使用して画面を更新する

アプリケーション オブジェクトの ScreenUpdating プロパティは、画面の更新を制御するスイッチです。 false に設定すると、画面は更新されず、各ステップの実行結果は表示されません。

Sub test()
    Application.ScreenUpdating = False
    Range("A1:A10").Value = 10
	MsgBox "今入力した結果は 10 ですが、見ましたか?"
    Range("A1:A10").Value = 100
    MsgBox "今入力したのは 100 ですが、見ましたか?"
    Application.ScreenUpdating = True
    
End Sub

警告ダイアログを無効にするように DisplayAlerts プロパティを設定します

Excel で特定の操作を実行すると、Excel に警告ボックスが表示されます。これらの操作を実行するかどうかを判断してください。 さまざまな理由から、Excel ではプログラムの実行中に同様の警告ダイアログ ボックスが表示されないことを望んでいます。これは、アプリケーション オブジェクトの displayalerts プロパティを false に設定することで実現できます。

Sub sheettest()
    Worksheets.Add Count:=5
    Application.DisplayAlerts = False
    Dim sht As Worksheet
    For Each sht In Worksheets
        If sht.Name <> ActiveSheet.Name Then
            sht.Delete
        End If
    Next sht
    Application.DisplayAlerts = True
    
End Sub

worksheetfunction 属性を使用したワークシート関数の使用

VBA には多くの組み込み関数があり、関数を適切に使用すると、作業上の多くの問題を効果的に軽減し、コード作成の作業負荷を軽減できます。 ただしVBA には Excel の組み込み関数は存在せず、Excel の組み込み関数は worksheetfunction を使用して呼び出すことができます。

Sub cunt()
    Dim mycount As Integer
    Range("A1:B10").Value = 101
    mycount = Application.WorksheetFunction.CountIf(Range("A1:B10"), ">100")
	MsgBox "この領域にある 100 を超えるセルは次のとおりです:" & mycount
End Sub

VBA に同じ関数がすでに存在する場合、worksheetfunction 属性を使用してワークシート内の関数を参照することはできなくなります。 また、すべてのワークシート関数が worksheetfunction 属性を通じて呼び出せるわけではありません

プロパティを設定し、Excel の作業インターフェイスを変更する

アプリケーション オブジェクトのプロパティを設定して Excel のインターフェイスを変更する

[イミディエイト ウィンドウ] で実行されたコード 変更された領域
application.caption = "My Excel" タイトル バー
application.caption "miscrosoft Excel" タイトル バー
application.displayformulabar = false 数式バー
application.displaystatusbar = false ステータス バー
application.statusbar = "編集中..." ステータス バー
application.statusbar = false ステータス バー
activewindow.displayHeadings = false 行と列の見出し

アプリケーションのサブオブジェクト

アプリケーション オブジェクトの共通属性

プロパティ 返されたオブジェクト
ActiveCell 現在のアクティブ セル
ActiveChart 現在アクティブなワークブック内のアクティブなグラフ
Activesheet 現在アクティブなワークブックのアクティブ シート
ActiveWindow 現在アクティブなウィンドウ
ActiveWorkbook 現在アクティブなワークブック
Charts 現在のアクティブなワークブック内のすべてのグラフ ジョブ シート
selection 現在アクティブなワークブックで選択されているすべてのオブジェクト
sheets すべてのシート現在アクティブなワークブック内のオブジェクト (通常のワークシート、グラフ ワークシート、Excel4.0 マクロ ワークシート、および 5.0 ダイアログ ワークシートを含む)
worksheets すべてのワークシート オブジェクト現在アクティブなワークブック(共通ワークシート)
workbooks 現在すべての開いているワークブック

workbook オブジェクト

workbook オブジェクトを参照

  1. ファイルインデックスによる参照
  2. ファイル名による参照
sub test()
    workbooks(3)
    workbooks("sheet1")
end sub

workbook オブジェクトのプロパティにアクセスする

Sub info()
    Range("c1") = ThisWorkbook.Name
    Range("C2") = ThisWorkbook.Path
    Range("C3") = ThisWorkbook.FullName
End Sub

ワークブックの作成 - add<

  1. 空のワークブックを作成する: パラメーターを設定せずに workbook オブジェクトの add メソッドを直接呼び出すと、Excel は通常のワークシートのみを含む新しいワークブックを作成します。
  2. ワークブックの作成に使用されるテンプレート: ワークブック ファイルを新しいワークブックのテンプレートとして使用する場合は、add メソッドの template パラメータを使用して、ファイルの名前とそのディレクトリを指定できます。
  3. 新しいワークブックに含まれるワークブックのタイプを指定します
workbooks.add 
workbooks.add template:="D:\file\template.xlsm"
workbooks.add template := xlWBATChart '新しく作成したワークブックにグラフ ワークシートを含めます

add メソッドのパラメータを使用して、新しいワークブックに含まれるワークシートのタイプを指定します

パラメータ値 ワークブックに含まれるワークシート タイプ
xlWBATWorksheet 共通ワークシート
xlWBATChart グラフ ワークシート
xlWBATExcel4Macrosheet 4.0 マクロ シート
xlWBATExcel4IntlMacrosheet 5.0 ダイアログ シート

open メソッドでワークブックを開きます

workbooks.open filename := "path"

activate によりワークブックがアクティブ化されます

workbooks("workbooks_name").activate

ワークブックを保存します

  1. save メソッドは既存のファイルを保存します
  2. saveas メソッドはワークブックを新しいファイルとして保存します
  3. 新しいファイルとして保存した後は元のファイルを閉じないでください
thisworkbooks.save 
thisworkbooks.saveas filename:="path"
thisworkbooks.savecopyas filename :="path"

閉じる—ワークブックを閉じる

workbooks.close  '現在開いているワークブックをすべて閉じます
workbooks("workbooks_name").close '指定した名前のワークブックを閉じます
workbooks.close savechanges := true 'ワークブックを閉じて変更を保存します

worksheet オブジェクト

add メソッドは新しいワークシートを作成します

  1. アクティブなワークシートの前にワークシートを挿入します
  2. 挿入するワークシートの位置を before|after パラメータで指定します
  3. 挿入する作業をパラメータで指定しますcount パラメータ テーブルの数
worksheets.add
worksheets.add before|after := worksheet_name
worksheets.add count:=number

ワークシートのラベル名を変更するには name 属性を設定します

worksheets("worksheet_name").name = name

delete メソッドを使用してワークシートを削除します

worksheets('worksheet_Name').delete

ワークシートをアクティブにする 2 つの方法

worksheets("worksheet_name").avtivate
worksheets("worksheet_name").select

copy メソッドを使用してワークシートをコピーします

  1. ワークシートを指定された場所にコピーします
  2. ワークシートを新しいワークブックにコピーします
worksheets('worksheet_name').copy before|after :=worksheet_name
worksheets("worksheet_name").copy

move を使用してシートを移動する

  1. ワークシートを指定された場所に移動します
  2. ワークシートを新しいワークブックに移動します
worksheets('worksheet_name').move before|after :=worksheet_name
worksheets("worksheet_name").move

ワークシートを非表示または表示するようにvisible属性を設定します

worksheets("worksheet_name").visible =False or True

count 属性にアクセスして、ワークブック内のワークシートの数を取得します

worksheets.count

range オブジェクト

range 属性を持つセルを参照する

  1. 単一の固定セル領域の参照: このメソッドは、実際にはセル アドレスを通じてセルを参照します。
  2. 複数の不連続セルの参照:range 属性 range のパラメータカンマで区切られた複数のセル アドレスで構成される文字列に設定されます
  3. 複数の領域の共通領域を参照する:range 属性を複数のスペースで区切られた値に設定します。セル アドレスの文字列
  4. 2 つの領域で囲まれた長方形の領域を指します
range("A1:C1")
range("A1:A10,E6,E7:C12").select
range("B1:B10 A4:D6").value
range("B6:B10","D2:D8")

cell 属性を持つセルを参照する

  1. ワークシート内の指定された行と列の交点にあるセルを参照します
  2. セル範囲内のセルを参照します
  3. cells 属性を range 属性のパラメータに設定する
  4. インデックス番号を使用してセルを参照する
activesheet.cells(3,4) ‘3 行目 4 列目で交差するセル D3 を選択します’

range("B3:F9").cells(2,3)=10 'B3:F9 領域の行 2 と列 3 の交点に 100 を入力します'

range(cells(1,1),cells(5,14)).select 'A1:D5領域を指定'

activesheet.cells(2).value=200 'ワークシートの 2 番目のセルを 200 として指定します'

セルの行全体を参照する

VBA では、行はワークシートまたは特定の領域内のすべての行のセットを表します。ワークシートの概要で指定された行を参照するには、行番号またはインデックス番号を使用できます。

activesheet.rows("3:3").select 'アクティブなシートの 3 行目を選択します'
activesheet.rows("3:5").select 'アクティブなシートの行 3 ~ 5 を選択します'
activesheet.rows(3) 'アクティブなシートの 3 行目を選択します'

セルの列全体を参照する

VBA では、列はワークシートまたは特定の領域内のすべての行のコレクションを表します。ワークシート内の指定した行を参照するには、行番号またはインデックス番号を使用できます。

activesheet.columns("F:G").select 'アクティブなシートの列 F ~ G を選択します'

activesheet.columns(3) 'アクティブなシートの列 6 を選択します'

union メソッドを使用して複数のセル範囲を結合する

アプリケーション オブジェクトの Union メソッドは、パラメータで指定された複数のセル領域を結合した領域を返します。このメソッドを使用すると、複数の範囲オブジェクトを結合してバッチ操作を行うことができます。

application.union(range("A1:A10"),range("D1:D5")).select '2 つの領域を同時に選択します'

range オブジェクトの offset 属性

offset 属性を使用すると、指定したセル領域に対して特定のオフセット位置にあるセル領域を取得できます。 offset には 2 つのパラメータがあり、この属性の親オブジェクトによって上下または左右の方向にオフセットされる行と列の数を設定するために使用されます

range("B2:C3").offset(5,3).value=200 'B2:C3 エリアを右に 3 セル、下に 5 セル移動します'

範囲オブジェクトのサイズ変更属性

範囲オブジェクトのサイズ変更属性を使用すると、指定したセル領域を意図的に拡大または縮小して、新しいセル領域を取得できます。

range("B2").resize(4,5) 'B2エリアを4行5列のエリアに拡張します'

range("B2:E6").resize(2,1) '元の領域を2行1列の領域に縮小します'

ワークシート オブジェクトの usedrange 属性

ワークシート オブジェクトの usedrange プロパティは、ワークシートで使用されているセルで囲まれた長方形の領域を返します。usedrange プロパティは、空の行、空の列、または空があるかどうかに関係なく、常に長方形の領域を返します。これらの領域の細胞

activesheet.usedrange.select 'アクティブなワークシートですでに使用されているセルの範囲を選択します'

range オブジェクトの currentregion 属性

range オブジェクトの currentregion プロパティは、指定されたセルを含む連続した長方形の領域を返します。空の行とその下の領域、空の列と右側の領域は currentregion の領域には含まれません強い>

range("B5").currentregion.select

range オブジェクトの end 属性

範囲オブジェクトの end 属性は、指定されたセルを含む範囲の末尾のセルを返します。返される結果は、セル内で [enter+矢印キー] を押して取得したセルと等価です。

range("C5").end(xlUP).address

end パラメータと説明

設定可能なパラメータ パラメータの説明
xlToLeft セル内で [end+左矢印キー] を押すのと同じです
xlToRight セル内で [end+右矢印キー] を押すのと同じですセルキー]
xlUp セル内で[end+上矢印キー]を押すのと同じです
xlDown セル内で [end+下矢印キー] を押すのと同じです

value 属性 - セル内のコンテンツ

range("A1:B2").value="abc"

count 属性、領域に含まれるセルの数を取得します

range("B4:F10").count
range("B4:F10").rows.count
range("B4:F10").columns.count

address 属性を通じてセル アドレスを取得する

msgbox "現在選択されているセルのアドレスは"&selection.address

activate メソッドと select メソッドを使用してセルを選択する

activesheet.range("A1:F5").activate
activesheet.range("A1:F5").select

copy メソッドはセル領域をコピーします

コピーされるセルの数に関係なく、destination パラメータで指定する必要があるのは左上のセルの座標のみです

range('region').copy destination:=range("other_region")

cut メソッドはセル領域をカットします

何個のセルが切り取られても、destination パラメータで指定する必要があるのは左上のセルの座標だけです。

range('region').cut destination:=range("other_region")

delete メソッドを使用して、指定したセルを削除します

範囲オブジェクトの delete メソッドを呼び出すと、指定したセルを削除できますが、手動でセルを削除する場合や、VBA コードを使用してセルを削除する場合とは異なり、Excel では [削除] ダイアログ ボックスは表示されません。 指定したセルを削除した後、Excel に自分の希望に従って他のセルを処理させたい場合は、Excel に意図を伝える VBA コードを記述する必要があります。 B3 が配置されているセルの行全体を削除する場合は、次のようにコードを記述する必要があります。

range("B3").entirerow.delete

オペランドの例

必要に応じてワークブックを作成する

VBA を使用してニーズを満たすワークブックを作成し、指定したディレクトリに保存します。

Sub wbadd()
    Dim wb As Workbook
    Dim sht As Worksheet
    Set wb = Workbooks.Add
    Set sht = wb.Worksheets(1)
    With sht
        .Name = "スタッフ名簿"
    End With
    wb.SaveAs ThisWorkbook.Path & "スタッフ名簿.xlsx"
    ActiveWorkbook.Close
    
    
End Sub

ワークブックが開かれているかどうかを確認する

Sub isopen()
    Dim i As Integer
    For i = 1 To Workbooks.Count
        If Workbooks(i).Name = "得点表.xlsx" Then
            MsgBox "ファイルが開いています"
            Exit Sub
        End If
    Next
    MsgBox "ファイルが開いていません"
End Sub

指定された名前のワークブック ファイルがフォルダー内に存在するかどうかを確認します

Sub isexist()
    Dim fil As String
    fil = ThisWorkbook.Path & "\スタッフ名簿.xlsx"
    If Len(Dir(fil)) > 0 Then
        MsgBox "ファイルが存在しています"
    Else
        MsgBox "ファイルが存在しません"
    End If
    
End Sub

開いていないワークブックにデータを入力する

Sub wbinput()
    Dim wb As String, xrow As Integer, arr
    wb = ThisWorkbook.Path & "\スタッフ名簿.xlsx"
    Workbooks.Open (wb)
    With ActiveWorkbook.Worksheets(1)
        xrow = .Range("A1").CurrentRegion.Rows.Count + 1
        arr = Array(xrow - 1, "jack", "男", #7/8/1987#, #9/1/2010#, "新入社員になって10年目")
        .Cells(xrow, 1).Resize(1, 6) = arr
    End With
    ActiveWorkbook.Close savechanges:=True
    
    
End Sub

アクティブ シートを除くすべてのシートを非表示にする

Sub shtvisible()
    Dim sht As Worksheet
    For Each sht In Worksheets
        If sht.Name <> ActiveSheet.Name Then
            sht.Visible = xlSheetVeryHidden
        End If
    Next
End Sub

指定した名前の新しいワークシートをバッチで作成する

Sub shtadd()
    Dim i As Integer
    Dim sht As Worksheet
    i = 1
    Set sht = Worksheets("Sheet11")
    Do While sht.Cells(i, "E") <> "
       Worksheets.Add after:=Worksheets(Worksheets.Count)
       ActiveSheet.Name = sht.Cells(i, "E").Value
       i = i + 1
    Loop
    
End Sub

データをバッチに分割し、異なるワークシートに保存する

Sub fenlie()
    Dim i As Long, bj As String, rng As Range
    i = 1
    bj = Worksheets("Sheet11").Cells(i, "C").Value
    Do While bj <> "
        Set rng = Worksheets(bj).Range("A1048576").End(xlUp).Offset(1, 0)
        Worksheets("Sheet11").Cells(i, "A").Resize(1, 7).Copy rng
        i = i + 1
        bj = Worksheets("Sheet11").Cells(i, "C").Value
    Loop

End Sub

複数のワークシートのデータを 1 つのワークシートに結合する

Sub hebing()
    Dim sht As Worksheet
    Set sht = Worksheets("Sheet11")
    sht.Rows.Clear
    Dim wt As Worksheet, xrow As Integer, rng As Range
    For Each wt In Worksheets
        If wt.Name <> "Sheet11" Then
            Set rng = sht.Range("A1048576").End(xlUp)
            xrow = wt.Range("A1").CurrentRegion.Rows.Count
            wt.Range("A1").Resize(xrow, 7).Copy rng
        End If
    Next
End Sub

ワークブック内の各ワークシートを個別のワークブック ファイルとして保存します

Sub savetofile()
    Application.ScreenUpdating = False
    Dim folder As String
    folder = ThisWorkbook.Path & "\クラスレポートシート"
    If Len(Dir(folder, vbDirectory)) = 0 Then
        MkDir folder
    End If
    
    Dim sht As Worksheet
    For Each sht In Worksheets
        If sht.Name <> "Sheet11" Then
            sht.Copy
            ActiveWorkbook.SaveAs folder & "\" & sht.Name & ".xlsx"
            ActiveWorkbook.Close
        End If
    Next
    Application.ScreenUpdating = True
    
End Sub

複数のワークブックのデータを 1 つのワークシートに結合する

Sub hzwb()
    Dim bt As Range, r As Long, c As Long
    r = 1
    c = 7
    Dim wt As Worksheet
    Set wt = ThisWorkbook.Worksheets(1)
    wt.Rows(r & ":1045876").ClearContents
    Application.ScreenUpdating = False
    Dim filename As String, sht As Worksheet, wb As Workbook
    Dim erow As Long, fn As String, arr As Variant
    filename = Dir(ThisWorkbook.Path & "\*.xlsx")
    Do While filename <> "
        If filename <> ThisWorkbook.Name Then
            erow = wt.Range("A1").CurrentRegion.Rows.Count
            fn = ThisWorkbook.Path & "\" & filename
            Set wb = GetObject(fn)
            Set sht = wb.Worksheets(1)
            arr = sht.Range(sht.Cells(r, "A"), sht.Cells(1048576, "B").End(xlUp).Offset(0, 5))
            wt.Cells(erow, "A").Resize(UBound(arr, 1), UBound(arr, 2)) = arr
            wb.Close savechanges:=True
        End If
        filename = Dir
    Loop
    Application.ScreenUpdating = True
    
End Sub

同じワークブック内のワークシートにリンクされた目次を作成する

Sub mulu()
    Dim wt As Worksheet
    Set wt = Worksheets("Sheet11")
    wt.Rows("1:1048576").ClearContents
    Dim sht As Worksheet, irow As Integer
    irow = 1
    For Each sht In Worksheets
        If sht.Name <> "Sheet11" Then
            wt.Cells(irow - 1, "A").Value = irow - 1
            wt.Hyperlinks.Add anchor:=wt.Cells(irow - 1, "B"), Address:=", SubAddress:="'" & sht.Name & "'!A1", TextToDisplay:=sht.Name
        End If
        irow = 1 + irow
    Next
End Sub

パラメータ anchor はハイパーリンクの場所を指定し、address はハイパーリンクのアドレスを指定し、subaddress はハイパーリンクのサブアドレスを指定し、TexttoDisplay はハイパーリンクの表示に使用されるテキストを指定します。

プログラムの自動切り替えの実行 - オブジェクトのイベント

Excel が操作に自動的に応答するようにします

  1. このワークブックのコード ウィンドウを開きます
  2. ワークブック オブジェクトを選択し、ステートメントで開くを選択します
  3. サブルーチンを作成します

イベントがリリースされた後に自動的に実行されるプロセスをイベント プロセスと呼びます。イベント プロセスはサブプロセスでもあります。 サブプロセスとは異なり、タイムプロセスのスコープ、プロセス名、パラメータは当社が設定する必要はなく、また任意に設定することもできません。 時間プロセスのプロセス名は常にオブジェクト名と時間名で構成され、オブジェクトが前、イベントが後ろになり、両者はアンダースコアで結ばれます。

シート イベントの使用

ワークシート イベントは、ワークシート オブジェクトで発生するイベントです。ワークブックには複数のワークシート オブジェクトが含まれる場合があり、ワークシート イベント プロセスは対応するワークシートに書き込む必要があります。プロセスが配置されているワークシート オブジェクト内の操作のみがイベントをトリガーできます。対応するイベント。

ワークシート オブジェクトの変更イベント

ワークシート オブジェクトの変更イベントは、プロシージャが配置されているワークシート内のセルが変更されたときにプログラムを自動的に実行するように VBA に指示します。

通常、この方法でイベント処理を記述します。[コード ウィンドウ]の[オブジェクト]リスト ボックスと[イベント]リスト ボックスで、対応するオブジェクトとイベント名を 1 つずつ選択し、 VBA が自動的に実行します イベント プロセスのスコープ、プロセス名、パラメータ情報を設定します

セル変更時に自動実行

Private Sub Worksheet_Change(ByVal Target As Range)
    MsgBox Target.Address & "に変更されました" & Target.Value
    
End Sub

一部のセルが変更されたときに自動的に実行します

Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Column <> 1 Then
        Exit Sub
    End If
    
    MsgBox Target.Address & "に変更されました" & Target.Value
    
End Sub

イベント プロセスが自動的に実行されないようにイベントを無効にする

イベントを無効にすると、操作の実行後にイベントが発生しなくなります。 VBA では、アプリケーション オブジェクトの EnableEvents プロパティを false に設定して、イベントを無効にすることができます。

Private Sub Worksheet_Change(ByVal Target As Range)
    Application.EnableEvents = False
    Target.Offset(0, 1).Value = "テストを受けてください"
    Application.EnableEvents = True
End Sub

selectionchange イベント: 選択したセルが変更されると発生します

ワークシート オブジェクトのselectionchange イベントは、VBA に次のことを伝えます。ワークシート内の選択されたセル範囲が変更されると、イベントのイベント プロシージャが自動的に実行されます。

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    MsgBox "現在選択されているセルは:" & Target.Address
    
End Sub

選択した領域の同じ値を強調表示します

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
   Range("A3:I66").Interior.ColorIndex = xlNone
   If Application.Intersect(Target, Range("A3:I66")) Is Nothing Then
        Exit Sub
    End If
    
   If Target.Count > 1 Then
    Set Target = Target.Cells(1)
   End If
   Dim rng As Range
   For Each rng In Range("A3:I66")
    If rng.Value = Target.Value Then
        rng.Interior.ColorIndex = 6
    End If
    Next
End Sub

セル内のデータの変更をコメント付きで記録します

Dim rngvalue As String

Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Cells.Count > 1 Then
        Exit Sub
    End If
    Dim cvalue As String
    
    If Target.Formula = " Then
        cvalue = "ヌル"
    Else
        cvalue = Target.Text
    End If
    
    If rngvalue = cvalue Then
        Exit Sub
    
    End If
    Dim rngcom As Comment
    Dim comstr As String
    Set rngcom = Target.Comment
    If rngcom Is Nothing Then Target.AddComment
    comstr = Target.Comment.Text
    Target.Comment.Text Text:=comstr & Chr(10) & Format(Now(), "yyyy-mm-ddhh:mm") & _
        "オリジナルコンテンツ:" & rngvalue & "着替える:" & cvalue
    Target.Comment.Shape.TextFrame.AutoSize = True
    
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Target.Cells.Count > 1 Then
        Exit Sub
    End If
    If Target.Formula = " Then
        rngvalue = "ヌル"
    Else
        rngvalue = Target.Text
    End If
    
End Sub

一般的な worksheet イベント

worksheet オブジェクトには合計 17 のイベントがあります。これらのイベントは、[コード ウィンドウ] の [イベント] リスト ボックスまたは VBA ヘルプで確認できます。
共通の worksheet イベント

< td>シートがアクティブ化されたときに発生します
イベント名 時間の説明
activate
beforeDelete シートを削除する前に発生します
beforeDoubleClick ワークシートをダブルクリックした後、
beforeRightClick ワークシートを右クリックする前に、デフォルトのダブルクリック操作が実行されます。 、デフォルトの右クリック 操作の実行前
calculate ワークシートの再計算後に発生します
change ワークシート内のセルが変更されると発生します
deactivate ワークシートがアクティブから非アクティブに変更されると発生します
followHyperlink ワークシート内のハイパーリンクがクリックされたときに発生します
PivotTableUpdate ワークシート内でピボット テーブルが更新された後に発生します
selectionchange ワークシート内の選択が変更されたときに発生します

ワークブック イベントを使用する

ワークブック イベントは、workbook オブジェクトで発生するイベントです。workbook オブジェクトはワークブックを表します。workbook オブジェクトのイベント プロセスは、ThisWorkbook モジュールに記述する必要があります。 [プロジェクト エクスプローラー] このモジュールを検索

open イベント: ワークブックが開かれたときに発生します

open イベントは、最も一般的に使用される workb@ook イベントの 1 つであり、海外ではこのイベントを使用して Excel の初期化と設定が行われます。たとえば、ワークブックを開く Excel ウィンドウや作業インターフェイスの設定などです。カスタム ユーザーフォームなどを表示します。

beforeclose イベント: ワークブックを閉じる前に発生します

private sub workbook_beforeclose(cancel as boolean)
    if msgbox("ワークブックを閉じてもよろしいですか?",vbyesno) =vbno then
        cancel =true
    end if
end sub

sheetchange イベント: ワークシートのセルが変更されたときに発生します

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
    MsgBox "あなたが変えているのは、:" & Sh.Name & "ワークシート内で" & Target.Address & "細胞"
End Sub

一般的な workkbook イベント

イベント名 イベントの説明
activate
AddinInstall ワークブックがアドインとしてインストールされたときに発生します
AddinUninstall ワークブックがアドインとしてアンインストールされるときに発生します
AfterSave ワークブックを保存した後に発生しますworkbook
BeforeClose ワークブックを閉じる前に発生します
BeforePrint 印刷時 指定したワークブックの前に発生します
beforesave ワークブックを保存する前に発生します
Deavtivate< / td> ワークブックのステータスが非アクティブのときに発生します
NewChart ワークブックに新しいグラフが作成されたときに発生します
Newsheet ワークブックに新しいワークシートが作成されるときに発生します
open Open work
sheetavtivate シートがアクティブ化されたときに発生します
sheetBeforeDoubleClick ワークシートをダブルクリックする前に発生します
sheetBeforeRightClick ワークシートを右クリックする前に発生します
sheetCalculate シートが再計算された後に発生します
SheetChange シートのセルが変更されたとき 後に発生します
sheetDeactivate シートが非アクティブになったときに発生します
sheetFollowHyperLink シート内のハイパーリンクが非アクティブになったときに発生しますワークブックがクリックされる
SheetPivotTableUpdate ピボット テーブルが更新されると発生します。
sheetSelectionchange いずれかのシートで選択が変更されたときに発生します
WindowActivate いずれかのワークブック ウィンドウがアクティブになったときに発生します
windowdeactivate ウィンドウが非アクティブになったときに発生します
windowresize ワークブック ウィンドウのサイズを変更したときに発生します

イベントではないイベント

application オブジェクトの onkey メソッド

OnKey メソッドは、キーボード上で指定されたキーまたはキーの組み合わせが押されたときに、指定されたプログラムを自動的に実行するように Excel に指示します。

Sub test()
    Application.OnKey "+e", "Hello"
End Sub

Sub Hello()
    MsgBox "onkeyメソッドを学んでいます"
End Sub

onkey に設定できるボタンとそれに対応するコード

< /tr >
使用するキー 設定するコード
Backspace {backspace} または {BS}
Break {Break}
Caps Lock {CAPSLOCK}
Delete or Del {DELETE} OR {DEL}
下矢印 {DOWN}
End {END}
Enter(テンキー) {ENTER}
ENTER ~
Esc {ESCAPE} または {ESC}
Home {HOME}
Ins {INSERT}
左矢印 {LEFT}
Num Lock {NUMLOCK}
PageDown {PGDN}
PageUp {PGUP}
右矢印 {RIGHT}
Scroll Lock {SCROLLLOCK}
Tab {TAB}
上矢印 {UP}
F1 ~ F15 {F1} ~ {F15}
Shift +
Crtl ^
Alt %

Application オブジェクトの OnTime メソッド

Ontime メソッドは、指定された時刻に指定されたプロセスを自動的に実行するように VBA に指示します。

Sub test()
    Application.OnTime TimeValue("14:07:00"), "Hello"
End Sub

Sub Hello()
    MsgBox "ontimeメソッドを学んでいます"
End Sub

Ontime の DateSerial パラメータは、指定した年、月、日を設定できます。Scheduled の値が TRUE の場合、新しい Ontime プロセスが設定されます。 False です。以前に設定されたプロセスをクリアします。デフォルト値は TRUE です。

ファイルを自動的に保存する

Sub test()
    Application.OnTime Now() + TimeValue("00:05:00"), "AutoSave"
End Sub

Sub AutoSave()
    ThisWorkbook.Save
    Call test
End Sub

カスタム インターフェースを設定する

コントロール、操作インターフェイスの構築に不可欠な部分

Excel には、フォーム コントロールと ActiveX コントロールの 2 種類のコントロールがあります。 Excel の [リボン] にあります

フォーム コントロール

コントロール名 コントロールの説明
ボタン マクロ コマンドの実行に使用されます
コンボ ボックスには複数の選択オプションがあり、ユーザーはいずれかの項目を選択できます
チェックボックス 選択用のコントロール、複数の選択肢
数値調整ボタン 選択コントロールの矢印をクリックして値を選択します
リスト ボックス ユーザーがオプションを選択できる複数のオプションのリストを表示します
オプション ボタン 選択に使用されるコントロール。通常、複数のオプション ボタンがコンボ ボックスと組み合わされており、1 つのコンボ ボックスで同時に選択できるオプション ボタンは 1 つだけです。 group
グループ ボックス 他の複数のコントロールを組み合わせるために使用されます
ラベル 静的テキストの入力と表示に使用されます
スクロールバー 水平スクロールバーと垂直スクロールバーが含まれます

 

  • ActiveX コントロール: Excel では 11 個の ActiveX コントロールが使用できますが、ワークシートで使用されている ActiveX コントロールはこれ以外にもあります。[その他のコントロール] ボタンをクリックして、ポップアップ ダイアログで他のコントロールを選択できます。ボックス

     

    ワークシートでのコントロールの使用

    1. フォーム コントロールを追加する

    2. フォーム コントロールを描画する

    3. 対応する領域を設定します

    ワークシートでの ActiveX コントロールの使用

    1. ActiveX コントロールを追加する

    2. プロパティを設定する

    制御コードの書き込み

    Private Sub xb2_Click()
          If xb2.Value = True Then
            Range("D2").Value = "女性"
            xbl.Value = False
        End If
    End Sub
    
    Private Sub xbl_Click()
        If xbl.Value = True Then
            Range("D2").Value = "男"
            xb2.Value = False
        End If
           
    End Sub
    

    表示コンテンツ

     

    設定する必要はありません。既製のダイアログ ボックスを使用します

    InputBox 関数を使用して、データを入力できるダイアログ ボックスを作成します

    入力関数には 5 つのパラメータがあります:

    1. prompt パラメータは、ダイアログ ボックスに表示されるプロンプト メッセージを設定するために使用されます。
    2. title は、ダイアログ ボックスのタイトルを設定するために使用されます。
    3. default は、次の目的で使用されます。デフォルトの入力値を設定します。
    4. xpos は、ダイアログ ボックスの左端と画面の左端の間の距離を設定するために使用されます。
    5. ypos は、ダイアログ ボックスの左端と画面の左端の間の距離を設定するために使用されます。ダイアログボックスの上部と画面の上部
    Sub inbox()
        Dim c As Variant
        c = InputBox("セルA1に入力したいデータは何ですか?", Title:="ヒント", Default:="jack", xpos:=200, ypos:=250)
        Range("A1").Value = c
        
    End Sub
    

    入力メソッドを使用して対話型ダイアログを作成する

    アプリケーション オブジェクトの inputbox メソッドを使用して、プログラム内にインタラクティブなダイアログ ボックスを作成することもできますが、Inputbox 関数と比較すると、Input メソッドのパラメータが若干異なることに注意してください。

    application.inputbox(prompt:="コンテンツ",title:= “タイトル”
        default := "デフォルト", left := "画面左端からの距離"
        top := “画面右端からの距離”, type := "入力データの種類")
    

    type パラメータの設定可能な項目と説明

    設定可能なパラメータ値 メソッドの戻り結果の型
    0
    1 数値
    2 テキスト (文字列 )
    4 ロジック (true または false)
    8 セル参照(範囲オブジェクト)
    16 エラー値
    64 値の配列
    Sub rngpinput()
        Dim rng As Variant
        On Error GoTo cancel
        Set rng = Application.InputBox("値を入力する必要があるセルを選択してください", Type:=8)
        rng.Value = 100
    cancel:
        
    End Sub
    

    msgbox 関数を使用して出力ダイアログを作成する

    Sub msg()
        MsgBox "あなたが編集しているのは、:" & ThisWorkbook.Name, Buttons:=vbOKOnly + vbInformation, Title:="提示"
       
    End Sub
    

    ダイアログ ボックスに表示されるボタンのスタイルを設定します

    < td>[OK]ボタンと[キャンセル]ボタンのみを表示
    定数 説明
    vbOkonly 0 【OK】ボタンのみ表示
    vbOkcancel 1
    vbAbortRetryIgnore 2 [終了]、[再試行]を表示,【無視】3 つのボタン
    vbYesNoCancel 3 はい、いいえ、キャンセルの 3 つのボタンを表示
    vbYesNo 4 はいボタンといいえボタンを表示
    vbRetryCancel 5 再試行表示、2 つのボタンをキャンセル

    さまざまなアイコンのパラメータ設定

    < td>[警告クエリ] アイコンを表示
    定数 説明
    vbCritical 16 【重要な情報】アイコンを表示
    vbQuestion 32
    vbExclamation 48 [警告メッセージ] アイコンを表示
    vbInformation 64 [通知メッセージ]アイコンを表示

    設定ダイアログのデフォルト ボタン
    定数 | 値 | 説明
    vbDefaultButton1 | 0 | 最初のボタンはデフォルト値です
    vbDefaultButton2 | 2 番目のボタンはデフォルト値
    vbDefaultButton3 | 512 | 3 番目のボタンはデフォルト値です
    vbDefaultButton4 | 768 | 4 番目のボタンはデフォルト値です

    ダイアログの種類を指定します

    定数 説明
    vbApplicationModel 0 アプリケーションは強制的に復帰します。アプリケーションは、ユーザー メッセージ ボックスが応答するまで続行する前に実行を一時停止します。
    vbSystemModel 4096 システムは強制的に復帰します。ユーザーがメッセージ ボックスに応答するまで、すべてのアプリケーションは作業を続行する前に一時停止されます。

    buttons パラメータのその他の設定

    定数 説明
    vbMsgBoxHelpButton 16384 ダイアログ ボックスにヘルプ ボタンを追加します
    vbMsgBoxForeground 65536 表示されているダイアログ ウィンドウを最前面ウィンドウとして設定します
    vbMsgBoxRight 524288 ダイアログに表示されるテキストを設定しますas 右揃え
    vbMsgBoxRtlReading 1048576 テキストがヘブライ語および Alibaba システムで右から左に表示されることを指定します Read

    MsgBox 関数の戻り値

    < td>vbIgnore
    定数 説明
    vbOk 1 [OK]ボタンをクリックしたとき
    vbCancel 2 [キャンセル]ボタンをクリックした場合
    vbAbort 3 [中止]ボタンをクリックした場合
    vbRetry 4 [再試行]ボタンをクリックしたとき
    5 [無視]ボタンをクリックしたとき
    vbYes 6 [はい]ボタンをクリックした場合
    vbNo 7 [いいえ]ボタンをクリックした場合クリックされました
    Sub msgbut()
        Dim yn As Integer
        yn = MsgBox("セル A1 に今日の日付を入力してもよろしいですか?", vbYesNo + vbQuestion)
        If yn = vbYes Then
            Range("A1").Value = Now()
        End If
        
    End Sub
    

    FindFile メソッドを使用して [開く] ダイアログ ボックスを表示します

    applicationcation オブジェクトの FindFile メソッドを使用すると、[開く] ダイアログ ボックスが表示され、ダイアログ ボックス内のファイルを選択して開くことができます。

    Sub openfile()
        If Application.FindFile = True Then
            MsgBox "the file you chosed has benn open"
        Else
            MsgBox "[キャンセルボタン]をクリックしたため、操作は完了しません"
        End If
            
    End Sub
    

    GetOpenFileName メソッドを使用して [開く] ダイアログ ボックスを表示します

    findfile メソッドとは異なり、GetOpenFileName メソッドを使用すると、ダイアログ ボックスで選択したファイルのファイル名 (パスを含む) を取得し、findfile メソッドを使用すると、ダイアログ ボックスで選択したファイルを開きます。ダイアログ ボックス

    任意のファイルを選択してください

    Sub getopen()
        Dim fil
        fil = Application.GetOpenFilename
        If fil = False Then
            MsgBox "書類がありません"
            Exit Sub
        Else
            Range("E6").Value = fil
        End If
    End Sub
    

    特定の種類のファイルのみをダイアログに表示します

    Sub getopen()
        Dim fil
        fil = Application.GetOpenFilename(filefilter:="画像ファイル,*.jpg")
        If fil = False Then
            MsgBox "書類がありません"
            Exit Sub
        Else
            Range("E6").Value = fil
        End If
    End Sub
    

    ダイアログ ボックスに複数の拡張子を持つファイルを同時に表示させる

    Sub getopen()
        Dim fil
        fil = Application.GetOpenFilename(filefilter:="画像ファイル,*.jpg;*png")
        If fil = False Then
            MsgBox "書類がありません"
            Exit Sub
        Else
            Range("E6").Value = fil
        End If
    End Sub
    

    ダイアログ ボックスで複数の種類のファイルを表示するように選択します

    Sub getopen()
        Dim fil
        fil = Application.GetOpenFilename(filefilter:="画像ファイル,*.jpg;*png,Excelワークブックファイル,*xls;*xlsx")
        If fil = False Then
            MsgBox "書類がありません"
            Exit Sub
        Else
            Range("E6").Value = fil
        End If
    End Sub
    

    FilterIndex パラメータを使用してデフォルトで表示されるファイル タイプを設定します
    [ファイル タイプ] ドロップダウン リストで複数のオプションのファイル タイプが設定されている場合は、GetOpenFileName メソッドの FiterIndex パラメータを使用してデフォルトのファイル タイプを設定できます。ダイアログ ボックスに表示されるファイルの種類

    Sub getopen()
        Dim fil
        fil = Application.GetOpenFilename(filefilter:="画像ファイル,*.jpg;*png, Excel工作簿文件, *xls;*xlsx", FilterIndex:=2)
        If fil = False Then
            MsgBox "書類がありません"
            Exit Sub
        Else
            Range("E6").Value = fil
        End If
    End Sub
    

    複数のファイルを同時に選択できる設定です
    GetOpenFileNameメソッドで表示される[開く]ダイアログボックスでは、デフォルトでは同時に選択できるファイルは1つだけです。複数のファイルを同時に選択するには、MultiSelect パラメータを TRUE に設定します。

    Sub getopen()
        Dim fil
        fil = Application.GetOpenFilename(filefilter:="画像ファイル,*.jpg;*png, Excelワークブックファイル,*xls;*xlsx", FilterIndex:=2, MultiSelect:=True)
         Range("E6").Value = fil
    End Sub
    

    ダイアログのタイトルを変更

    Sub getopen()
        Dim fil
        fil = Application.GetOpenFilename(filefilter:="画像ファイル,*.jpg;*png, Excelワークブックファイル,*xls;*xlsx", FilterIndex:=2, MultiSelect:=True, Title:="名前を取得したいファイルを選択してください")
         Range("E6").Value = fil
    End Sub
    

    GetSaveAsFilename メソッドを使用して [名前を付けて保存] ダイアログ ボックスを表示します

    選択したファイルの名前を取得するには、アプリケーション オブジェクトの GetSaveAsFilename メソッドを呼び出して [名前を付けて保存] ダイアログ ボックスを開き、ダイアログ ボックスでファイルを選択し、パス情報を含むファイル名を取得することもできます。ファイルの

    Sub getsaveas()
        Dim fil As String, filename As String, filter As String, tile As String
        filename = "例"
        filter = "Excelワークブック,*xls;*xlsx,Wordrd ドキュメント,*.doc;*.docx"
        Title = "情報を参照するにはファイルを選択してください"
        fil = Application.GetSaveAsFilename(InitialFileName:=filename, fileFilter:=filter, Title:=Title, FilterIndex:=2)
        Range("A10") = fil
    End Sub
    

    applicationation オブジェクトの FileDialog プロパティを使用してディレクトリ名を取得します

    取得したいのがファイル名ではなく、指定したディレクトリのパスと名前である場合は、aplication オブジェクトの FileDialog プロパティを使用できます。

    Sub getfolder()
        With Application.FileDialog(filedialogtype:=msoFileDialogFilePicker)
            .InitialFileName = "D:\"
            .Title = "ディレクトリを選択してください"
            .Show
            If .SelectedItems.Count > 0 Then
                Range("A1").Value = .SelectedItems(1)
            End If
        End With
    End Sub
    
    

    msoFileDialogType パラメータは定数に設定できます

    定数 説明
    msoFileDialogFilePicker ファイルの選択を許可する
    msoFileDialogFolderPicker フォルダーの選択を許可する
    msoFileDialogOpen ファイルを開くことを許可します
    msoFileDialogSaveAs ファイルの保存を許可します

    フォーム オブジェクトを使用した対話型インターフェイスの設定

    対話型インターフェイスを設計し、コントロールとその機能を定義できればと何度も思いますが、そのためには VBA の別の共通オブジェクト、つまりユーザーフォーム オブジェクトを使用する必要があります。 ユーザー フォームは Userform オブジェクトであり、これはよくフォーム オブジェクトと呼ばれるものです。 フォームをプロジェクトに追加すると、フォームに ActiveX コントロールを自由に追加できます。VBA コードを記述してこれらのコントロールの関数を指定する限り、これらのコントロールを使用して Excel と対話できます。

    1. ユーザー フォームをプロジェクトに追加する
    1. プロパティを設定してフォームの外観を変更する
    1. フォームにコントロールを追加・設定する機能

    コードを使用して自分で設計したフォームを操作する

    フォームを表示

    1. フォームを手動で表示する

    VBE ウィンドウでフォームを選択し、[実行]—>[サブプロセス/フォームの実行] コマンドを順番に実行すると、選択したフォームが表示されます。

    1. コードを使用してプログラムにフォームを表示する
    sub showform()
        load inputform
        inputform.show
    end sub
    

    フォームをモードレス フォームとして表示する

    1. モーダル フォームはフォーム外のオブジェクトを操作できません

    フォームをモーダル フォームとして表示するには、次のコードを使用できます。

    InputForm.show
    

    または、show メソッドのパラメータを省略するか、パラメータを vModal に設定すると、VBA はウィンドウをモーダル フォームとして認識します
    2. モードレス フォームでは、フォーム外の他の操作が可能になります

    フォームをモードレス フォームとして表示するには、show メソッドでパラメータを指定する必要があります

    Inputform.show vmodeless
    

    フォームがモードレス フォームとして表示されている場合、フォームが表示されると、システムはプログラムの残りのコードを実行し続け、フォーム外の他のオブジェクトを操作することも可能になります。

    表示されているフォームを閉じるまたは非表示にする

    1. アンロード コマンドを使用してフォームを閉じる
    unload Inputform
    
    1. フォームを非表示にするには、Hide メソッドを使用します
    inputform.hide
    

    ユーザーフォームのイベント アプリケーション

    Initialize イベントを使用してフォームを初期化する

    Initialize イベントはフォームを表示する前に発生します。load ステートメントを使用してプログラムにフォームをロードするか、show を使用してフォームを表示すると、この時間がトリガーされます。

    Private Sub UserForm_Initialize()
        性別.List = Array("男", "女性")
    End Sub
    

    QueryClose イベントを使用して、フォームに付属の [閉じる] ボタンを無効にします

    Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
        If CloseMode <> vbFormCode Then Cancel = True
    End Sub
    

    queryclose イベントプロセスは 2 つのパラメータを持つサブプロセスであり、cancel パラメータはフォームを閉じる操作に応答するかどうかを決定します。 値が TRUE の場合、プログラムはフォームを閉じる操作に応答しません。 cancel の値が false の場合、プログラムはフォームを閉じます。 CloseMode パラメータはフォームを閉じる方法であり、異なる終了メソッドによって返される値は異なります

    CloseMode パラメータの戻り値の説明

    定数 説明
    vbFormControlMenu 0 フォーム内の [閉じる] ボタンをクリックしてフォームを閉じます
    vbFormCode 1 アンロード ステートメントによってフォームを閉じる
    vbAppWindows 2 現在の Windows 操作環境のプロセスが終了しています
    vbAppTaskManagee 3 Windows [タスク マネージャー] がアプリケーション全体を閉じています

    フォームのコントロールの関数を設定する

    [OK] ボタンのイベント プロシージャを追加する

    Private Sub cmd_OK_Click()
        Dim xrow As Long
        xrow = Range("A1").CurrentRegion.Rows.Count + 1
        Cells(xrow, "A").Value = 名前.Value
        
        Cells(xrow, "B").Value = 性別.Value
        Cells(xrow, "C").Value = birth.Value
        名前.Value = "
        性别.Value = "
        birth.Value = "
    End Sub
    

    コントロールのショートカット キーを設定する

    ボタンのショートカット キーを設定した後、フォームが表示されたら、対応するショートカット キーを押すと、フォーム内でマウスでボタンをクリックするのと同じになります。

    Private Sub UserForm_Initialize()
        性别.List = Array("男", "女性")
        cmd_OK.Accelerator = "N"
    End Sub
    

    コントロールの Tab キー シーケンスを変更する

    オブジェクトがアクティブ化されている場合にのみ、いくつかのキーストロークを入力できます。 コントロールのタブ オーダーにより、ユーザーが [Tab] または [Shift+Tab] キーの組み合わせを押した後にコントロールがアクティブになる順序が決まります。 フォームをデザインするとき、システムはコントロールが追加された順序に従ってコントロールのタブ オーダーを決定します。 ただしこの順序は変更可能です。 VBEでフォームを選択し、[表示]→[タブオーダー]コマンドを順に実行します。 [タブ オーダー] ダイアログ ボックスを表示し、コントロールのタブ オーダーを調整できます。

    フォームを使用してシンプルなログイン フォームをデザインする

    1. フォーム表示をデザインする

    2. コントロールの関数を指定するコードを追加します

    
    
    Private Sub cmd_cacel_Click()
        Unload ユーザーログイン
        ThisWorkbook.Close savechanges:=False
    End Sub
    
    Private Sub cmd_ok_Click()
        Application.ScreenUpdating = False
        Static i As Integer
        If CStr(username.Value) = Right(Names("username").RefersTo, Len(Names(username).RefersTo) - 1) And CStr(pwd.Value) = Right(Names("userword").RefersTo, Len(Names("userword").RefersTo) - 1) Then
            Unload ユーザーログイン
        Else
            i = i + 1
            If i = 3 Then
                MsgBox "ワークブックを開く権限がありません"
                ThisWorkbook.Close savechanges:=False
            Else
                msg "入力ミス,エントリーチャンスは" & (3 - i) & "回あります"
                username.Value = "
                pwd.Value = "
            End If
        End If
        Application.ScreenUpdating = True
        
    End Sub
    
    Private Sub pwd_set_Click()
         Dim old As String, new1 As String, new2 As String
        old = InputBox("パスワードを入力してください:", "ヒント")
        If old <> Right(Names("userword").RefersTo, Len(Names("userword").referto) - 1) Then
            MsgBox "元のパスワードが間違って入力されたため、変更できません", vbCritical, "間違い"
            Exit Sub
        End If
        new1 = InputBox("新しいパスワードを入力してください:", "ヒント")
        If new1 = " Then
            MsgBox "新しいパスワードを空にすることはできません。変更が完了していません", vbCritical, "間違い"
            Exit Sub
        End If
        new2 = InputBox("新しいパスワードをもう一度入力してください:", "ヒント")
        If new1 = new2 Then
            Names("userword").RefersTo = "=" & new1
            ThisWorkbook.Save
            MsgBox "パスワード変更済み"
        Else
            MsgBox "2 つのパスワード入力が矛盾しており、変更が完了していません", vbCritical, "間違い"
        End If
        
    End Sub
    
    Private Sub user_set_Click()
        Dim old As String, new1 As String, new2 As String
        old = InputBox("ユーザー名を入力してください:", "ヒント")
        If old <> Right(Names("username").RefersTo, Len(Names("username").referto) - 1) Then
            MsgBox "元のユーザー名が間違って入力されたため、変更できません", vbCritical, "間違い"
            Exit Sub
        End If
        new1 = InputBox("新しいユーザー名を入力してください:", "ヒント")
        If new1 = " Then
            MsgBox "新しいユーザー名を空にすることはできません。変更が完了していません", vbCritical, "間違い"
            Exit Sub
        End If
        new2 = InputBox("新しいユーザー名をもう一度入力してください:", "ヒント")
        If new1 = new2 Then
            Names("username").RefersTo = "=" & new1
            ThisWorkbook.Save
            MsgBox "ユーザー名の変更が完了しました"
        Else
            MsgBox "2 つのユーザー名に矛盾があり、変更が完了していません", vbCritical, "間違い"
        End If
        
    End Sub
    

作成したコードをデバッグおよび最適化する

エラー時の GoTo タグ

On Error GoTo label は、実際には「on error」の後に追加された GoTo ステートメントです。ここで、「label」は goto ステートメントに設定されたラベルであり、数字またはコロンを含むテキストです。 。 タグは、プログラムの実行中にランタイム エラーが発生した場合、タグが配置されている行のコードにジャンプしてプログラムの実行を続行するように VBA に指示します。実際には、プログラムがエラーをスキップできるようにするためです。コードを作成し、別の場所からプログラムを再起動します。

Sub test()
    On Error GoTo a
    Worksheets("abc").Select
   Exit Sub
a: MsgBox "選択するシートがありません"

End Sub

次のエラー再開

Resume Next は、プログラムでエラーが発生した場合、エラーのあるコードを無視し、エラー行の後のコードを実行するように VBA に指示します。 プログラムの先頭に On Error Resume Next ステートメントが追加されている場合、プログラムの実行時に、プログラムに実行時エラーがあっても、VBA はプログラムを中断せず、エラーのあるすべてのステートメントを無視します。エラーステートメントの後もコードの実行を継続します。

Sub test()
    On Error Resume Next
    Worksheets("abc").Select
    Exit Sub
    MsgBox "選択するシートがありません"

End Sub

On Error GoTo 0

On Error GoTo 0 ステートメントを使用すると、 プログラム内のランタイム エラーのキャプチャが閉じられます。On Error GoTo 0 ステートメントの後にプログラムにランタイム エラーがある場合、エラーは捕捉されません

Sub test()
    On Error GoTo 0
    Worksheets("abc").Select
   Exit Sub
    MsgBox "選択するシートがありません"

End Sub