エクセルVBA抽選の実行コードを組み立てる-エクセルVBA抽選ソフト作成2

tyusenjikkoueyecatch

エクセルVBA抽選ソフトの作成方法説明の2回目です。
今回はエクセルVBA抽選の実行コードを組み立て方を解説します。
抽選方法にバリエーションを設定していますので、抽選のイベント性がより高くなります。

こんにちは、じゅんぱ店長(@junpa33)です。

 

今回のエクセルVBA抽選ソフトの作り方の紹介は、「抽選実行コードの仕組み」づくりです。

一つの抽選イベントで、複数(6つ)の賞の抽選が出来るようにしたいと思います。

 

前の記事を読み直すのはこちら↓からです。

extyusenranhyoeyecatch乱数表(抽選表)を人数に合わせて作る-エクセルVBA抽選ソフト作成1

 

tyusentorisetueyecatch
イベント企画などでの抽選作業を、エクセルVBAを利用して簡単に進めて行きます。 無料でダウンロードできるエクセルVBA抽選ソフト【重複なし】です。 少人数参加から大人数まで対応します。記事内に説明書きあります。 こんにちは、じゅんぱ店長(@ ...
続きを読む
extyusenranhyoeyecatch
エクセルVBA抽選ソフトの作り方を紹介していきます。 初回の今回は、参加者を乱数表に落とし込むところまでです。 後々に、この乱数表(抽選表)を使って当選番号が決まっていきます。 こんにちは、じゅんぱ店長(@junpa33)です。 今回から、 ...
続きを読む
tyusenjikkoueyecatch
エクセルVBA抽選ソフトの作成方法説明の2回目です。 今回はエクセルVBA抽選の実行コードを組み立て方を解説します。 抽選方法にバリエーションを設定していますので、抽選のイベント性がより高くなります。 こんにちは、じゅんぱ店長(@junpa ...
続きを読む
tyusenuformeyecatch
抽選作業を操作するためのユーザーフォーム作成を説明します。 今回はエクセルVBA抽選ソフト作成の3回目になります。 設置コントロールは多いですが、同じパターンで設置できます。 入力ミスに注意しましょう。 こんにちは、じゅんぱ店長(@junp ...
続きを読む
tyusencomopteyecatch
コマンドボタンで起動するコード(プロシージャー)を作ります。 今回はエクセルVBA抽選ソフト作成4になります。 単一的に実行させるのではなく、オプションボタンで指定したスタイルで実行の動作を可変させています。 こんにちは、じゅんぱ店長(@j ...
続きを読む
tyusenbackupeyecatch
ユーザーフォームに項目記入しても、一旦非表示にしてしまうと、 再表示時には、入力した項目がすべてクリアされていることにショックを感じます。 バックアップ対策で表示復旧を簡単に行えるようにします。 こんにちは、じゅんぱ店長(@junpa33) ...
続きを読む

 

 

エクセルVBA抽選の実行コード組み立て内容

 

抽選の実行プログラムの中で、

実行時にさせたいことは大きく次の6点になります。

そしてこの記事では、②から⑥の項目に関して説明していきます。

これらはModule2へのコード記述になります。

  1.  ユーザーフォームで、抽選作業のすべてをコントロールする
  2.  一つの抽選イベントで6つの賞を設定でき、個別に抽選作業をすることが出来る
  3. 1つの賞の抽選に対して連続(一度にすべて)、単発(一回のみの抽選)の2種類の抽選方法を選択できる
  4. 抽選表に「抽選中」「当選」が視認できるようにする
  5.  先に当選していた場合は、次の当選は無効にする
  6. 設定した賞の進行状態を上部に表示する

 

抽選実行のエクセルVBAコード

 

今回のエクセルVBAコードは「Module2」に記述します。

「Module2」に記述する全コードは次のようになります。

  1.  プロジェクト内とモジュール内の変数宣言
  2.  抽選の実行プロシージャー
  3.  連続抽選のためのプロシージャー
  4.  単発抽選のためのプロシージャー
  5. 重複当選チェックのプロシージャー
  6. 当選番号リストアップのプロシージャー
  7. 当選者集計のプロシージャー

 

①プロジェクト内とモジュール内の使用変数の宣言

 

プロジェクト内とこのModele2内で使う変数を宣言します。

コード

Option Explicit
'Windows API Sleep関数の使用宣言
Private Declare Sub Sleep Lib "kernel32" (ByVal ms As Long)
'最終行の行数
Public Arow, SYOrow, SETrow As Long
'賞名
Public VName As String
'当選本数
Public Hon, Zan, Cot As Long
'抽選表のセル行列位置
Dim Vc, Vr As Long
'重複当選指標、セル色コード
Dim Jfk, Col As Long
'Sleep関数の時間指定
Dim time As Long
'重複チェック指標
Dim MR As Long

 

宣言変数

  • Arow・・・・ B列の最終行、 SYOrow・・・・ A列の最終行、 SETrow・・・・ A列とB列の最終行
  • VName・・・・ 6つの賞名
  • Hon・・・・ 各賞の当選本数、 Zan・・・・ 各賞の当選残数、 Cot・・・・ 当選順位
  • Vc・・・・ 抽選表のセル位置(列)、 Vr・・・・ 抽選表のセル位置(行)
  • Jfk・・・・ 重複当選が発生した回数をカウント、 Col・・・・ 抽選表の元のセル色を保存
  • time・・・・ Sleep関数の休止時間を規定する
  • MR・・・・ 重複当選になるかどうかの判断指標

 

MEMO

変数宣言の方法についてはこちらを参考にしてください。

vbasengeneyecatchエクセルVBA 変数の適用範囲を宣言方法でコントロールする

 

②抽選の実行プロシージャー

 

抽選を実行する本体のプロシージャーになります。

そのほか部品化された他のプロシージャーがここから呼び出されていきます。

 

宣言変数

  • SelT・・・・ Falseなら単発抽選、Trueなら連続抽選
  • YN・・・・ 「0か1」抽選方法の識別に使う Module3で規定
  • PrN()・・・・ 賞名 Module3で規定
  • PrQn()・・・・ 当選本数 Module3で規定
  • ST・・・・ ユーザーフォームの6つの賞の抽選ボタンの識別

 

コード設計のポイント

抽選イベントで6つの賞を抽選できるようにし、さらにそれぞれに単発抽選と連続抽選を設定しています。

 

このプロシージャーは、ユーザーフォームの合計12個のコマンドボタンから12種類の抽選実行命令が入ってきます。

 

実行条件の差異分岐を、簡潔にコード記述するため、If条件文ではなく、Select Case文を使っています。

 

各抽選実行ボタンで共通のコード処理となる部分は、(自分としての)可読性を考慮して、部品プロシージャー化しています。

(どこまで部品化するかは個人的所見があると思います。)

 

各賞の抽選状況の集計を上部に表示します。

当選者に対して、賞名と当選順位、当選者番号を当選順に表示していきます。

tyusentyujikko001a

 

コード

Sub 抽選会()
'SelTで単発抽選かどうかを判断します
    Dim SelT As Boolean
    
        Set TYsheet = Worksheets("抽選会場")
        TYsheet.Select
        If Range("A1") = "" Then Exit Sub
    
        Arow = Cells(Rows.Count, 2).End(xlUp).Row
        Range("C1").Clear
        Ar = Val(Mid(Range("B2"), 2))
    'Parは参加人数
        Par = Val(Mid(Range("J3"), 7))
        VName = ""
        Jfk = 0
    'YNは抽選方法の識別標識ですModule3で規定
        If YN = 0 Then
            SelT = False
        ElseIf YN = 1 Then
            SelT = True
        End If
        
    'STは設定ナビの12個の抽選ボタンに値が割り振られています
    'PrN()は賞名、PrQn()は当選本数 Module3で規定しています
        Select Case ST
            Case Is = 1
                VName = PrN(1)
                Hon = PrQn(1) - Range("B5")
            Case Is = 2
                VName = PrN(2)
                Hon = PrQn(2) - Range("B6")
            Case Is = 3
                VName = PrN(3)
                Hon = PrQn(3) - Range("B7")
            Case Is = 4
                VName = PrN(4)
                Hon = PrQn(4) - Range("B8")
            Case Is = 5
                VName = PrN(5)
                Hon = PrQn(5) - Range("B9")
            Case Is = 6
                VName = PrN(6)
                Hon = PrQn(6) - Range("B10")
        End Select
    
        SYOrow = Cells(Rows.Count, 1).End(xlUp).Row
    '抽選中の賞名を当選一覧で表示するセル位置を決める
        If VName <> Cells(SYOrow, 1) Then
        
            If Arow = SYOrow Then
                SETrow = 0
            ElseIf Arow > SYOrow Then
                SETrow = Arow - SYOrow
            ElseIf Arow < SYOrow Then
                SETrow = -1
            End If
            
            With Range("A" & SYOrow + 1 + SETrow)
                .Value = VName
                .Font.Size = 13
                .Font.Bold = True
                .Font.ColorIndex = 3
            End With
        
        End If
        
        If SelT = True Then
            Call Module2.連続抽選
        ElseIf SelT = False Then
            Call Module2.単発抽選
        End If
    '抽選完了表示
        With Range("A2")
            .Value = "抽選完了"
            .Font.Bold = True
            .Font.Size = 15
            .Font.ColorIndex = 2
            .Interior.ColorIndex = 53
        End With
    '重複当選表示
        With Range("C2")
        .Value = "重複当選 " & Jfk & " 回発生しました。"
            .Font.Bold = True
            .Font.Size = 13
        End With
    '当選未決数表示
        Select Case VName
            Case Is = PrN(1)
                Range("C5") = PrQn(1) - Range("B5")
            Case Is = PrN(2)
                Range("C6") = PrQn(2) - Range("B6")
            Case Is = PrN(3)
                Range("C7") = PrQn(3) - Range("B7")
            Case Is = PrN(4)
                Range("C8") = PrQn(4) - Range("B8")
            Case Is = PrN(5)
                Range("C9") = PrQn(5) - Range("B9")
            Case Is = PrN(6)
                Range("C10") = PrQn(6) - Range("B10")
        End Select

End Sub

 

MEMO

select Case ~ End Select ステートメントについてはこの記事を参考にしてください。

vbaselectcaseeyecatchエクセルVBA Select Case 条件分岐 ステートメントの使い方の基本

With~End Withの使い方については、この記事を参考にしてください。

vbawithstateeyecatchWith~End Withの使い方。VBAコードを簡潔に記述する

Val関数についてはこちらを参考にしてください。

VBAValeyecatchエクセルVBA Val関数の使い方「値を文字列型から数値型へ変換する」

Mid関数についてはこちらを参考にしてください。

vbamideyecstchエクセルVBA Mid関数・Right関数・Left関数で文字列の一部を切り出す

データ入力済セルの最終行番号取得についてはこちらを参考にしてください。

vbalastcelleyecatchエクセルVBA データ入力済セルの最終行番号を取得する方法

 

③連続抽選のためのプロシージャー

 

ユーザーフォームで連続抽選ボタンを押していた場合に起動します。

 

宣言変数

  • j・・・・ カウンター変数
  • Vicb・・・・ 排出乱数の整数部分
  • Vcb・・・・ Vicbから計算したセル位置(列)
  • Vrb・・・・ Vicbから計算したセル位置(行)
  • OPr・・・・ 連続抽選をするスピード Module3で規定

 

コード設計のポイント

 

乱数から抽選表のセル位置を決定する計算

 

輩出した乱数の整数部分が 97 の場合

Ar = 12 ,    Vicb = 97

 

Vcb = Vicb \ Ar なので

Vcb = 8

 

Vrb = Vicb Mod Ar なので

Vrb = 1 

 

If Vrb > 0 Then
 Vcb = Vcb + 1 なので

Vcb = 9 , Vrb = 1 となり

 

セル位置は、Cells(4,12)になります。(会長賞の当選セル)

 

コード

Sub 連続抽選()

    Dim j As Long                 'カウンター変数
    Dim Vicb, Vcb, Vrb As Long    '乱数とその加工値
    
    '乱数発生のパターン化防止
        Randomize
        Range("A2,C2,F1").Clear
        
    'OPrは連続抽選スピード Module3で規定
        Select Case OPr
            Case Is = 0
                time = 250
            Case Is = 1
                time = 300
            Case Is = 2
                time = 200
            Case Is = 3
                time = 100
        End Select
                  
    '抽選の本数分ループする
        For j = 1 To Hon
    
            Vicb = Int(Rnd * Par + 1)
            Vcb = Vicb \ Ar
            Vrb = Vicb Mod Ar
     
            If Vrb > 0 Then
                Vcb = Vcb + 1
            ElseIf Vrb = 0 Then
                Vrb = Ar
            End If
            
            Col = Cells(Vrb + 3, Vcb + 3).Interior.Color
            
            With Cells(Vrb + 3, Vcb + 3)
                .Interior.ColorIndex = 6
            Sleep time
                .Interior.Color = Col
            End With
    
            Vc = Vcb
            Vr = Vrb
           
            Call Module2.重複当選チェック
        '重複当選していなければ、このコードを実行
            If MR = 0 Then
            
                With Range("F1")
                    .Value = "只今の番号は、" & Cells(Vr + 3, Vc + 3) & " が当選です。"
                    .Font.Bold = True
                    .Font.Size = 13
                End With
            
            End If
                
        Next j
            
        Zan = Hon - Jfk
        
        Call Module2.当選者集計
        
End Sub

 

MEMO

Rnd関数の使い方についてはこちらを参考にしてください。

vbarndeyecatchエクセルVBA Rnd関数で乱数を取得。簡単な加工コードで発生値を変化させる

Int関数の使い方についてはこちらを参考にしてください。

vbaintfixeyecatchエクセルVBA 関数 Int・Fix・Abs・Signで数値の整数部分を完全に分離する

select Case ~ End Select ステートメントについてはこの記事を参考にしてください。

vbaselectcaseeyecatchエクセルVBA Select Case 条件分岐 ステートメントの使い方の基本

With~End Withの使い方については、この記事を参考にしてください。

vbawithstateeyecatchWith~End Withの使い方。VBAコードを簡潔に記述する

エクセルVBAのコード処理を指定時間止めるSleep関数

 

④単発抽選のためのプロシージャー

 

ユーザーフォームで単発抽選ボタンを押していた場合に起動します。

 

宣言変数

  • i・・・・ カウンター変数
  • Vica・・・・ 排出乱数の整数部分
  • Vca・・・・ Vicaから計算したセル位置(列)
  • Vra・・・・ Vicaから計算したセル位置(行)
  • VCount・・・・ 抽選の点滅回数

 

コード設計のポイント

 

乱数から抽選表のセル位置を計算するのは、連続抽選の場合と同じです。

 

抽選スピードを変化させます。

 

点滅数が増えるほど点滅スピードが遅くなる設計にします。

 

 

コード

Sub 単発抽選()

    Dim i As Long                 'カウンター変数
    Dim Vica, Vca, Vra As Long    '乱数とその加工値
    Dim VCount As Long        '抽選の点滅回数
    
    '乱数発生のパターン化防止
        Randomize
        
    'OPkは抽選の点滅回数 Module3で規定
        Select Case OPk
            Case Is = 0
                VCount = 15
            Case Is = 1
                VCount = 5
            Case Is = 2
                VCount = 10
            Case Is = 3
                VCount = 20
        End Select
                    
        Range("A2,C2,F1").Clear
        
    '抽選の点滅回数分ループする
            For i = 1 To VCount
        '抽選スピードを選択する
                Select Case OP
                    Case Is = 0
                        time = 500 * 0.2 * i
                    Case Is = 1
                        time = 500 * 0.3 * i
                    Case Is = 2
                        time = 300 * 0.3 * i
                    Case Is = 3
                        time = 150 * 0.3 * i
                End Select
            
                Vica = Int(Rnd * Par + 1)
                Vca = Vica \ Ar
                Vra = Vica Mod Ar
                
                If Vra > 0 Then
                    Vca = Vca + 1
                ElseIf Vra = 0 Then
                    Vra = Ar
                End If
                
    'セル色を変数Colに保存する
                Col = Cells(Vra + 3, Vca + 3).Interior.Color
                
                With Cells(Vra + 3, Vca + 3)
                    .Interior.ColorIndex = 6
                    Sleep time
                    .Interior.Color = Col
                End With
                
                Range("F1").Value = "只今の番号は、" & Cells(Vra + 3, Vca + 3) & " です。"
        
            Next i
    '抽選の最後のセル位置を保存する
        Vc = Vca
        Vr = Vra
            
        
        Call Module2.重複当選チェック
        
        With Range("F1")
            .Value = "当選の番号は、" & Cells(Vr + 3, Vc + 3) & " です。"
            .Font.Bold = True
            .Font.Size = 13
        End With
        
        If Jfk = 1 Then
            Zan = 0
        Else
            Zan = 1
        End If
        
        Call Module2.当選者集計

End Sub

 

MEMO

Rnd関数の使い方についてはこちらを参考にしてください。

vbarndeyecatchエクセルVBA Rnd関数で乱数を取得。簡単な加工コードで発生値を変化させる

Int関数の使い方についてはこちらを参考にしてください。

vbaintfixeyecatchエクセルVBA 関数 Int・Fix・Abs・Signで数値の整数部分を完全に分離する

select Case ~ End Select ステートメントについてはこの記事を参考にしてください。

vbaselectcaseeyecatchエクセルVBA Select Case 条件分岐 ステートメントの使い方の基本

With~End Withの使い方については、この記事を参考にしてください。

vbawithstateeyecatchWith~End Withの使い方。VBAコードを簡潔に記述する

エクセルVBAのコード処理を指定時間止めるSleep関数

 

⑤重複当選チェックのプロシージャー

 

重複当選が無いように設定する部品プロシージャーです。

 

宣言変数

  • TRange・・・・ 当選者ID表示セル
  • Jf・・・・ 重複当選メッセージの表示を指示する

 

コード設計のポイント

 

重複当選メッセージが表示されるたびにコード進行がストップします。

 

連続抽選の場合は邪魔者になることがありますので、表示しない設定を出来るようにします。

 

コード

Sub 重複当選チェック()

    Dim TRange As Range    '当選者ID表示セル
        
        Arow = Cells(Rows.Count, 2).End(xlUp).Row
        Set TRange = Range(Cells(11, 3), Cells(Arow, 3))
        
        On Error Resume Next
    'Match関数で、すでにID番号が存在するかどうかを調べる
        MR = WorksheetFunction.Match(Cells(Vr + 3, Vc + 3), TRange, 0)
    '存在する場合としない場合の切り分け
        If MR = 0 Then
            Call 当選番号リストアップ
        ElseIf MR <> 0 Then
        'Jfは重複メッセージを表示するかどうかの分岐指標 Module3で規定
            If Jf = 0 Then
                MsgBox "重複当選がありました。" & vbCrLf & "重複当選番号は、" & Cells(Vr + 3, Vc + 3) & " です。"
            ElseIf Jf = 1 Then
            End If
            
            Cells(Vr + 3, Vc + 3).Interior.ColorIndex = 43
            Jfk = Jfk + 1
            On Error GoTo 0
            MR = 0
        End If

End Sub

 

MEMO

データ入力済セルの最終行番号取得についてはこちらを参考にしてください。

vbalastcelleyecatchエクセルVBA データ入力済セルの最終行番号を取得する方法

Match関数についてはこの記事を参考にしてください。

vbamatcheyecatch001エクセルVBAで使うMatch関数 活用度アップでテッパン関数に!

 

⑥当選番号リストアップのプロシージャー

 

当選者を表示するための部品プロシージャーです。

 

宣言変数

  • Vc・・・・ 抽選表のセル位置(列)、 Vr・・・・ 抽選表のセル位置(行)
  • Arow・・・・ B列の最終行、 SYOrow・・・・ A列の最終行
  • Cot・・・・ 当選順位

 

コード

Sub 当選番号リストアップ()

        With Cells(Vr + 3, Vc + 3)
            .Interior.ColorIndex = 6
        Sleep time
            .Interior.ColorIndex = 43
        End With
        
    '最終行番号の最新のものを再取得する
        Arow = Cells(Rows.Count, 2).End(xlUp).Row
        SYOrow = Cells(Rows.Count, 1).End(xlUp).Row
        
        If Arow = 11 Then
            Cot = 1
        Else
            Cot = Cells(Arow, 2) + 1
        End If
    'リストアップ表示する
        If Range("B" & Arow + 1) = "" Then
            Range("B" & Arow + 1) = Cot
            Range("C" & Arow + 1) = Cells(Vr + 3, Vc + 3)
        ElseIf Range("B" & Arow + 1) <> "" Then
            Range("B" & Arow + 1).Offset(1) = Cot
            Range("C" & Arow + 1).Offset(1) = Cells(Vr + 3, Vc + 3)
        End If
        
        Range("A2").Select
    '上部に現在の当選順位を表示する
        With Range("A2")
            .Value = Cot
            .Font.Bold = True
            .Font.Size = 15
            .Font.ColorIndex = 30
            .Interior.ColorIndex = 44
        End With

End Sub
MEMO

Offsetの使い方はこの記事を参考にしてください。

vbaoffseteyecatchエクセルVBA Offsetの使い方。セルや選択範囲を移動する

 

⑦当選者集計のプロシージャー

 

現時点での各賞の当選者数を表示します。

 

宣言変数

  • PrN()・・・・ 賞名 Module3で規定
  • VName・・・・ 6つの賞名
  • Zan・・・・ 各賞の当選残数

 

コード

Sub 当選者集計()

         Select Case VName
            Case Is = PrN(1)
                Range("B5") = Range("B5") + Zan
            Case Is = PrN(2)
                Range("B6") = Range("B6") + Zan
            Case Is = PrN(3)
                Range("B7") = Range("B7") + Zan
            Case Is = PrN(4)
                Range("B8") = Range("B8") + Zan
            Case Is = PrN(5)
                Range("B9") = Range("B9") + Zan
            Case Is = PrN(6)
                Range("B10") = Range("B10") + Zan
        End Select

End Sub

 

抽選の実行プロシージャー「抽選会」のCall呼び出し関係図

 

全体として、部品プロシージャーをこのように配置しています。

Sub 抽選会()
  ⌊___連続抽選
      ⌊__重複抽選チェック
          ⌊__当選番号リストアップ
      ⌊__当選者集計

  ⌊___単発抽選
      ⌊__重複抽選チェック
          ⌊__当選番号リストアップ
      ⌊__当選者集計
End Sub

 

抽選の実行コードの組み立て まとめ

 

抽選の実行について、今回はいろんなパターンを設定しました。

そのため、エクセルVBAコード上の条件分岐が多くなっています。

バリエーションのある抽選方法にしましたので、抽選のイベント性をより高めることが出来ると思います。

 

たくさんの条件分岐があって、煩雑になってしまうエクセルVBAのコード組み立てでは、

プロシージャーを部品化して本体(親)プロシージャーを整理整頓・簡潔化していきます。

 

けれどもただ、整理整頓・簡潔化と言っても、

自分(製作者)が、後で修正やメンテナンスしやすいレベルのものにしておくことが重要です。

むやみやたらと整理整頓・簡潔化行ったのでは、実務上逆に分かりずらいものになることがありますので注意が必要です。

 

エクセルVBAの独習を始めるためのポイントについて vbastudyeyecatchエクセルVBAを独学で習得するためのポイントは?良書との出会いは重要 基礎知識習得のためのオンライン学習講座の参考記事 Udemy1eyecatchエクセルVBA初級者がUdemyで動画学習する講座おすすめ5選と無料講座の上手な使い方。
  今回の記事はここまでです。
最後までご覧いただき有難うございました。

 

次の記事に進むにはこちら↓からです。

tyusenuformeyecatch抽選作業を操作するユーザーフォーム作成-エクセルVBA抽選ソフト作成3

 

vbaintfixeyecatch
エクセルVBA関数で、数値の整数部分だけを分離します。 整数値取得のFix関数でなくInt関数の使用の場合でも、 他の関数との組み合わせで解決することが出来ます。 こんにちは、じゅんぱ店長(@junpa33)です。 今回のテーマは、数値の整 ...
続きを読む
vbarndeyecatch
エクセルVBAのRnd関数で乱数を取得します。 実用のためにはコードに簡単な加工をする必要があります。特に乱数値の整数化とRandomizeは必須です。 6.5兆通りのパスコードの生成方法も解説しています。 こんにちは、じゅんぱ店長(@ju ...
続きを読む
vbaroundupdowneyecatch
エクセルVBA 数値の切り上げ、切り捨てをするときには注意しなければいけません。 RoundUp関数とRoundDown関数を使う時に負の数が混在していると、そのままだと誤った計算結果になることがあります。 こんにちは、じゅんぱ店長(@ju ...
続きを読む
vbaroundeyecatch
エクセルVBAでも数値を四捨五入したい時は、Round関数を利用することが多いです。 Round関数の使い方はワークシートと同様ですが、ただ大きな注意点があります。 ここではその注意点も含めて使い方の説明を行います。 こんにちは、じゅんぱ店 ...
続きを読む
vbamaxminaveeyecatch
エクセルVBAで、ワークシート関数 Max・Min・Averageを利用して最大値・最小値・平均を求めます。 「簡単で短いエクセルVBAコード組み立て」を目指す上では、ワークシート関数は強い味方です。 こんにちは、じゅんぱ店長(@junpa ...
続きを読む
vbainsteeyecatch
InStr関数・InStrRev関数は、文字列操作系の関数の中でも最重要です。 この関数により指定の文字(列)の存在位置が取得できます。 そしてそれを目盛基準として、文字列操作をすることもできます。 こんにちは、じゅんぱ店長(@junpa3 ...
続きを読む
vbareplaceeyecatch
エクセルVBAで使える関数にReplace関数があります。 Replace関数は検索の文字列を指定の文字列に置換したり、削除したり出来ます。 利用価値の高い関数です。使い慣れておきましょう。 こんにちは、じゅんぱ店長(@junpa33)です ...
続きを読む
vbaselectcaseeyecatch
エクセルVBAで、必須の条件文。 その中の一つで、Select Case 条件分岐 ステートメントの使い方を説明します。 簡単なコード、可読性の向上が特徴のステートメントです。是非、知っておきましょう。 こんにちは、じゅんぱ店長(@junp ...
続きを読む
VBAValeyecatch
エクセルVBAのVal関数の使い方についてです。 「値を文字列型から数値型へ変換する」という機能があります。 データ型が不一致の場合、プログラムエラーでコード停止が発生することが良くあります。 こんにちは、じゅんぱ店長(@junpa33)で ...
続きを読む
VBAStringeyecatch
エクセルVBA String関数の使い方についてです。 「文字を指定した数だけ並べることが出来る」という機能の関数です。 この関数を使えば簡潔なコード記述で実行することが出来ます。 こんにちは、じゅんぱ店長(@junpa33)です。 今回は ...
続きを読む
vbajoineyecatch
エクセルVBAでJoin関数の使い方について説明します。 文字列を接続する関数ですが、 配列変数で文字列を要素化した時にはこれを使います。 また「区切り文字」も自由に設定できます。 こんにちは、じゅんぱ店長(@junpa33)です。 今回は ...
続きを読む
vbamideyecstch
エクセルVBAで文字列操作は、コード作成の中でも重要な部分です。 Mid・Right・Left関数は、その操作の中で重要な働きをする関数です。 文字列を切り出すこの関数の基本部分を説明します。 こんにちは、じゅんぱ店長(@junpa33)で ...
続きを読む
vbatrimeyecatch
Trim・RTrim・LTrimは文字列の端にあるスペースを取り除きます。 ちょっとのことですが、取り込みデータにスペースが付いていることでのエラーは発見修正が結構厄介です。 注意が必要です。 こんにちは、じゅんぱ店長(@junpa33)で ...
続きを読む
vbastrcstreyecatch
エクセルVBAで、Str関数とCStr関数に使い方とその違いについて説明します。 戻り値にちょっとした違いがあります。 使い方の違いでその後のコードの進行に影響が出ることがあり、なおざりにはできません。 こんにちは、じゅんぱ店長(@junp ...
続きを読む
vbaleneyecatch
Len関数の使い方ついて説明します。 エクセルVBAでプログラミングを行う時に、テキストデータを加工処理するには必須の関数です。 非常に有用な関数ですので、是非使えるようになっておきましょう。 こんにちは、じゅんぱ店長(@junpa33)で ...
続きを読む
VBACheckBoxeyecatch
エクセルシートで使う場合の、2種類あるチェックボックスの設置と使い方の違いを解説します。 一見簡単そうですが、 単純でない使い方をしたい時は、設置方法と設定方法を工夫する必要があります。 こんにちは、じゅんぱ店長(@junpa33)です。 ...
続きを読む
VBAOptionbuttoneyecatch
エクセルで書類を作成する時、項目を選択できるようにするのがオプションボタンです。 これには2種類あり、使い方にかかわる違いもあります。 詳しいオプションボタン設置方法と使い方のコツを解説します。 こんにちは、じゅんぱ店長(@junpa33) ...
続きを読む
vbamojisousaeyecatch
エクセルVBAコードで、ファイルの保存時に名前を付けて保存について、その時の年月日を付けたい時の設定方法についてです。 保存されたファイルがたくさん増えて行く中で、ファイルの判別で年月日を付けている(付けたいと思っている)人も多いでしょう。 ...
続きを読む
vbajyufukueyecatch
今回は、同じ項目を一つにまとめるためのエクセルVBAコードを紹介します。 多数銘柄の商品を複数の店で扱っている場合、商品銘柄集計表を作るには、商品銘柄の種類だけをリストにしないといけません。 こんにちは、じゅんぱ店長(@junpa33)です ...
続きを読む
vbafolderdeleteeyecatch
今回は、不要なフォルダをサクッと削除するエクセルVBAコードを紹介します。 削除の仕方は2つあります。VBA自身の機能を使うことと、FSOの機能を使うことの2つです。 こんにちは、じゅんぱ店長(@junpa33)です。 エクセルVBAで、不 ...
続きを読む
vbadirkilleyecatch
今回は、フォルダに保存されている要らないファイルを削除するエクセルVBAコードを紹介します。 フォルダを開いて一つずつファイル名を確認して、ではなくて、コード実行一発でササッと完了します。 こんにちは、じゅんぱ店長(@junpa33)です。 ...
続きを読む
vbachdireyecatch
エクセルVBAのステートメントで「ChDir(チェインジディレクトリ)」というのがあります。 少々地味感のあるステートメントですが、この使い方のポイントを説明いたします。 こんにちは、じゅんぱ店長(@junpa33)です。 エクセルVBAの ...
続きを読む
vbafindeyecatch001
今回は、データの検索方法で、エクセルVBAでできるメソッドについてです。 「FindとFindNextメソッド」の使い方と最速理解のコードの組み立て方を説明したいと思います。 こんにちは、じゅんぱ店長(@junpa33)です。 エクセルの検 ...
続きを読む
今回も、エクセルVBAで利用できるワークシート関数についてがテーマです。 この記事では、データナンバーなどから、その必要な値や数値を抽出する「Vloolup関数」について使い方を説明します。 こんにちは、じゅんぱ店長(@junpa33)です ...
続きを読む
vbaindexeyecatch001
今回も、エクセルVBAで利用できるワークシート関数についてがテーマです。 この記事では、データリストから必要な値や数値を取り出してくる「Index関数」について使い方を説明します。 こんにちは、じゅんぱ店長(@junpa33)です。 エクセ ...
続きを読む
vbamatcheyecatch001
エクセルVBAで利用できる関数についてがテーマです。 今回は、データリストから必要な値や数値を取り出してくる「Match関数」について、使い方を説明します。 こんにちは、じゅんぱ店長(@junpa33)です。 エクセルVBAでよく使うワーク ...
続きを読む
vbahairetu3eyecatch
エクセルVBAで変数を利用するとき、二次元配列変数を知っていれば何かと便利なことがあります。 今回はそんな配列変数をより実際に近い例題で説明していきます。 こんにちは、じゅんぱ店長(@junpa33)です。 エクセルVBAのプログラムでは、 ...
続きを読む
vbahairetu2eyecatch
エクセルVBAで配列を利用する時、それに関わる関数やステートメントを利用すれば、 より簡潔にコードを作成することが出来ます。 こんにちは、じゅんぱ店長(@junpa33)です。 エクセルVBA 配列を扱うときに利用できる関数とステートメント ...
続きを読む
vbahairetueyecatch
エクセルVBAで変数を利用するとき、複数の同じ型で変数を設定したいときがあります。 そんな時、出番となるのが配列変数ということです。 こんにちは、じゅんぱ店長(@junpa33)です。 エクセルVBAの1次元配列変数の使い方を説明します。 ...
続きを読む
vbabuttoneyecatch
エクセルVBAのプログラムを実行するのに、ワークシート上に設置したボタンのクリックでワンポチっとで行いたい。 そんなボタンの簡単設置方法を紹介します。 こんにちは、じゅんぱ店長(@junpa33)です。 エクセルVBAで、シートにマクロ(プ ...
続きを読む
vbasumeyecatch
エクセルVBAで、羅列された数値の集計作業をパパッと熟していきたいときがありますよね。 それを簡単に行える方法としてSUM関数があります。今回はこのSUM関数の使い方についてです。 こんにちは、じゅんぱ店長(@junpa33)です。 エクセ ...
続きを読む
vbainputboxeyecatch
エクセルVBAのプログラムで、利用者からの入力データを取り込んでコードを実行していくことがあります。 その簡潔な方法としてInputBoxがあります。今回はこのInputBoxの使い方についてです。 こんにちは、じゅんぱ店長(@junpa3 ...
続きを読む
vbalastcelleyecatch
エクセルVBAのプログラム作成で、入力データをその都度蓄積していく場合など、 既にデータの入っている最終セルの位置を調べたいという時が多くあります。 こんにちは、じゅんぱ店長(@junpa33)です。 エクセルVBAのコード組み立てで、デー ...
続きを読む
vbawithstateeyecatch
エクセルVBAのコードの組み立てでは、視認性や可読性を上げるためにできるだけ記述を簡潔にしたいところです。 Withステートメントは、そういったコード記述を簡潔にする役割があります。 こんにちは、じゅんぱ店長(@junpa33)です。 エク ...
続きを読む
vbacleareyecatch
エクセルVBAでシートを再利用するために、一度内容すべてをクリアしたい時があります。 普通は、Clearメソッドを使ってクリア操作を行いますが・・・ こんにちは、じゅんぱ店長(@junpa33)です。 エクセルVBAを組み上げる中で、シート ...
続きを読む
vbaoffseteyecatch
エクセルVBAで、セルやセルの選択範囲を移動させるのにOffsetプロパティがあります。 今回の「VBA最速で理解」は、この便利な「Offsetプロパティ」の使い方について説明します。 こんにちは、じゅんぱ店長(@junpa33)です。 エ ...
続きを読む
vbanameeyecatch
エクセルVBAで、アクティブセル、アクティブシート、アクティブブックという「現在参照中の・・・」というオブジェクトがあります。 今回の「VBA最速で理解」は、この「ActiveWorkbook」「ActiveSheet」「ActiveCel ...
続きを読む
vbaselacteyecatch
エクセルVBAで、そのコードを実行する先のオブジェクトに、フォーカスするためのメソッドに、「Select」と「Activate」があります。 今回は、このよく似た「Select」と「Activate」について説明します。 こんにちは、じゅん ...
続きを読む
vbavbekidoeyecatch
エクセルVBAを始めようとしたときに一番最初に戸惑うのが、「どうしたらVBAコードを書く表示画面になるのか?」だと思います。 今回は、この「どうしたら、その画面になるんだろう?」についての方法を説明します。 こんにちは、じゅんぱ店長(@ju ...
続きを読む
vbamsgboxeyecatch
エクセルVBAでユーザーフォームを使わなくても、簡単なユーザーとのやり取りならメッセージボックスでも可能です。 今回は、この「ユーザーへのメッセージや選択肢を提示する」ユーザーフォームについての説明をします。 こんにちは、じゅんぱ店長(@j ...
続きを読む
vbadoloopeyecatch
以前の記事でも書いたように、エクセルを使った業務で、「ループの処理」コードは重要な実行処理部分です。 今回は、このもう一つの「ループの処理」である「実行回数が限定されないループ処理」を行うコードについて説明します。 こんにちは、じゅんぱ店長 ...
続きを読む
vbafoldereyecatch
エクセルを使った業務で、「作成したファイルの保存」は作業の最後に必ず必要な部分です。 今回は、この「作成したファイルの保存」を行うための重要部分。保存先フォルダをVBAで指定する方法を説明します。 こんにちは、じゅんぱ店長(@junpa33 ...
続きを読む
vbasengeneyecatch
エクセルVBAのコード組み立てで使う変数。「この変数を使いますよ!」というのが「変数の宣言」です。 今回は、この変数の宣言についてです。 こんにちは、じゅんぱ店長(@junpa33)です。 エクセルVBA のコード組立ての中で、変数の宣言は ...
続きを読む
vbaifjyokeneyecatch
エクセルVBAのコード組み立てで最も必要な、最もよく使うメソッドの1つで「If~Then~Else」があります。 今回はこの「If~Then~Else」メソッドについて設定条件の絞り方のポイントを説明します。 こんにちは、じゅんぱ店長(@j ...
続きを読む
VBACopyeyecatch
エクセルVBAのコード組み立てで、よく使うメソッドの1つで「Copy」メソッドがあります。 今回はこの「Copy」メソッドの使い方を説明します。 こんにちは、じゅんぱ店長(@junpa33)です。 エクセルVBAで、ワークシートのコピーをを ...
続きを読む
VBAGotoeyecatch001
エクセルVBAのコードで、Gotoステートメントは嫌われ系のグループにはいっています。 それでも、GotoがあるのでVBAコード組み立てがスムーズに、楽に、なる事も多いと言うのも事実です。 こんにちは、じゅんぱ店長(@junpa33)です。 ...
続きを読む
fornextirekoeyecatch
エクセルVBAのコード組み立てで、非常によく使うステートメントの一つにFor~Nextでのループ処理があります。 今回はこのFor~Nextステートメントの使い方を説明します。 こんにちは、じゅんぱ店長(@junpa33)です。 エクセルV ...
続きを読む

 

 

エクセルVBAをはじめから学ぶための参考書 おすすめの一冊

大村式【動画&テキスト】Excelマクロ&VBA最高のはじめ方
初めてのVBAの勉強、構えなくても気軽に始められる。
vbastudy020a
vbastudy021a

「大村式【動画&テキスト】Excelマクロ&VBA最高のはじめ方」をamazonで見てみる

(著者)大村あつし
(出版社)技術評論社
(税込価格)1,628円(本体1,480円+税)
学習書の新しい形です。
YouTubeと完全リンクした参考書です。入門と基礎を重点的に22本の動画で解説をしています。
ちょっとした空き時間を利用してでもスマホがあれば学習ができます。
目次一覧
第1章 VBAを知らなくてもマクロが作れる「マクロの記録」とVisual Basic Editor
第2章 3つしかないVBAの文法と、VBAの土台であるオブジェクトの親子関係を理解する
第3章 ブックとワークシートをVBAで操作する
第4章 セルをVBAで操作するために覚えておきたい11個の基本テクニック
第5章 選択されているセル範囲の位置や大きさを自由自在に変更する
第6章 時短を実現するVBAでのデータベース処理テクニック
第7章 変数を使って1ランク上のマクロを作成する
第8章 条件分岐でさまざまな状況に対応するマクロを作成する
第9章 VBAで繰り返し処理(ループ)を実行する
第10章 MsgBox関数で対話型のマクロを作る
mougネット創設者である著者 大村あつしさんの最新解説参考書です。
VBAの歴代の解説書を知っているだけに、解説ポイントも的確なのは言うまでもありません。
動画は優しい語り口調で、視聴者にある意味安心感を与えてくれます。動画は5分から20分間ぐらいで22本の構成です。
文章解説と動画解説の関係性は、動画解説が主で、文章解説がサポートいう使い方もできます。
 

 

<記事内容についての告知>VBAコードの記述記事においては、その記述には細心の注意をしたつもりですが、掲載のVBAコードは動作を保証するものではりません。 あくまでVBAの情報の一例として掲載しています。 掲載のVBAコードのご使用は、自己責任でご判断ください。 万一データ破損等の損害が発生しても当方では責任は負いません。