今回は電気化学測定装置から吐き出されるCV(サイクリックボルタモグラム)のデータを、簡単に処理するために組んだマクロをアップします。
仕様もどき
ちゃんと仕様を考えていたわけではありませんが、だいたいのポイントはこんな感じです。
- 生データはファイル名「02 CV」から始まるcsv
- Excelで開くと上から10行目くらいまで基本情報
- 13行目くらいから1サイクル目が始まる
- サイクル毎の諸情報・予備測定・本測定がある
- 測定データは5サイクル分
- 必要なのは本測定データ
- 1サイクル分のデータ量が1600点程度
- マクロで動かすのは実行ファイルと生データファイルのみ
- マクロ実行ファイルと同階層に生データファイル
- マクロ実行ファイルに「貼り付け先」シートを用意
- データの単位操作やグラフ加工は別シートにテンプレを用意
実際のコード
以下、実際に使っていたコードです。ちょっと苦労したのが各サイクルの「本測定」の判別ですね。Address、Findを使ってループする形で解決しました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
Sub CVDataCopipe() Application.ScreenUpdating = False 'ファイル開く Dim PName As String 'このブックのパス PName = ThisWorkbook.Path & "\" Dim FName As String '生データのブック FName = Dir(PName & "02 CV*.csv") Workbooks.Open Filename:=PName & FName 'シート1をアクティブにしていないとNG Dim myRange As Range Dim myAdrs As String Dim myData As Range 'myData は本測定から Dim c As Long Set myRange = ActiveSheet.Range("D:D").Find("本測定") myAdrs = myRange.Address Do ActiveSheet.Activate Set myData = myRange.Offset(13, -2) myData.CurrentRegion.Offset(1, 1).Select Selection.Resize(Selection.Rows.Count - 1, Selection.Columns.Count - 3).Copy c = ThisWorkbook.Worksheets("貼り付け先").Cells(2, Columns.Count).End(xlToLeft).Column + 1 ThisWorkbook.Worksheets("貼り付け先").Cells(2, c).PasteSpecial Paste:=xlPasteValues Set myRange = ActiveSheet.Range("D:D").FindNext(myRange) Loop Until myRange.Address = myAdrs ActiveSheet.Range("A1").Copy 'クリップボードのデータを小さくする ActiveWorkbook.Close savechanges:=False '変更を保存しないでCSVを閉じる End Sub |
一言メモ
今見ると相当酷い。アクティブをアクティブにするという謎(笑)でも、こんな粗雑なプログラムでもとても重要な働きをしていたんです。必要なところが動けばOKです。
材料系の研究をしている方ってまだまだデータ処理を手作業でえいやっと処理している人が多いイメージです。これからやるならPythonでしょうかね。おばちゃんはまだマクロで戦ってますよー。
Excelマクロ)csvデータ取り込みのおまけコード4つ
以前、csvデータの取り込みに関するマクロをアップしたのですが、そのマクロを作成した当時に作ったおまけコードです。それぞれボタンを配置してマクロを割り当てて使っていました。連続してデータを処理するとき、いちいち画面を切り替えて操作するのがめ...