ヒストグラム(分布図)の作成

ここでは、データ解析に条件分岐、繰り返しの構文を活用した事例を紹介いたします。
事例としてはヒストグラム(分布図)作成のために各区間の度数算出に適用します。
サンプルのデータを準備するのが大変かと思いますので、事前に測定データ(B列)に10,000個のデータを貼り付けています下記「ヒストグラムデータ」 をク リックしデータファイル開き活用下さい。

ヒストグラムデータ」読込:
sample2.xlsx ファイルが読み取り専用で開きますので、名前を付け、「Excelマクロ有効ブック(*.xlsm)」で貴方のパソコンに保存下さい。
(名前は適 当につけて頂いて構いません。)
度数計数の区間の設定のため最小値、最大値、区間下限値、上限値は全てエクセルの関数で算出しています。
実際には区間の設定は皆様の目的にあった設定で構いませんが、ここでは下表の区間で行います。
更に参考までに右側に度数の分布図のグラフをリンクさせて作成しています。図1
このシートの通りであれば10,000個のデータ数で、設定した区間数が21でプログラムすると良いのですが、日常業務では、データ数の増減、または区間 の変更がある程度許容できるように設定しておいた方がプログラムの変更を行なわずに活用できますので、 区間数を50区間、データ数は20,000個まで対応できるようにプログラムします。
1.プログラムの起動ボタンを準備します。
  前述致しました(「開発」⇒「挿入」⇒「フォームコントロール」⇒「ボタン」)の手順
  でボタンを貼り付けて下さい。
  名称を「度数件数」としました。図2
2.「度数件数」のボタンのプロシージャに下図のようにプログラムします。図3
上記プログラムの説明:
 1)文字列の頭にアポストロフィー(’)が付いた緑色の文字は、内容が分かり易いように
  コメントとして書いたもので、プログラムの動作には影響しません。
 2)度数のリセット「Range(Cells(6, 9), Cells(55, 9)).Value = ""」
  最初に度数の列(I列)をリセット(空白に)します。
 3)「Application.ScreenUpdating = False」:
  度数分布図を事前に準備してグラフデータを度数にリンクさせているため表の度数を1件
  書き込む度に、グラフに反映されます。
  そのため1万件のデータ処理するのに大変な処理時間が掛かります。
  (データ数が少ないと問題はありませんが)
  この命令文は、その1件1件処理の都度、画面の更新を行わないようにする命令文です。
  プログラムが完了したところでグラフ化されます。
図4
  実際はどの程度の時間の違いがあるかと言いますと私のパソコンでは、この「画面更新を
  しない」命令がない場合の処理時間は、約2分程度ですが、この命令文がある場合は、
  約6秒でした。
  【参考】処理時間の比較確認方法:
  実際に確認したい場合には、「Application.ScreenUpdating = False」の頭にアポストロ
  フィー(’)を付けプログラムとしての働きを止めて、「度数件数」ボタンをクリックする
  と確認することができます。
  この場合、画面上部にあまり時間が掛かり過ぎるため「応答なし」が表示されるかもしれま
  せんがそのままお待ちください。
    図5
 4)測定データ列の検索:
  ①For n0 = 1 To 20000 
   If Cells(5 + n0, 2).Value = "" Then
        Exit For
     変数n0の最大設定を20,000にしていますので、データ列が空白になるまで『n0』の
  繰り返し作業を行なわせます。
  実際にマクロを組まれる場合は変数の範囲設定値は皆様が最大この程度であれば大丈夫と
  言う数値に設定にされるのが良いかと考えます。
  取りあえずここでは現状の2倍の20,000に設定しました。
  ②Else
   ①項で空白時の処理について指示していますが、ここからは「それ以外(空白)でなけれ
    ばの場合の指示命令となります。
  ③For n1 = 1 To 50   
       If Cells(5 + n1, 7).Value = "" Then
            Exit For
    ここでは、区間の列を検索しますので、繰返しの変数を『n1』としています。
    区間数は21ですが、もしかしたら区間数をもっと増やしたいと考える方がおられる
    可能性もあるのではとのことで、区間数を最大50までn1の設定を変えることなく
    対応できるようにしています。
    従って区間の指定のない空白部が検出された場合は、①項と同様にこの繰り返し作業
    を中止するよう指示しています。
  ④   ElseIf Cells(5 + n0, 2).Value > Cells(5 + n1, 7).Value _
                And Cells(5 + n0, 2).Value <= Cells(5 + n1, 8).Value Then
                Cells(5 + n1, 9).Value = Cells(5 + n1, 9).Value + 1
                Exit For
            End If
     And(かつ)(論理演算子):
      前の条件(Cells(5 + n0, 2).Value > Cells(5 + n1, 7).Value)と
      後の条件(Cells(5 + n0, 2).Value <= Cells(5 + n1, 8).Value)が同時に成立
      する場合に実行文を実行します。
     【参考】前の条件と後の条件のどちらか一方が成り立てば良い場合には、
         「Or(または)」を使用します。
    従ってここで命令しているのは、測定データ値(Cells(5 + n0, 2).Value)が区間の
    下限値(Cells(5 + n1, 7).Value)より大きくて
     かつ上限値(Cells(5 + n1, 8).Value)以下の場合、
    その区間の度数に「1」を足しなさい
    (Cells(5 + n1, 9).Value = Cells(5 + n1, 9).Value + 1)と命令しています。
    この条件が成立したらその後の区間での検索作業は不要なため『n1』での繰返し
    作業の中止を「Exit For」で指示しています。
  以上で条件分岐文、及び繰返し文の働き、及びエクセルシート内のデータの活用のしかた
  について終わります。
    エクセルシートにデータが書き込まれていればマクロを組み込む、又はエクセルの関数を組
  むことによりデータの活用はなんとかできるかと思いますが、その前にエクセルシートに
  データを書き込む必要があります。
  最初に述べましたように紙に書き込まれた資料をパソコンに転記するような入力作業をしな
  いために最初から紙への書込み作業は止め、直接パソコンに書き込むようにさせるのが
  理想ですよね。
  その為には誰でも簡単に入力できるようにしなければなりません。例えばパソコンに不慣れ
  な方でも入力を行える必要があります。
  その方法について次ぎページから紹介を行なって行きます。

   次ページへ進む。


サイドバータイトル
inserted by FC2 system