見出し画像

[VB.net]メルカリのビットコイン取引結果csvファイルを取り込みGridに表示


前回からまた8ヶ月ほど空いてしまいましたが、今回は別のコード紹介です

仮想通貨や投資の話をよく目にする昨今ですが私もビットコインに手を出してみました

ビットコインは調べてもどこか信用しきれない所があり、貯金を入れるのは嫌だなぁと思っていたのですが
メルカリの売却益でビットコインが買えるようにアップデートされましたね
売却益を口座に移動すると手数料かかるので、売るもの無くなったら移す予定の売上金とメルカリポイントをビットコインに入れてみたら結構増えました(増えるのは嬉しいけどいつ手を引くべきなのか…)

確定申告するほど儲けてはいませんが、どれぐらい利益を出したのか確認するためメルカリの売上記録をDLすると…まあ見づらい…

参画しているプロジェクトでは相変わらずVB.netを使用しているので練習がてらcsvをGridに取り込むアプリを作りました


環境

  • Windows 10 Version 21H1

  • .NET Framework 4.8.09037

  • Visual Studio 2022 Version 17.1.4

作成の準備

今回はwindowsフォームアプリで作成

最新の.NETを選択

Form1にボタンとGridとファイル選択用のコンボボックスを追加

GridにCSVファイルのデータを格納するための項目を追加

項目追加完了まで

ソースコード

ソースはModule1.vbとForm1.vbの2個作成

Module1.vb


Imports System.IO
Imports System.Text

Module Module1
    Public data(15, 1)
    Public csvFileName As String
    Public count As Integer
    Public Ans1(1000) As String
    Public Ans2(1000) As String
    Public Ans3(1000) As String
    Public Ans4(1000) As String
    Public Ans5(1000) As String
    Public Ans6(1000) As String
    Public Ans7(1000) As String
    Public Ans8(1000) As String
    Public Ans9(1000) As String
    Public Ans10(1000) As String
    Public Ans11(1000) As String
    Public Ans12(1000) As String
    Public Ans13(1000) As String
    Public Ans14(1000) As String
    Public Ans15(1000) As String
    Public Ans16(1000) As String

    Public DataGridView1 = New DataGridView()
    Public rstStr As String = ""
    Public extWord As String = ""

    Public CsvFolderPath As String = "C:\Users\メルカリビットコイン"

    Public Sub CsvRead(ByVal csvPath As String)
        Dim Line As String
        Dim Field() As String

        'UTF-8でエンコードしcsvを読む
        Using reader As New StreamReader(csvFileName, Encoding.GetEncoding("UTF-8"))
            'csvの行が終わるまで取得
            Do Until reader.EndOfStream
                '1行取り出す
                Line = reader.ReadLine()
                'カンマ区切りで格納する
                Field = Line.Split(",")

                If count >= 0 Then
                    'csvの取引日時を格納
                    data(1, 0) = Field(0)
                    Ans1(count) = data(1, 0)
                    'csvの取引種別を格納
                    data(2, 0) = Field(1)
                    Ans2(count) = data(2, 0)
                    'csvの取引形態を格納
                    data(3, 0) = Field(2)
                    Ans3(count) = data(3, 0)
                    'csvの通貨ペアを格納
                    data(4, 0) = Field(3)
                    Ans4(count) = data(4, 0)
                    'csvの増加通貨名を格納
                    data(5, 0) = Field(4)
                    Ans5(count) = data(5, 0)
                    'csvの増加数量を格納
                    data(6, 0) = Field(5)
                    Ans6(count) = data(6, 0)
                    'csvの減少通貨名を格納
                    data(7, 0) = Field(6)
                    Ans7(count) = data(7, 0)
                    'csvの減少数量を格納
                    data(8, 0) = Field(7)
                    Ans8(count) = data(8, 0)
                    'csvの約定金額を格納
                    data(9, 0) = Field(8)
                    Ans9(count) = data(9, 0)
                    'csvの約定価格を格納
                    data(10, 0) = Field(9)
                    Ans10(count) = data(10, 0)
                    'csvの手数料通貨を格納
                    data(11, 0) = Field(10)
                    Ans11(count) = data(11, 0)
                    'csvの手数料数量を格納
                    data(12, 0) = Field(11)
                    Ans12(count) = data(12, 0)
                    'csvの登録番号を格納
                    data(13, 0) = Field(12)
                    Ans13(count) = data(13, 0)
                    'csvの社名を格納
                    data(14, 0) = Field(13)
                    Ans14(count) = data(14, 0)
                    'csvの備考を格納
                    data(15, 0) = Field(14)
                    Ans15(count) = data(15, 0)

                End If
                'csvの値取得のためのカウント(count)を1進める
                count += 1
            Loop
        End Using
        MsgBox("読み込みました")
    End Sub

End Module

Form1.vb

Public Class Form1

    Private Sub Form1_load(sender As Object, e As EventArgs) Handles Me.Load

        'テキストボックス部分は編集不可にする
        Me.ComboBox1.DropDownStyle = ComboBoxStyle.DropDownList

        For Each Fname As String In System.IO.Directory.GetFiles(CsvFolderPath, "*.csv")
            '拡張子前の名前を取得
            rstStr = Fname.Substring(0, Fname.IndexOf("."))

            '6文字を抽出
            extWord = Strings.Right(rstStr, 6)

            'コンボボックスに項目(csvファイル名)を追加する
            ComboBox1.Items.Add(extWord)

        Next
    End Sub


    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click

        If ComboBox1.Text = "" Then
            MsgBox("csvファイル名を選択してください")
            Exit Sub
        Else
            'CSVファイルのパスを取得
            csvFileName = ComboBox1.Text & ".csv"
        End If

        Dim MyPath As String = CsvFolderPath

        If MyPath.EndsWith("\") = False Then
            MyPath &= "\"
        End If

        csvFileName = MyPath & csvFileName

        CsvRead(csvFileName)

        With Me.DataGridView1
            .Visible = False
            For i = 0 To count
                .Rows.Add()
                .Rows(i).Height = .ColumnHeadersHeight
                .Rows(i).DefaultCellStyle.Font = .ColumnHeadersDefaultCellStyle.Font

                .Rows(i).Cells(0).Value = Ans1(i)
                .Rows(i).Cells(1).Value = Ans2(i)
                .Rows(i).Cells(2).Value = Ans3(i)
                .Rows(i).Cells(3).Value = Ans4(i)
                .Rows(i).Cells(4).Value = Ans5(i)
                .Rows(i).Cells(5).Value = Ans6(i)
                .Rows(i).Cells(6).Value = Ans7(i)
                .Rows(i).Cells(7).Value = Ans8(i)
                .Rows(i).Cells(8).Value = Ans9(i)
                .Rows(i).Cells(9).Value = Ans10(i)
                .Rows(i).Cells(10).Value = Ans11(i)
                .Rows(i).Cells(11).Value = Ans12(i)
                .Rows(i).Cells(12).Value = Ans13(i)
                .Rows(i).Cells(13).Value = Ans14(i)
                .Rows(i).Cells(14).Value = Ans15(i)

            Next i
            .Visible = True
        End With
    End Sub

End Class


動作の説明

基本的には画面ロードの処理(Form1_load)とボタン押下処理(Button1_Click)の2つで、ボタン押下処理でModule1.vbの(CsvRead)で指定のフォルダのcsvを読み込んで行く処理となる

画面ロードの処理(Form1_load)ではコンボボックスの値を指定のフォルダ内にあるcsvファイルを読み取り、YYYYMMを抜き出して表示している

実行中の動き



結果

指定のフォルダに格納されているCSVファイルを選択しGridに表示することができた

改善点

Gridに不要な行が入ってしまっている(グラフ表示に影響なければそのままでもいいかな)

表示したGridに対して適切なグラフを表示したい
折れ線グラフと棒グラフ
(横軸 年月日 縦軸金額 購入金額(円,bitcoin)

取引結果の利益を一目で分かるようにしたい
お金からビットコインに変換しビットコインに戻ったタイミングの差分など


あとがき

それにしてもビットコインの引き際難しいですね
株みたいにずっと保持するべきなんでしょうけど、一気に下がるんじゃないかと思ってしまい利確してしまう…(^_^;)


この記事が気に入ったらサポートをしてみませんか?