続続・Excel の選択範囲のセルを列挙したい
http://d.hatena.ne.jp/unibon/20050113/p3 の続き。
現在のバージョンはつぎのとおり。
Option Explicit Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Excel.Range) Dim r As Excel.Range Set r = Target.Areas.Item(1).Rows Dim sheet As Excel.Worksheet Set sheet = Sh Dim i As Long ' Debug.Print "row:" & r.Row & ", len = " & r.Count Dim totalPrice As Long Dim totalAmount As Long For i = r.Row To r.Row + r.Count - 1 If IsNumeric(sheet.Cells(i, 2)) And IsNumeric(sheet.Cells(i, 3)) Then Dim amount As Long amount = CLng(sheet.Cells(i, 2)) ' 株数列(売りが負、買いが正) Dim price As Long price = CLng(sheet.Cells(i, 3)) ' 株価列(正のみ) totalAmount = totalAmount + amount totalPrice = totalPrice + amount * price End If If IsNumeric(sheet.Cells(i, 5)) Then Dim toll As Long toll = CLng(sheet.Cells(i, 5)) ' 配当または手数料の列(配当が負、手数料が正) totalPrice = totalPrice + toll End If Next Dim s As String If totalAmount < 0 Then s = "売り " & -totalAmount & "株 " & totalPrice / totalAmount & "円" ElseIf totalAmount > 0 Then s = "買い " & totalAmount & "株 " & totalPrice / totalAmount & "円" Else ' Debug.Print "total = " & totalPrice & "円" ' (利益が負、損失が正) If totalPrice < 0 Then s = "利益 " & -totalPrice & "円" ElseIf totalPrice > 0 Then s = "損失 " & -totalPrice & "円" Else s = "トントン" End If End If Debug.Print s End Sub
このプログラムをつぎのようなフォーマットの玉帖で使える。
使い方は、選択したセルの売買を累計して、売り買いの株数が相殺するなら、損益金額を表示し、売り買いのどちらかが多ければ、差し引きの株数の平均買い(または売り)単価を表示する。表示場所は VBA のイミディエートウィンドウなのがダサい。Alt + F11 で呼び出さないといけない。Excel のステータスバーに字を出すのってどうやるんだ?
ちなみにこれは MBH(8698) の分の玉帖。
約定日 株数 単価 証券会社 手数料(税込) 備考 1999/1/1 1 100000 日興ビーンズ 辻褄合わせ 2004/4/20 -1 110000 日興ビーンズ 1050 定額3150円を3銘柄で均等割り 2004/4/23 1 101000 ジェット 777 2004/4/30 -1 116000 ジェット 777 2004/5/6 1 111000 ジェット 777 2004/7/6 1 155000 コスモ 0 2004/7/6 -1 144000 コスモ 0 2004/7/7 -1 162000 ジェット 777 2004/7/14 1 195000 コスモ 0 2004/7/16 -1 202000 コスモ 0 2004/7/22 1 201000 東洋 0 2004/8/2 1 167000 コスモ 0 2004/8/3 1 137000 コスモ 0 2004/8/4 -1 148000 コスモ 0 2004/9/21 1 104000 楽天 0 2004/9/22 -1 109000 楽天 0 2004/10/29 1 87600 楽天 0 2004/11/16 -1 107000 楽天 0 2004/11/22 1 103000 丸三 0 2004/11/30 -1 103000 東洋 840 2004/11/30 1 103000 丸三 0 2004/12/3 -1 100000 コスモ 0 移管元 2004/12/3 1 100000 楽天 0 移管先 2004/12/6 -1 98100 楽天 0 2004/12/6 1 98100 丸三 0 2004/12/28 -1 114,000 丸三 0 2005/1/18 -1 140,000 丸三 0 累計 1 114598 114598 4998
なお、約定日と株数の列がくっついて見えて、見た目は変だが、コピーアンドペーストすればちゃんとタブが入っているので、Excel などへはちゃんと貼り付けできる。株数は、正が買いで、負が売り。