ExcelVBA作例8(UV-Vis:3回測定標準偏差)
- 前回ご紹介した実験結果の紫外可視吸収スペクトルは、同じサンプルを三回測定していました。
- このようなデータは、測定値の平均と標準偏差が知りたい場合が多くあります
- そこで今回は、3回測定の平均と標準偏差を計算するマクロを紹介いたします。
- このマクロを実行するためには、前回までにご紹介したUV-Visスペクトルを計算するマクロを実行したファイルが必要となりますので、まだの方はそちらの記事を先にご覧になってください。
- 次のマクロを実行します
Option Explicit
Sub 三回標準偏差()
Dim S存在 As Boolean
S存在 = False
Dim シート As Worksheet
For Each シート In Worksheets
If シート.Name = "3回偏差" Then
S存在 = True
End If
Next
If S存在 = True Then
Application.DisplayAlerts = False
Worksheets("3回偏差").Delete
Application.DisplayAlerts = True
S存在 = False
End If
If S存在 = False Then
Worksheets.Add after:=Worksheets(3)
Worksheets(4).Name = "3回偏差"
End If
Worksheets(2).Select
Dim i As Integer
i = Range("D2").Value
Range("A15").Select
Range(Cells(15, 1), Cells(15, i)).Copy Worksheets(4).Range("A15")
Worksheets(4).Select
Dim 列番号 As Integer
Dim データセット As Integer
Dim データ番号 As Integer
データセット = (i - 1) / 3
列番号 = 2
For データ番号 = 1 To データセット '吸着量[mmol/L]の値をデータセットごとに並べる
Range(Cells(15, 列番号), Cells(15, 列番号 + 2)).Cut Cells(14 + データ番号, 2)
列番号 = 列番号 + 3
Next
Worksheets(2).Select
Range(Cells(16, 1), Cells(16, i)).Copy Worksheets(4).Cells(15 + データセット, 1) '吸着等温線シートから測定濃度をコピペ
Worksheets(4).Select
列番号 = 2
For データ番号 = データセット To データセット * 2 '測定濃度の値をデータセットごとに並べる
Range(Cells(15 + データセット, 列番号), Cells(15 + データセット, 列番号 + 2)).Cut Cells(15 + データ番号, 2)
列番号 = 列番号 + 3
Next
Range("E13").Value = "バッチ番号"
Range("F14").Value = "平均"
Range("G14").Value = "標準偏差"
Range("J14").Value = "吸着率%"
Range("K14").Value = "標準偏差"
Range("H14").Value = "初濃度[mM]"
列番号 = 2
For データ番号 = 1 To データセット 'バッチ番号の値をコピー
Worksheets(2).Cells(14, 列番号).Copy Worksheets(4).Cells(14 + データ番号, 5)
Worksheets(2).Cells(14, 列番号).Copy Worksheets(4).Cells(14 + データ番号 + データセット, 5)
列番号 = 列番号 + 3
Next
列番号 = 2
For データ番号 = 1 To データセット '初濃度の値をコピー
Worksheets(2).Cells(17, 列番号).Copy Worksheets(4).Cells(14 + データ番号, 8)
列番号 = 列番号 + 3
Next
Worksheets(4).Select
Dim 行番号 As Integer
For 行番号 = 15 To 14 + データセット * 2
Cells(行番号, 6).FormulaR1C1 = "=AVERAGE(RC[-4]:RC[-2])"
Next
For 行番号 = 15 To 14 + データセット * 2
Cells(行番号, 7).FormulaR1C1 = "=STDEV.P(RC[-5]:RC[-3])"
Next
行番号 = 15
Cells(行番号, 10).Value = (Range("F15").Value / 0.01) * 100
For 行番号 = 16 To 14 + データセット
Cells(行番号, 10).Value = (Cells(行番号, 6) / Cells(行番号, 8) - Range("F15").Value / Cells(行番号, 8)) * 100
Next
For 行番号 = 15 To 14 + データセット
Cells(行番号, 11).Value = (Cells(行番号, 7) / Cells(行番号, 8)) * 100
Next
With ActiveSheet.Shapes.AddChart _
(xlXYScatter, 20, 40).Chart
.SetSourceData _
Range(Cells(14, 5), Cells(14 + データセット, 6))
.SeriesCollection(1).Trendlines.Add _
(Type:=xlLinear, Forward:=0, Backward:=0, DisplayEquation:=True, DisplayRSquared:=True).Select
.HasTitle = False
.ChartArea.Format.Fill.Visible = False
.PlotArea.Format.Fill.Visible = False
With .ChartArea.Format.Line
.Visible = msoFalse
End With
With .Axes(xlValue, 1).TickLabels
.Font.Color = RGB(0, 0, 0) '文字色
.Font.Size = 12 'サイズ
.NumberFormatLocal = "0.000" '表示形式
End With
With .Axes(xlValue)
.HasTitle = True
.AxisTitle.Text = "吸着量[mmol/L]"
.MajorTickMark = xlInside '主目盛内側
.MajorGridlines.Delete '目盛線消去
.MinorTickMark = xlInside '補助目盛内側
With .Format.Line
.Visible = msoTrue
.ForeColor.ObjectThemeColor = msoThemeColorText1
.ForeColor.TintAndShade = 0
.ForeColor.Brightness = 0
.Transparency = 0
End With
End With
With .Axes(xlCategory).TickLabels
.Font.Color = RGB(0, 0, 0) '文字色
.Font.Size = 12 'サイズ
End With
With .Axes(xlCategory)
.HasTitle = True
.AxisTitle.Text = "バッチ番号"
.MajorTickMark = xlInside '主目盛内側
.MinorTickMark = xlInside '補助目盛内側
With .Format.Line
.Visible = msoTrue
.ForeColor.ObjectThemeColor = msoThemeColorText1
.ForeColor.TintAndShade = 0
.ForeColor.Brightness = 0
.Transparency = 0
End With
End With
.HasLegend = False '---凡例を非表示
With .FullSeriesCollection(1) '項目1の設定
.HasErrorBars = True 'エラーバーを表示
.ErrorBar Direction:=xlY, Include:=xlBoth, Type:=xlCustom, _
Amount:=Range(Cells(15, 7), Cells(14 + データセット, 7)), MinusValues:=Range(Cells(15, 7), Cells(14 + データセット, 7)) 'エラーバーの設定
.ErrorBar Direction:=xlX, _
Include:=xlBoth, _
Type:=xlErrorBarTypeCustom, _
Amount:=0, _
MinusValues:=0
End With
End With
ActiveChart.PlotArea.Select
With Selection.Format.Line
.Visible = msoTrue
.ForeColor.ObjectThemeColor = msoThemeColorText1
.ForeColor.TintAndShade = 0
.ForeColor.Brightness = 0
.Transparency = 0
End With
With ActiveSheet.ChartObjects(1).Chart.SeriesCollection(1)
'マーカーの背景色
.MarkerBackgroundColorIndex = xlColorIndexNone '赤
End With
'1つ目の系列
With ActiveSheet.ChartObjects(1).Chart.SeriesCollection(1)
.MarkerSize = 8 'マーカーのサイズ
End With
'1つ目の系列
With ActiveSheet.ChartObjects(1).Chart.SeriesCollection(1)
.MarkerStyle = 8 'マーカーを表示(種類:1~9)
End With
End Sub