RSSユーザー
POSITION関数の***END***の表示がずれる時の修正方法とその他1点についてです。
お世話になっております。
一つは、POSITION関数の銘柄コード、保有数量、取得単価が並んでいるのですが、約定した時たまに取得単価とかがそのまま残っていて***END***が一段下にずれて表示されたままになっている場合があります。これを自動で直す方法はありますか。
二つは、ある銘柄のQUOTE関数の買付強度をあるセルに表示させておき、そのセルが>0.5の時実行というIF文を書いたのですがそのセル<0.5の時実行されてしまいました。セルは41.07%と表示されていました。セル値の書式とかが問題なのでしょうか、お教えください。
2022年02月03日
大野 了
RSSユーザーさん、こんにちは!!
>***END***が一段下にずれて表示されたままになっている
たまにありますね・・・
セル関数やExcelの設定だけでどうにかできないか考えてみたのですが
残念ながらこちらは自動で直すことは厳しいと思われます。
VBAを書けば、何とかなるのですが・・・
>QUOTE関数の買付強度
買付強度は"41.07%"という文字で表示されているため、数値との比較が正常にできていないようです。
A1セルにQUOTE関数を書いているとして
=VALUE(A1)<0.5
という感じで買付強度が出力されているセルをVALUE関数で囲ってあげると、41.07%を数値に変換しますので
比較可能になります!!
2022年02月03日
RSSユーザー
お世話になっております。
セルの値が数字として認識しない問題は、=A1*1でいいかなあと思っていましたが大野様の =VALUE(A1)に変更しました。
もう一つの問題である、***END***が一段下にずれて表示されたままになっている場合ですが以前大野様より以下のようなVBAを頂いていたので、各POSITION関数の銘柄コード、保有数量、取得単価の下の数のカウント合計が同じでない場合A1=1になるように設定しマクロ実行(該当箇所の表示を削除)するようにしてみます。
「セルA1が1になったらマクロ実行」
シート1のコード
Option Explicit
Private PrevData As String
Private Sub Worksheet_Calculate()
If PrevData <> "1" And Range("A1").Value = 1 Then
Call Application.Run("Macro1")
End If
PrevData = Range("A1").Value
End Sub
モジュール1のコード
Option Explicit
Public Sub Macro1()
MsgBox "aaa"
End Sub
2022年02月03日
RSSユーザー
何度もすみません。普段はUWSCのスケジュール設定でタイマーによりマクロ実行しているのですが、以下の文にセルA1=1などと条件をつけてUWSCから実行はできないでしょうか。「UWSCは独立系でマクロコードの実行が中断しないかなあと」
try
ExcelObj = GETACTIVEOLEOBJ("Excel.Application")
ExcelObj.Run("Macro1")
except
exit
endtry
2022年02月03日
大野 了
RSSユーザーさん、こんにちは
以前、やり取りをさせて頂いた方だったんですね!!
>以下の文にセルA1=1などと条件をつけてUWSCから実行はできないでしょうか。
こちらはA1=1の時だけMacro1を動かされたいという事でしょうか?
UWSCからやられる場合は
try
ExcelObj = GETACTIVEOLEOBJ("Excel.Application")
If ExcelObj.Sheets("Sheet1").Range("A1").value = 1 Then
ExcelObj.Run("Macro1")
EndIf
except
exit
endtry
というような感じで大丈夫かと思われます!!
※テストはしていませんので、若干の構文間違いなどありましたら、申し訳ありません。
2022年02月03日
RSSユーザー
すみません、私ばかちんです。
これだと結局UWSCスクリプトをタイムスケジュールで実行しなければいけません、(1分おきとかに設定)
で、考えていたら、いぜんに***END***より上の数が銘柄コード、取得単価、保有数量それぞれ同じにカウントしたら注文できるという誤発注の対策を教えていただいていました。そこで思いついたのが同じカウントじゃない時つまり約定中のマクロ実行(Sample)でした。このSampleは「ルパンのタイプライター音」で結構きにいっているものです。
話が長くなってしまいましたが、このvbaの中でSampleの前にMacro1(***END***の範囲を一度Deleteするマクロ)を実行させてからSampleを実行させる文はどう書けばよいか教えてください。
以下の文がそうです。シートを右クリックしてコード表示を押すとでてくるやすです。本物は線が引いてあります。
Worksheet Calculate
Private Sub Worksheet_Calculate()
If Range("N4") = 0 Then Call Sample
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
If Range("N4") = 0 Then Call Sample
End Sub
2022年02月03日
大野 了
RSSユーザさん、こんにちは!!
ルパンのタイプライター音懐かしいですねー
久々にルパンの『ふ~じこちゃ~ん』を聞きたいです(笑
さて、ご質問を頂いた内容の回答とは異なってしまいますが、
今回のご質問の元々の発端は"***END***"が複数行に出てしまって、誤発注が防げないという事になりますでしょうか?
もしそれであれば、他の方に頂いたご質問の回答とは異なって、
大変もうしわけないのですが、
こちらのリンクの『END行チェックサンプル.xlsx』の方式でやって頂きますと、
***END***が消えていなくても、誤発注が防げると思います。
https://bbs.okasan-online.co.jp/ont/rss/board/?category_id=1&topic_id=489
以前、やり取りをさせて頂いたみたいですので、
もしかすると以前に自分が不適切なやり方をお伝えしてしまったのでしたら、大変申し訳ありません。
VBAで***END***を消すより簡単だと思います!!
もし、不都合がございましたら、またご返答頂けますと幸いです。
2022年02月04日
RSSユーザー
取引デモ1.xls (26.0KB)
すみません、
***END***がきれいにそろっていないとだめな理由は添付ファイルのようにたの保有銘柄にも影響し全取引が停止してしまうからです。
ついでに、質問しちゃいますがPOSITION関数の売買区分の 売 買 の表示は文字表記でしょうか? いろいろすみません、ザラバ明けでけっこうですので!
2022年02月04日
RSSユーザー
何度もすみませんでした。
結局、UWSCで一分おきにエクセルマクロ(***END***の範囲をDELETE)を実行させることにしました。VBAだといったんDELETEした後また***END***の出現が不揃いでくるので、DELETEのマクロが動き出しエンドレスになってしまいます。
いろいろお騒がせしました!
2022年02月05日
大野 了
RSSユーザーさん、こんにちは!!
なるほどー
UWSCの方がご都合がよかったんですねー
なにはともあれ、安定したようでよかったです!!
2022年02月05日