2016-11-14 6 views
0

Excelのスプレッドシートで数値データを分析します。各行には、 (左から右へ、Excelのデータセットの図を参照)。各行について、合計30〜180列が存在することができる(したがって、行ごとに3〜10個のサンプルが10個ずつ)。さらに、10〜180行のデータが存在する可能性があります。私はVBのコードは3番目の列(列Dで始まる)の後に列を挿入し、その新しい列で3つの行の値のCV [= STDEV(D3:F3)/ AVERAGE(D3:F3)]を計算したい列(D3/E3/F3)に挿入し、挿入された列の下部には、その列のすべてのCVの平均を計算します(Excelのデータセット画像の処理を参照)。また、データセットには可変数の列があります(しかし、常に3のグループになります)ので、コードが「データ付き」列の最後に来たときにコードが認識するようにしてください。行の数も変化するので、「データ付き」行の最後まで。以下は、開始Excelデータセットと処理済みExcelデータセットの写真です。私は、検索に出てきた多くの関連する質問に目を通しましたが、このアプリケーションには適合しませんでした。コードを書く知識はほとんどありません。助けてくれてありがとう、本当に感謝しています。3番目のデータ列ごとにExcelを挿入/挿入してCV(STDEV/AVERAGE)を計算し、その列のCVの平均を計算します

Excel data set

Processed Excel data set

+0

「データの終了」のルールは何ですか?行または列の空白/空のセル値? –

+0

こんにちはウェイン、これを見てくれてありがとう、データルールの私の終わりは "行または列の空白/空のセル値" – Bill

答えて

0

ちょうどあなたが持っているものは何でもシート名にシート名を変更...次のコードを試してみてください。

Option Explicit 

Function STDEV_AVG() 
Dim ws  As Worksheet 
Dim iRow As Integer 
Dim iCol As Integer 
Dim iLastrow As Long 
Dim iLastCol As Long 
Dim rng1  As Range 

    Set ws = ActiveWorkbook.Sheets("sheet5") 
    Sheets(ws.Name).Activate 
    With ws 
     iLastrow = Cells.Find(What:="*", After:=Range("A1"), SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row 
     iLastCol = Cells.Find(What:="*", After:=Range("A1"), SearchOrder:=xlByColumns, SearchDirection:=xlPrevious).column 
    End With 

    If iLastCol < 6 Then 
     MsgBox "There must be a minimum of 6 columns, else this format seems incorrect!" 
    End If 

    For iCol = iLastCol + 1 To 7 Step -3 
     ws.Cells(1, iCol).Select 
     ActiveCell.Offset(1).EntireColumn.Insert (xlShiftToRight) 
     Cells(2, iCol) = "StdDev" 
     For iRow = 3 To iLastrow 
      If Cells(iRow, iCol - 1) <> "" Then 
       Set rng1 = ws.Range(Cells(iRow, iCol - 3), Cells(iRow, iCol - 1)) 
       'ws.Range(Cells(iRow, iCol - 3), Cells(iRow, iCol - 1)).Select 
       Cells(iRow, iCol).Formula = "=STDEV.P(" & rng1.Address & ")" 
      End If 
     Next iRow 
     Set rng1 = ws.Range(Cells(3, iCol), Cells(iLastrow, iCol)) 
     'ws.Range(rng1.Address).Select 
     Cells(iLastrow + 1, iCol).Formula = "=Average(" & rng1.Address & ")" 
    Next iCol 

End Function 
+0

こんにちはウェイン、私は間違って私はSTDEVが本当にCVを望んでいたと述べた(STDEV/AVERAGE; STDEV (D3:F3)/ AVERAGE(D3:F3))。あなたのコードをSTDEVをCVから計算するように修正しようとしていますが、運がまだありません。あなたの助けは再び本当に感謝されるでしょう。 – Bill

+0

次に、 "= STDEV.P("&rng1.Address& ")" =(STDEV( "&rng1.Address&"))/ Average( "&rng1.Address&") "をSTDEV/AVERAGE –

+0

これはうまくいきました。唯一の問題は、前のマクロを実行して#DIV/0を残したExcelファイルにこのマクロを適用したときでした。私がすべての#DIV/0を置き換えるまで、このマクロはそれらのファイルで実行されませんでした! 0.0で、それは完璧に走った。 – Bill

関連する問題