目次
今回は、エクセルで分析する方法をご紹介します ブイビーエー セルが値を含んでいる場合、任意の値と特定の値の両方について状況を分析することを学びます。
Excel VBAの分析:もしセルに値が含まれている場合(クイックビュー)
Sub If_Cell_Contains_Value() Set Cell = Range("C12").Cells(1, 1) If Cell.Value "" Then MsgBox "Jennifer Marlo appeared in Physics exam." End If End Sub
練習用ワークブックをダウンロードする
この練習用ワークブックをダウンロードして、この記事を読みながらエクササイズしてください。
VBA If Cell Contains Value Then.xlsmExcel VBA分析:セルに値が含まれている場合、出力を返す(ステップバイステップ分析)
ここでは、ひまわり幼稚園という学校の物理、化学、数学の生徒の点数をデータセットとして用意しました。
空白のセルは、その学生がその試験に現れなかった、つまり欠席したことを意味します。 では、このデータセットで、セルに値が含まれているかどうかという状況を分析してみましょう。
⦹ ステップ1: セルの宣言
まず、値を解析したいセルを宣言します。 ジェニファー・マーロが物理の試験に出たかどうかを解析してみましょう。
そのため、セルがあるかどうかを確認する必要があります。 C12 が値を含むかどうか。
そのためには、まず、cellを宣言する必要があります。 C12 .
これを実現するためのコード行は次のようになる。
セットセル = 範囲("C12").Cells(1, 1)
⦹ ステップ2:セルに値(特定の値を含む)が含まれているかどうかを確認する
次に、セルに値が入っているかどうかをチェックする必要があります。 条件 .コードの行は、次のようになります。
If Cell.Value "" Then
このコードは、セルに何らかの値が含まれている場合に実行されます。 値をチェックするには(例えば、100が含まれているかどうか)、その特定の値に 等しい の記号を使用します。
If Cell.Value "" Then
⦹ ステップ3:タスクの割り当て
そして、セルに値(または特定の値)が含まれている場合に実行されるタスクを設定する必要があります。
ここでは、メッセージを表示させたい "ジェニファー・マーロ 物理学試験に登場" .だから、コードの行は、そうなります。
MsgBox "ジェニファー・マーロが物理の試験に現れました。"
⦹ ステップ4:Ifブロックの終了
最後に、Ifブロックの終了を宣言する必要があります。
End If
だから、コンプリート ブイビーエー のコードになります。
⦹ VBAコードです。
Sub If_Cell_Contains_Value() Set Cell = Range("C12").Cells(1, 1) If Cell.Value "" Then MsgBox "Jennifer Marlo appeared in Physics exam." End If End Sub
⧭出力。
このコードを実行するには Run Sub/UserForm ボタンをクリックします。
というメッセージが表示されます。 "ジェニファー・マーロ 物理学試験に登場" をセルとして C12 の値を含んでいます。 50 .
Excel VBAで「セルに値が含まれる場合、指定された出力」を行う例
でセルに値が含まれているかどうかを分析することを学びました。 ブイビーエー では、その理解を深めるために、いくつかの例を挙げてみましょう。
1.エクセルVBAで「対応するセルに値がある場合、値を除外する」マクロを開発する
を開発しよう。 マクロ を、各試験の受験生をフィルタリングするために使用します。
つまり、各科目の点数が入っているセルをチェックして、その中に値が入っているかどうかを確認するのである。
もしそうなら、対応する生徒の名前を整理しなければならない。
完全な ブイビーエー のコードで実現します。
⦹ VBAコードです。
Sub Sorting_Out_Cells_that_Contain_Values() Starting_Cell = InputBox("Enter Reference of First Cell of the Filtered Data: ") For i = 2 To Selection.Columns.Count Range(Starting_Cell).Cells(1, i - 1) = Selection.Cells(1, i) Next i Count = 2 For i = 2 To Selection.Columns.Count For j = 2 To Selection.Rows.Count Set Cell = Selection.Cells(j, i) If Cell.Value "" ThenRange(Starting_Cell).Cells(Count, i - 1) = Selection.Cells(j, 1).Value Count = Count + 1 End If Next j Count = 2 Next i End Sub
⧭出力。
データセットを選択する(含む ヘッダー ) を使って、これを実行します。 マクロ .
まず、フィルタリングされたデータが欲しい最初のセルの参照を入力するように言われます。 私は、次のように入力しました。 G3 .
をクリックします。 よっしゃー 各試験の受験者名(合格者を含む)が表示されます。 ヘッダー )を、セルから始まる新しいデータセットで G3 .
2.エクセルVBAで、対応するセルに特定の値が含まれている場合に値を並べ替えるユーザー定義関数を作成する
では、各科目で特定の点数を取った生徒の名前を返すユーザー定義関数を作ってみましょう。
手順は上記とほぼ同じで、各科目の点数が入っているセルをチェックして、特定の値と等しいかどうかを確認するのです。
もしそうなら、対応する生徒の名前を返します。
があります。 ブイビーエー のコードになります。
⦹ VBAコードです。
Function Cells_with_Values(Rng As Range, Data As Variant) Dim Output() As Variant ReDim Output(Rng.Rows.Count, Rng.Columns.Count - 1) For i = 0 To Rng.Columns.Count - 2 Output(0, i) = Rng.Cells(1, i + 2) Next i Count = 1 For i = 2 To Rng.Columns.Count For j = 2 To Rng.Rows.Count Set Cell = Rng.Cells(j, i) If Cell.Value = Data Then Output(Count, i - 2) = Cell.Data (1)=Data(データ)を出力。Rng.Cells(j, 1).Value Count = Count + 1 End If Next j Count = 1 Next i For i = LBound(Output, 1) To UBound(Output, 1) For j = LBound(Output, 2) To UBound(Output, 2) If Output(i, j) = 0 Then Output(i, j) = "" End If Next j Next i Cells_with_Values = 出力 End Function
⧭出力。
という関数を作成します。 値を持つセル という2つの引数を取るもので レンジ であり 価値 .
この関数を使って、各科目で100点を取った生徒を調べてみましょう。
ワークシートのセル範囲を選択し、その範囲の最初のセルにこの関数を入力します。
=Cells_with_Values(B3:E13,100)
[ここから B3:E3 は私のデータセットです。 ヘッダー ) と 100 は私の値で、あなたはあなたの値を使ってください]。
次に、 を押します。 Ctrl + Shift + Enter ( アレイ式 を含む、各科目で100点を取った生徒の名前からなる配列を返します。 ヘッダー .
3.任意の値(または特定の値)を含むセルを抽出するユーザーフォームをExcel VBAで開発する
最後に、開発するのは ユーザーフォーム は、ある特定の試験に出た(あるいは特定の点数を取った)学生の名前を抽出するためのものです。
⦹ ステップ1:UserFormを開く
に行ってみてください。 Insert> UserForm オプションで ブイビーエー エディタを使用して、新しい ユーザーフォーム .新しい ユーザーフォーム っていう ユーザーフォーム1 が開かれます。
⦹ ステップ2:ツールをユーザーフォームにドラッグする
のほかにも ユーザーフォーム を手に入れることができます。 ツールボックス カーソルを合わせると ツールボックス とドラッグ 4つのラベル(Label1, Label2, Label3, Label4) と リストボックス3個(リストボックス1、リストボックス2、リストボックス3) であり テキストボックス (テキストボックス1) の上に長方形の形で ユーザーフォーム .
次に、別の ラベル(Label5) であり テキストボックス (テキストボックス2) の左下隅に移動します。 ユーザーフォーム .
最後に コマンドボタン(CommandButton1) を右下に表示します。
の表示を変更します。 ラベル まで ルックアップカラム , リターン欄 , 任意の値または特定の値 , 値です。 と スターティングセル
の表示も変更します。 コマンドボタン1 まで よっしゃー .
⧪ ステップ3:ListBox3のコードの書き方
をダブルクリックします。 リストボックス3 . A プライベートサブプロシージャ っていう ListBox3_Click が開きますので、そこに以下のコードを入力してください。
Private Sub ListBox3_Click() If UserForm1.ListBox3.Selected(0) = True Then UserForm1.Label4.Visible = False UserForm1.TextBox1.Visible = False ElseIf UserForm1.ListBox3.Selected(1) = True Then UserForm1.Label4.Visible = True UserForm1.TextBox1.Visible = True End If End Sub.
⧪ ステップ4:CommandButton1用のコードを書く
をダブルクリックします。 コマンドボタン1 . もう一つ プライベートサブプロシージャ っていう CommandButton1_Click が開きますので、そこに以下のコードを入力してください。
Private Sub CommandButton1_Click() On Error GoTo Message Starting_Cell = UserForm1.TextBox2.Text Count1 = 1 For i = 1 To Selection.Columns.Count If UserForm1.ListBox1.Selected(i - 1) = True Then Range(Starting_Cell).Cells(1, Count1) = Selection.Cells(1, i) Count1 = Count1 + 1 End If Next i If Count1 = 1 Then MsgBox "Select at Least One Lookup Column.", vbExclamation Exit...Sub End If Data_Selected = 0 For i = 1 To Selection.Columns.Count If UserForm1.ListBox2.Selected(i - 1) = True Then Data_Selected = i Exit For End If Next i If Data_Selected = 0 Then MsgBox "Select One Return Column.", vbExclamation Exit Sub End If Count2 = 1 Count3 = 2 For i = 1 To Selection.Columns.Count If UserForm1.ListBox1.Selected(i - 1) = True Then For j= 2 To Selection.Rows.Count Set Cell = Selection.Cells(j, i) If UserForm1.ListBox3.Selected(0) = True Then If Cell.Value "" Then Range(Starting_Cell).Cells(Count3, Count2) = Selection.Cells(j, Data_Selected).Value Count3 = Count3 + 1 End If ElseIf UserForm1.ListBox3.Selected(1) = True ThenIf Cell.Value = UserForm1.TextBox1.Text Then Range(Starting_Cell).Cells(Count3, Count2) = Selection.Cells(j, Data_Selected).Value Count3 = Count3 + 1 End If Else MsgBox "Select Either Any Value or Specific Value.", vbExclamation Exit For End If Next j Count3 = 2 Count2 = Count2+ 1 End If Next i Exit Sub Message: MsgBox "Enter a Valid Cell Reference as Starting Cell.", vbExclamation End Sub
⦹ ステップ5:UserFormを実行するためのコードを書く
最後に、新しい モジュール から VBAツールバー をクリックし、そこに以下のコードを挿入してください。
Sub Run_UserForm() UserForm1.Caption = "値が含まれるセルのフィルタリング" UserForm1.ListBox1.BorderStyle = fmBorderStyleSingle UserForm1.ListBox1.ListStyle = fmListStyleOption UserForm1.ListBox2.BorderStyle = fmBorderStyleSingle UserForm1.ListBox2.ListStyle = fmListStyleOption UserForm1.ListBox3.BorderStyle = fmBorderStyleSingle UserForm1.ListBox3.ListStyle = fmListStyleOption For i = 1 ToUserForm1.ListBox1.AddItem Selection.Cells(1, i) UserForm1.ListBox2.AddItem Selection.Cells(1, i) Next i UserForm1.ListBox1.MultiSelect = fmMultiSelectMulti UserForm1.ListBox3.AddItem "Any Value" UserForm1.ListBox3.AddItem "Specific value" UserForm1.Label4.Visible = False UserForm1.TextBox1.Visible = False 読み込むUserForm1 UserForm1.Show End Sub
⦹ ステップ6:ユーザーフォームの実行(最終出力)
あなたの ユーザーフォーム が使えるようになりました。 ワークシートからデータセットを選択し( B3:E13 こちら)(含む ヘッダー ) を実行し マクロ っていう Run_UserForm(ユーザーフォーム .
があります。 ユーザーフォーム は、ワークシートに読み込まれます。 ルックアップカラム テーブルを選択しました。 物理学 と 数学 に登場した生徒の名前を取得したいからです。 物理学 と 数学 の試験を行っています。
より リターン欄 テーブルを選択しました。 生徒名 というのも、生徒の名前を取得したいからです。
そして、その中から 任意の値または特定の値 テーブルを選択しました。 任意の値 .
最後に スターティングセル をボックスに入れています。 G3 .
をクリックします。 よっしゃー .に出演した生徒の名前が出ます。 物理学 と 数学 セルを起点とした試験 G3 .
を選択していた場合 具体的な数値 から 任意の値または特定の値 テーブルがあれば、別の テキストボックス をクリックして、特定の値を入力します。
ここでは、私が入力した 100 .
クリック よっしゃー そして、そのような学生を、あなたは 100 において 物理学 と 化学 .
覚えておきたいこと
の生徒名を返すために、2次元の配列を使っています。 ユーザー定義機能 例題にある 2 .