ラベル excel の投稿を表示しています。 すべての投稿を表示
ラベル excel の投稿を表示しています。 すべての投稿を表示

プログラムって便利なものなんだなあと思った。

最近、Excel VBAをコツコツ書いています。
以前、プログラミングの教科書を読んで、何度も挑戦して挫折しました。
いま思い返すと「そりゃそうだよなあ」と。
だって必要性が感じられないのだもの。

先日、1年間に40万行ほどのデータを手に入れた。
その中に6000~7000カ所ほどのデータ欠損箇所があって、それを探し出し、欠損部分を補完する必要性に迫られた。最初手作業で1時間ほどやってみて、50カ所ほど補完したところで見事に挫折。これは無理、これを5年分もやるのは絶対無理だと。

で、VBAで小さなプログラムをいくつか作って処理してみた。
これまでに何度も挫折してきたお陰で、基本的な構文は頭に入っている。あとはネットで関数をいくつか調べるだけで何とかなる。手順をコードに落とし込んで行く。

実際、一つのプログラムを作るのに、テストを含めて2時間ほど掛かったけれど、手作業だったら何日もかかる作業が僅か10分ほどで終わる。MacがCPU負荷MAXでウンウン唸ってくれるお陰で楽をさせてもらえてる。

なんかプログラムって仕事をお願いするためのラブレターみたいなものなんだなと思えるようになったのさ。必要は発明の母って言うが、それは本当なのだとね。

Excel VBAで、セルの背景に色を付けてみた

ついでに、先ほどの1分足のデータに3分ごとにセルの背景に色を付けてみた。
作業上少し見やすくなると良いかなあと思って。

========================================
Sub 背景カラー()

Dim 行数, i As Long
行数 = ActiveSheet.Range("A1").End(xlDown).Row

For i = 2 To 行数

 If Minute(Range("A" & i)) = 0 Then
    Range("A" & i).Interior.ColorIndex = 34 '水色
    End If
   
 If (Minute(Range("A" & i)) Mod 3) = 0 Then
    Range("A" & i).Interior.ColorIndex = 34 '水色
    End If

Next i

End Sub
========================================

為替の1分足データの抜けを探すVBAを作ってみた

Excelで為替のヒストリカルデータを眺めていたら、結構抜けがあることに気づいた。
1分足からほかのチャートにコンバートする際に問題になるだろう。
関数で色々挑戦してみたが、時刻のシリアル値を操作するのは誤差が出て難しかった。

で、必要に迫られてVBAで簡単なプログラムを作った。
目視で調べても良いんだけど、1年分で369564行あるわけで軽く死ねる。
これを何年か分も目視するなんて、無理だ。

で、ラクをしようといろいろと工夫してみた。
だが、VBAが全然わからず、if〜thenとfor next で簡単なものを作るだけで2時間も掛かってしまった。
それでも目視で調べるよりは断然速い……と思う。

時々数字がおかしいものが出るが、異常値だけはじき出せば用が足りるので、これで十分かと。

ソースデータは下記のような構成になっている。

Time    Open    High    Low    Close
2015/1/2 0:00    119.666    119.742    119.666    119.741
2015/1/2 0:01    119.741    119.741    119.695    119.7

==============================
Sub データ欠損調査()

Dim 行数, i As Long

Range("B2").Value = True 'trueにしないと欠損データ修復ロジックに影響するため

行数 = ActiveSheet.Range("A1").End(xlDown).Row

For i = 3 To 行数

  If DateDiff("n", Range("A" & i), Range("A" & i - 1)) <> -1 Then
        Range("B" & i) = Abs(DateDiff("n", Range("A" & i), Range("A" & i - 1)))
    Else
        Range("B" & i) = "true"
  End If

Next i

MsgBox "データ欠損調査終了"

End Sub==============================