2013年3月15日金曜日

バランスWiiボードとPCで重心動揺計を作る 5


Excelでグラフにする

今回すること

3 マクロを実行してデータ操作ができるようにする。

やる気マンマンの方はもう試したかもしれませんが、今回はデータを操作できるようにします。
-----に囲まれたところで解説します。
赤字は解説ポイントです。実際のコードにはありませんし、この部分のコードをコピペすると動かないかも。
前回の 「バランスWiiボードとPCで重心動揺計を作る 4」 をコピペしてください。
コード後方の緑字はそのコードのイミです。

Sub 空白セル()
    Worksheets("sheet0").Select
    Range("H1").Formula = "=countIf((A1:B7000),""*"")"
    If Range("H1") > 0 Then MsgBox "文字型セルがありました。" & vbCrLf & "処理を中止します。", vbOKOnly, "文字型セル"
    
    Worksheets("sheet0").Range("A1:B7000").Select
    Dim Rng As Range
    Set Rng = Selection
    On Error GoTo errhandler
    Selection.SpecialCells(xlCellTypeBlanks).Select
    MsgBox "空白セルがありました。" & vbCrLf & "処理を中止します。", vbOKOnly, "空白セル"
    Set Rng = Nothing
    Exit Sub
errhandler:
    MsgBox "文字型セル、空白セルはありませんでした。処理を続けます。", vbOKOnly, "セル内容"
    If vbOK Then Call 作業シート
End Sub

------------------------------
Sub空白セル()について(ココはコメントなし)
sheet0のA1からB7000の範囲に文字、空白があればグラフ化できないので、
調べて大丈夫なら次のマクロを続行します。
sheet0のH1セルに計算結果を出力しますので、そのセルに入力してあったものは置換されます。
------------------------------

Sub 作業シート()
    
    '作業用というシートを作る
    ActiveWorkbook.Sheets.Add.Name = "作業用"
   
    Range("g1").Value = "重心動揺計測"        'G1セルにタイトルを入力
    With Range("G1").Font                     'G1セルのフォントについて
        .Name = "MS明朝"                      'MS明朝体
        .Bold = True                          '太字
        .Color = vbBlue                       '青字
        .FontStyle = "斜体"                   '斜体
        .OutlineFont = True                   'アウトラインフォント
        .Size = 22                            '22ポイント
    End With
------------------------------
Sub作業シート()について
新しいワークシート「作業シート」を追加してタイトルをつけます。
「重心動揺計測」というタイトルを変更するなら、黒字のコードの
"重心動揺計測"を"変更したもの" に変えればいいです。「"」で挟むのを忘れずに。
同じようにサイズを変えたければ、黒字の「22」を変更します。(ココは「"」はなし)
------------------------------
    Range("A1").Value = "No"                  'A1セルに「No」を入力
    Range("B1").Value = "X値"                 'B1セルに「X値」を入力
    Range("C1").Value = "Y値"                 'C1セルに「Y値」を入力
    Range("D1").Value = "X座標"               'D1セルに「X座標」を入力
    Range("E1").Value = "Y座標"               'E1セルに「Y座標」を入力
       
    Columns("G").ColumnWidth = 16                 'Gのセルの幅を16
    Range("G3:G8").HorizontalAlignment = xlCenter 'G3からG8範囲を中心揃え
    Range("G3:P38").RowHeight = 22                'G3からP38範囲の行の高さを22
    Range("H:N").ColumnWidth = 8                  'HからN範囲の幅を8
    Range("G3:G8").Interior.ColorIndex = 34       'G3からG8範囲のセル内を34番の色
    Range("I3").Interior.ColorIndex = 34          'I3のセル内を34番の色
    Range("K3").Interior.ColorIndex = 34          'K3のセル内を34番の色
    Range("M3").Interior.ColorIndex = 34          'M3のセル内を34番の色
    Range("K4").Interior.ColorIndex = 34          'K4のセル内を34番の色
    
    Range("H4:J4").Merge                          'H5からN5セルを結合
    Range("L4:N4").Merge                          'H5からN5セルを結合
    Range("H5:N5").Merge                          'H5からN5セルを結合
    Range("H6:N6").Merge                          'H6からN6セルを結合
    Range("H7:N7").Merge                          'H7からN7セルを結合
    Range("H8:N8").Merge                          'H8からN8セルを結合

    Range("G3").Value = "No"                      'G3セルに「No」を入力

    Range("I3").Value = "年齢"                    'I3セルに「年齢」を入力
    Range("K3").Value = "性別"                    'K3セルに「性別」を入力
    Range("M3").Value = "転倒回数"                'M3セルに「転倒回数」を入力
    Range("G4").Value = "視覚情報の有無"          'G4セルに「視覚情報の有無」を入力
    Range("K4").Value = "計測日"                  'K4セルに「計測日」を入力
    Range("L4").Value = Format(Date)             'L4セルに今日の日付を入力・・・①
    Range("G5").Value = "疾患"                    'G5セルに「疾患」を入力
    Range("G6").Value = "障害"                    'G6セルに「障害」を入力
    Range("G7").Value = "肢位"                    'G7セルに「肢位」を入力
    Range("G8").Value = "備考"                    'G8セルに「備考」を入力

----------------------------------
個人情報を入力する欄の書式です。入力した文字や色を変えるには黒字の部分を変更します。

下から5行目のRange("L4").Value = Format(Date) はデータ処理の日付を自動入力しています。計測日が処理日でないなら、この1行を消去します。(保存したら以降の処理はすべて日付なしになります。)

----------------------------------
  
    'データを作業用シートにコピーする
    Worksheets("Sheet0").Select                             'sheet0を選択・・・②
    Range("A1:B" & Range("B1").End(xlDown).Row).Copy _
    Destination:=Worksheets("作業用").Range("B2")        'A1からB列最終行までコピーし作業用シートのB2に貼り付け
----------------------------------
sheet0のデータを壊さない、消去しないように、作業用シートに貼り付けます。
ですから、sheet1にデータがあるからそのまま処理したいという場合には"sheet0"をそのシート名にします。その時は他のsheet0が出てくるところも変更してください。「検索」でsheet0調べてね。
----------------------------------

    '座標を求める

    Worksheets("作業用").Select                             '作業用シートを選択
    Range("D2").Formula = "=B2/40*43"                       'D2にB2÷40×43を入力  (※1)
    Range("D3").Formula = "=B3/40*43"                       'D3にB3÷40×43を入力
    Range("D2:D3").AutoFill Destination:=Range("D2:D7000")   'D2、D3のようにD7000まで入力
    
    Range("E2").Formula = "=C2/24*23.2"                     'E2にC2÷24×23.2を入力
    Range("E3").Formula = "=C3/24*23.2"                     'E3にC3÷24×23.2を入力
    Range("E2:E3").AutoFill Destination:=Range("E2:E7000")   'E2、E3のようにE7000まで入力

----------------------------------
データはWiiボードの計測値なのでcm単位に直します。
リハビリテーションツール研究所の掲示板の吉村さんコメントから
出力された数値はセンサから得られた値そのままです。
X軸は-20~+20、Y軸は-12~+12の範囲です。
一方、実際のバランスWiiボードのセンサーは横43㎝、縦23.2㎝の間隔で設置されています。
したがって、出力されたX座標を40で割って43をかける、Y座標を24で割って23.2をかけると㎝に変換できます。
とあるので計算式を入れました。

----------------------------------
    '平均、標準偏差を求める
    Range("G12:G16").HorizontalAlignment = xlCenter          'G12からG16範囲を中心揃え
    Range("H11").Value = "X(cm)"                          'H11セルに「X(cm)」を入力
    Range("I11").Value = "Y(cm)"                          'I11セルに「Y(cm)」を入力
    Range("G12").Value = "平均"                             'G12セルに「平均」を入力
    Range("H12").Formula = "=AVERAGE(D2:D7000)"              'H12セルにD2からD7000の平均を入力
    Range("I12").Formula = "=AVERAGE(E2:E7000)"              'I12セルにE2からE7000の平均を入力
    
    Range("G13").Value = "標準偏差"                          'G13セルに「標準偏差」を入力
    Range("H13").Formula = "=STDEVP(D2:D7000)"                'H13セルにD2からD7000の標準偏差を入力
    Range("I13").Formula = "=STDEVP(E2:E7000)"                'I13セルにE2からE7000の標準偏差を入力
    
    '最大値、最小値を求める
    Range("G14").Value = "最大値"                            'G14セルに「最大値」を入力
    Range("H14").Formula = "=max(D2:D7000)"                   'H14セルにD2からD7000の最大値を入力
    Range("I14").Formula = "=max(E2:E7000)"                   'I14セルにE2からE7000の最大値を入力
    Range("G15").Value = "最小値"                            'G15セルに「最小値」を入力
    Range("H15").Formula = "=min(D2:D7000)"                   'H15セルにD2からD7000の最小値を入力
    Range("I15").Formula = "=min(E2:E7000)"                   'I15セルにE2からE7000の最小値を入力
--------------------------------
平均は中心、最大値・最小値は矩形の辺になります。
標準偏差はとりあえず作ってみました。(標準偏差が何かをよくわかっていない)
--------------------------------     
'矩形面積を求める
    Range("G16").Value = "矩形面積(cm2)"                   'G16セルに「矩形面積(cm2)」を入力
    Range("H16:I16").Merge across:=True                      'H16とI16セルを結合
    Range("H16").Formula = "=(H14-H15)*(I14-I15)"            '矩形の面積をH16セルに入力
   
   '矩形座標
    Range("K10").Value = "矩形"                              'K10セルに「矩形」を入力
    Range("K11").Value = "X(cm)"                           'K11セルに「X(cm)」を入力
    Range("L11").Value = "Y(cm)"                           'L11セルに「Y(cm)」を入力
    Range("K12").Value = "=(H14)"                            'K12セルにXの最大値を入力
    Range("L12").Value = "=(I15)"                            'L12セルにYの最小値を入力
    Range("K13").Value = "=(H15)"                            'K13セルにXの最小値を入力
    Range("L13").Value = "=(I15)"                            'L13セルにYの最小値を入力
    Range("K14").Value = "=(H15)"                            'K14セルにXの最小値を入力
    Range("L14").Value = "=(I14)"                            'L14セルにYの最大値を入力
    Range("K15").Value = "=(H14)"                            'K15セルにXの最大値を入力
    Range("L15").Value = "=(I14)"                            'L15セルにYの最大値を入力
    Range("K16").Value = "=(H14)"                            'K16セルにXの最大値を入力
    Range("L16").Value = "=(I15)"                            'L16セルにYの最小値を入力
    Range("M12").Value = "右下"                              'M12セルに「右下」を入力
    Range("M13").Value = "左下"                              'M13セルに「左下」を入力
    Range("M14").Value = "左上"                              'M14セルに「左上」を入力
    Range("M15").Value = "右上"                              'M15セルに「右上」を入力
    Range("M16").Value = "右下"                              'M16セルに「右下」を入力
 --------------------------------
矩形の座標を求めました。
右下-左下-左上-右下と単純に入力するだけ作業なのに疲れました。
--------------------------------
    '罫線をひく
    Range("G3:N8").Borders.LineStyle = xlContinuous                'G3からN8の範囲に細実線をひく
    Range("G3:N8").Borders.ColorIndex = 33                         'G3からN8の線の色を33番(青)色にする
    
    Range("G11:I16").Borders.LineStyle = xlContinuous               'G11からI16の範囲に細実線をひく
    Range("G11:I16").Borders.ColorIndex = 33                        'G11からI16の線の色を33番(青)色にする
    Range("G11:I11").Borders(xlEdgeBottom).LineStyle = xlDouble     'G11からI11の下端の横線を二重線にする

    Range("K11:L16").Borders.LineStyle = xlContinuous              'K11からL16の範囲に細実線をひく

    Range("K11:L16").Borders.ColorIndex = 33                       'K11からL16の線の色を33番(青)色にする
    Range("K11:L11").Borders(xlEdgeBottom).LineStyle = xlDouble    'K11からL11の下端の横線を二重線にする

----------------------------------
情報入力の表のところの罫線です。
色とか変えたかったら、黒字のコードを変更してください。
----------------------------------

うー、いっぱいになったから、あとは次回に


0 件のコメント:

コメントを投稿