つづき
ここまで出来れば後はこの応用、入り口だけが、始めの一歩が、どんな事でも困難なのではないだろうか。後は簡単ではないが何とかなる。何とか出来そうだ・・・・・・
始めの一歩を踏み出そう
前回したように、図のように6個のボタンを作り
各々マクロ登録の新規作成(N)をクリック、して行く。
VBEは図のようになり、オブジェクト名を抽出とする。
Sub の横を HOLD、NOポジ、買い、売り、ストップ、ストップ点灯と記入して行く。
赤丸のところは自然と変わります。
エクセルに戻り各ボタンの名前を上からHOLD、NOポジ、買い、売り、ストップ、ストップ点灯と変えます。(前回参照)
ボタンを右クリックしてマクロの登録(N)、HOLDのボタンであればHOLDを選択し、OKをクリックします。(6個全てにしてください)右の図の様になります。
これで準備完了。
後はVBEを開きSubとEnd Subの間にソースコードを記述していきます。
記述の方法にはマクロの記録機能を使う方法、自分で記入していく方法、他の人が作ったモジュールを何処かからパクッて来る方法などがあります。
マクロの記録機能が使えれば良いのですが,エクセルの作業が今回複数のページにまたがっているので、今から書くソースコードをコピーペーストしてください。
1.HOLD(1)のサインの出ている銘柄の抽出
Sub HOLD Click() と End Sub の間に下のソースコードを貼り付けてください。
***********
Dim objSheet As Worksheet
Dim ingCount As Integer
ingCount = 0
Application.ScreenUpdating = False
For Each objSheet In ThisWorkbook.Worksheets
If objSheet.Range("AA3") = 1 Then
Worksheets(1).Range("C6").Offset(0, ingCount) = objSheet.Range("G1")
Worksheets(1).Range("C7").Offset(0, ingCount).Value = objSheet.Range("E3").Value
Worksheets(1).Range("C8").Offset(0, ingCount).Value = objSheet.Range("R3").Value
ingCount = ingCount + 1
End If
Next
Worksheets(1).Range("C7").Offset(0, ingCount) = "以上なし"
Application.ScreenUpdating = True
**********
コードの説明
*
Dim ステートメントで変数は宣言をしなければなりません。
『 Dim 変数名 As データ型 』
変数名 objSheet は自分で考えて作るもので、アルファベット小文字で始めます例えば f1 でも構いません。分かりやすい短いのが良いでしょうね。
多分これは何かの本からそのまま移したと思います。
データ型 Worksheet これは普通、変数の精度 によって決まります。(これは多分オブジェクト型だと思います)
データ型 Integer は整数値
*
For Each objSheet In ThisWorkbook.Worksheets ~
Next
objSheet(オブジェクト型)変数が1から増えていき。Nextまでワークブックの数だけくりかえします。
後でシートを増やしてもこれで対応してくれます。普通の変数型にすれば予めシート数を数えていなければなりませんし、シートを増やしたり減らしたりすればその度に変えなければなりません。
*
If objSheet.Range("AA3") = 1 Then
End If
objSheet.はつまり最初 Worksheets(1). で Sheet1のセルAA3(売買指示サイン)が1なら次の処理をしingCountは0から1増えます(ingCount = ingCount + 1)。(当然Sheet1のセルAA3は1ではありません)
objSheet.はWorksheets(2). となりSheet2のセルAA3が1なら次の処理をしingCountは1増えます
*
Worksheets(1).Range("C6").Offset(0, ingCount) = objSheet.Range("G1")
セルAA3が1ならそのシート(objSheet.)のセルG1(銘柄名)がSheet1のセルC6から(0、ingCount)(行、列)離れたセルに入ります。つまりセルC6、セルD6、セルE7と右に入っていきます。Offset(0, ingCount)はそう言う意味です。
その下にE3(終値)、R3(売り+TS 予定)が入ります。
*
残りのボタンのソースコードもこれと同じで、条件の値みどりを変えます。その下の式の記入の位置みどりを最初に記入するセル位置に、記入する値みどりを見たいセルに変えます。
つまりこの部分を変えることにより色んな表示が今後出来ると言うことです。
素晴らしいアイデアがあればシート2以降のK列~V列までを改良して、先ほど書いたSheet1のソースコードのみどりの部分を変えると面白いことになると思います。
話が反れてしまいましたね。
それで、今作ったボタンを押して記入された部分は消去ボタンを押しても消えませんので今からそのソースコードを昨日作った消去モジュールに付け加えていきます。1部変更しましたのでよろしくお願いします。
***********
Set a = Worksheets(1)
a.Range("A7").ClearContents
a.Range("C6:Q8").ClearContents
a.Range("C11:Q13").ClearContents
a.Range("C16:O18").ClearContents
a.Range("C21:O23").ClearContents
a.Range("C26:O27").ClearContents
a.Range("C30:O31").ClearContents
***********
ゆいさんのコメントを試してみればすっきりしたソースになりました。
ありがとう。
思い出しました。半年前に多分上手く行かなかったんだと、それでマクロの記録を使ったんだろうと。
この場合 Set がいるのですね。
皆さんも作って試してくださいね。
最近のコメント