全3件 (3件中 1-3件目)
1

株式投資をしていると、「もっと自分好みの条件で銘柄を探したい」「毎日同じデータを調べる作業を自動化したい」「楽天RSSのデータと信用倍率などを組み合わせて、独自のスクリーニングを作りたい」と思うことがあります。私も同じようなことを考えて、PythonとExcelを組み合わせて、JPXから信用取引関連のデータを取得し、Excelに自動整理する仕組みを作りました。画像の通り、Excelのデータにしています。Excelデータにするだけではなく、最終的には、Excel側で楽天RSSなどのリアルタイムデータと組み合わせることで、「自分で設定した条件に一致した銘柄を自動的に見つける」というところまで実際に行っています。今回は、まずExcelデータ化の部分の仕組みを作った理由や、どのような構成になっているのかを紹介します。そもそも、なぜこんなものを作ったのか?株式投資をしていると、銘柄を探すために、株価出来高RSI移動平均線配当利回りPERPBR信用倍率信用残貸借状況など、いろいろな情報を見ることになります。しかし、情報が複数のサイトやツールに分散していると、毎回調べるのが面倒です。そこで、「必要なデータをExcelに集めて、自分で条件を組み合わせればいいのでは?」と考えました。私の場合、楽天RSSをExcelと組み合わせて、株価などの情報をリアルタイムに取得しています。楽天RSSのデータに、さらに信用取引関連のデータを組み合わせれば、株価がこの条件+出来高がこの条件+RSIがこの条件+信用倍率がこの条件というような、自分専用のスクリーニング環境を作ることができます。Pythonを使った理由Excelだけでもかなりのことができます。ただし、今回のように大量のデータを扱おうとすると、Excelだけでは面倒な作業が増えてきます。そこで、「データ取得・大量処理はPython」「条件判定・表示・リアルタイム株価はExcel」という役割分担にしました。イメージとしては、JPX ↓信用取引関連PDF↓Python ↓PDFからデータ抽出↓Excelへ整理↓楽天RSS↓リアルタイム株価などを取得↓Excel関数で条件判定↓スクリーニング↓売買候補を通知という流れです。この方法なら、Pythonだけで全部作る必要もありません。Excelの使いやすさを残したまま、Pythonの自動処理能力を利用できます。なぜ「制度信用倍率」を取得したかったのか今回、特にこだわったのが制度信用倍率です。信用取引には大きく、制度信用取引一般信用取引があります。JPXもこの2つを別制度として説明しています。制度信用取引は取引所が選定した銘柄が対象となる一方、一般信用取引は証券会社との間で条件が決まる仕組みです。そのため、一般信用と制度信用を単純に合算した数字ではなく、制度信用側の需給を見たいという目的がありました。そこで、JPXが公開している信用取引関連データを取得して、Excel側で利用できるようにしました。JPXでは銘柄別信用取引残高などのデータが公開されており、日々更新されています。今回作ったPythonプログラムでできること今回のプログラムでは、単純にPDFをダウンロードするだけではありません。大きく分けると、① JPXのページを開くSeleniumを使ってJPXのページへアクセスします。② PDFのURLを探すページ内のPDFリンクを取得します。③ PDFをダウンロード見つけたPDFをローカルのフォルダに保存します。④ PDFを読み込むpdfplumberを使ってPDFの表を抽出します。⑤ Excelへ書き込むxlwingsを使ってExcelファイルへデータを書き込みます。⑥ 不要な文字を整理PDFから取得したデータには、そのままでは使いにくい文字が含まれることがあります。そこで、不要な文字を削除銘柄コードを抽出不要な行を削除列を整理表示形式を変更などの処理をしています。実際のコードでも正規表現による文字整理を行っています。日付ごとにExcelシートを作る取得したデータは、日付ごとにExcelシートへ保存するようにしました。例えば、06120619062607030710のように、日付を基準にシートを分けます。さらに、すでに同じ日付のシートが存在する場合は、同じデータを何度も処理しないようにしています。この仕組みにしておくと、「毎回全部のPDFを処理する」必要がなくなります。Excel側で制度信用倍率を使う今回のコードでは、ExcelのR列に制度信用倍率を計算しています。基本的な考え方は、O列 ÷ K列です。コード上でも、ws.range(f"R{row}").formula = f"=O{row}/K{row}"としてExcelの数式を設定しています。楽天RSSと組み合わせる今回の仕組みの本当の目的は、ここからです。Pythonで信用取引関連のデータを整理しただけでは、単なるデータベースに近いものです。これを楽天RSSと組み合わせます。例えばExcel上で、制度信用倍率+現在株価+始値+高値+安値+出来高+RSI+移動平均などを組み合わせます。さらにExcel関数で、条件Aを満たすAND条件Bを満たすAND条件Cを満たすAND制度信用倍率が○倍以下のような判定を作ります。すると、「今、自分が設定した条件を満たしている銘柄」を自動的に表示できます。自動で「売買通知」を出すこともできる例えば、株価 > 25日移動平均出来高 > 過去平均RSI < 30制度信用倍率 < ○倍という条件を設定したとします。Excel関数を使って、条件一致となった場合に、★★★ 買い候補 ★★★などと表示させることができます。さらに、Excelの条件付き書式などを利用すれば、赤色表示黄色表示アラート表示特定セルへの表示なども可能です。つまり、Python=データ収集・大量処理楽天RSS=リアルタイム情報Excel=条件判定・表示という組み合わせです。この方法のメリット① 自分だけのスクリーニングを作れる証券会社が用意したスクリーナーだけではなく、「自分が重要だと思う条件」を自由に組み合わせることができます。② 大量の銘柄を人間が調べなくていい例えば数千銘柄を、「信用倍率は?」「出来高は?」「株価は?」と一つずつ確認するのは大変です。Pythonで処理すれば、大量のデータをまとめて処理できます。③ Excelを使えるPythonが苦手でも、「最終的な条件判定はExcel」という構成にできます。Excel関数が使える人なら、スクリーニング条件を後から変更することも比較的簡単です。④ 自分の投資ルールを数値化できるここが個人的には一番大きなメリットだと思っています。例えば、「なんとなく信用倍率が低い銘柄が良さそう」ではなく、制度信用倍率↓過去データ↓株価変動↓勝率というように、データを蓄積して検証できます。便利な一方で、いくつか注意があります。Pythonが動けば自動的に必ず儲かるわけではありません。自動化できるのは、データ収集や条件判定の作業です。「この条件なら株価が上がる」ということまで保証してくれるわけではありません。スクリーニング条件そのものが悪ければ、非常に高速に「間違った銘柄」を探すことになります。制度信用倍率だけで判断しない制度信用倍率はあくまで需給を見るための一つの材料です。株価は、決算業績為替金利市場全体材料出来高機関投資家の売買信用取引以外の需給など、多くの要因で動きます。そのため、「制度信用倍率が低い=株価が上がる」という単純な関係ではありません。JPXのデータ形式変更にも注意今回のプログラムは、JPXのページやPDFの構造を前提として作っています。WebサイトやPDFのフォーマットが変更されると、PDFを見つけられない表を正しく取得できない列がずれるExcelの加工処理が失敗するといった問題が発生する可能性があります。実際、コードではPDFの構造を前提として表を抽出しています。まとめ今回作った仕組みは、JPX ↓Python↓信用取引データ取得↓Excelへ整理↓楽天RSS ↓リアルタイム株価↓Excel関数 ↓独自スクリーニング↓売買候補を通知というものです。Pythonだけですべてを作るのではなく、Pythonの「大量処理」Excelの「自由な計算・表示」楽天RSSの「リアルタイム株価情報」を組み合わせることで、それぞれの得意分野を利用しています。株式投資の自動化に興味がある方は、いきなり完全自動売買を目指すより、「まずはデータ取得を自動化する」↓「次にスクリーニングを自動化する」↓「最後に通知を自動化する」という順番で作っていくと、仕組みを理解しながら発展させやすいと思います。今回のような仕組みは、あくまで投資判断を補助するためのものです。自動化したからといって利益が保証されるものではないので、過去データによる検証や実際の相場での確認を行いながら、自分に合った条件を作っていくことが重要です。光触媒より便利な『CT触媒フェイクグリーン エクリア』( 卓上 ミニ 消臭 空気清浄 防臭 防汚 抗菌 おしゃれ リアル インテリア ガラス瓶 多肉植物 寄せ植え トイレ 玄関 造花 人工観葉植物 置物 アーティフィシャルグリーン プレゼント おすすめ )
2026.09.29
コメント(0)

本日は、日々のメッセージやり取りがもっと楽しく、ほっこり和む新作LINEスタンプ「ほのぼの日常キャラスタンプ」を作りましたのでご紹介します。■ 制作のエピソード・成り立ち「気兼ねなく使えて、相手も自分もほっと癒やされるようなスタンプを作りたい!」という思いから、このキャラクターが誕生しました。友人や家族、職場の同僚とLINEをしていると、「かしこまりすぎず、でも失礼のない丁寧さを伝えたい」「今のちょっとした感情(『神!』『尊い…』『しんどい』など)をひと目で伝えたい」と思う瞬間があるかと思います。そこで、ゆるくて愛らしい丸っこいキャラクターに、日常会話で本当によく使うフレーズを詰め込みました。表情や文字の配置を調整し、画面越しでも優しさと親しみやすさが伝わるデザインに仕上げています。■ スタンプの魅力&おすすめポイント使いやすさバツグンの厳選36フレーズ! 「OK」「了解です」「ありがとうございます」「お疲れ様です」といった定番の挨拶から、「尊い…」「神!」「限界です」「今むかってます!」などのリアルな感情表現まで網羅。これひとつで毎日の会話がスムーズに完結します絶妙なゆるさと癒やしの表情 主張しすぎないシンプルで愛らしいタッチなので、送られた相手も思わずふっと笑顔になってしまうこと間違いなしです。読みやすい大きめテキスト メッセージの視認性にもこだわり、パッと見てすぐに意味が伝わるフォント配置にしています。■ どんな時に使えるか・朝晩の定期連絡に:「おはよう」「おやすみ」「お疲れ様です」で1日を気持ちよくスタート&リセット・約束や待ち合わせのときに:「今どこ?」「今むかってます!」「いつ空いてる?」でスムーズに連絡・推し活や趣味のトークに:「尊い…」「神!」「最高!」「泣いた」で感動を・ちょっと疲れた時の弱音に:「しんどい」「限界です」「チーン…」でゆるく甘える日常のあらゆるシーンにそっと寄り添い、会話をあたたかく彩ってくれます。■ スタンプのご購入はこちらから!下記のLINE STOREリンクよりダウンロードいただけますぜひお手元のLINEにお迎えして、毎日のトークでたくさん使ってみてください👉 「ほのぼの日常キャラスタンプ」を購入する(LINE STORE)LINE会話が、もっと楽しくあたたかいものになりますように光触媒より便利な『CT触媒フェイクグリーン エクリア』( 卓上 ミニ 消臭 空気清浄 防臭 防汚 抗菌 おしゃれ リアル インテリア ガラス瓶 多肉植物 寄せ植え トイレ 玄関 造花 人工観葉植物 置物 アーティフィシャルグリーン プレゼント おすすめ )
2026.09.13
コメント(0)

エクセルで株価をリアルタイム監視していて、「上限を超えたら」「下限を割ったら」「取得単価を上回ったら」といったタイミングでWindowsの通知(トースト通知)を鳴らして知らせてくれる仕組みを、VBAだけで作ってみました。株価のリアルタイム取得には、私の場合は楽天証券の「楽天RSS」を使っています。楽天RSSはExcelのセルに数式として株価を差し込んでくれるアドインで、証券会社が無料で提供しているツールとしては広く使われているものです。ただ、今回の通知の仕組み自体は楽天RSS専用というわけではなく、「セルの値がリアルタイムで自動更新される数式(RTD関数など)」であれば、他の証券会社のツールでも同じ考え方で応用できるはずです。外部ツールやアドインを使わず、Excel VBA + Windows標準のPowerShellだけで完結させているので、同じように「エクセルで条件に合ったら通知したい」という方の参考になればと思い、作る過程で躓いたポイントも含めてまとめます。全体の仕組みやっていることはシンプルで、大きく3つのパーツに分かれています。監視処理:シートの数値を定期的にチェックし、条件(上限超え・下限割れ・取得単価超えなど)に合致しているか判定する通知処理:条件に合致したらWindowsの「トースト通知」(画面右下に出るポップアップ)を表示する重複防止:一度通知したら再度同じ条件で通知が連発しないように状態を記憶するなぜ「Windowsのトースト通知」なのかExcelで通知を出す方法としては、MsgBoxでポップアップを出したり、セルの色を変えたり、Application.StatusBarにメッセージを表示したりと、VBA単体で完結する方法もいくつかあります。ただ、これらはすべてExcelの画面自体がフォアグラウンドに出ていないと気づけないという共通の弱点があります。他の作業をしていて別のウィンドウに切り替えていたり、Excelを最小化していたりすると、画面内に出ている通知には全く気づけません。株価監視のように「いつ条件に合致するかわからないので、他の作業をしながら放置しておきたい」という使い方をする場合、これでは実用性がありませんでした。そこで採用したのが、Windows標準のトースト通知(画面右下に出る、あのポップアップ)です。これはExcelのウィンドウではなくOS側の仕組みとして表示されるため、Excelを最小化していても他のアプリを全画面で使っていてもExcelがバックグラウンドにあっても画面の右下にきちんとポップアップが出てきます。さらに音も鳴らせるので、画面を見ていない状態でも気づきやすくなります。この「Excelの表示状態に依存しない」という点が、MsgBoxなどのVBA標準の通知方法とは違う、今回の仕組みの一番のポイントです。1. 通知を出す部分(トースト通知)VBAには標準でWindowsのトースト通知を出す機能はないので、PowerShellを裏で呼び出して実現しています。Option Explicit' 監視銘柄の価格合致時の通知Sub ShowToastNotification(ByVal Title As String, ByVal Message As String) Dim psContent As String Dim encodedCommand As String Dim psExePath As String psContent = "$AppId = '{1AC14E77-02E7-4E5D-B744-2EB1AE5198B7}\WindowsPowerShell\v1.0\powershell.exe'" & vbCrLf & _ "[Windows.UI.Notifications.ToastNotificationManager, Windows.UI.Notifications, ContentType = WindowsRuntime] | Out-Null" & vbCrLf & _ "[Windows.UI.Notifications.ToastNotification, Windows.UI.Notifications, ContentType = WindowsRuntime] | Out-Null" & vbCrLf & _ "[Windows.Data.Xml.Dom.XmlDocument, Windows.Data.Xml.Dom, ContentType = WindowsRuntime] | Out-Null" & vbCrLf & _ "$template = @""" & vbCrLf & _ "<toast duration='long'>" & vbCrLf & _ " <visual>" & vbCrLf & _ " <binding template='ToastGeneric'>" & vbCrLf & _ " <text>" & Title & "</text>" & vbCrLf & _ " <text>" & Message & "</text>" & vbCrLf & _ " </binding>" & vbCrLf & _ " </visual>" & vbCrLf & _ " <audio src='ms-winsoundevent:Notification.Looping.Alarm2' loop='false'/>" & vbCrLf & _ "</toast>" & vbCrLf & _ """@" & vbCrLf & _ "$xml = New-Object Windows.Data.Xml.Dom.XmlDocument" & vbCrLf & _ "$xml.LoadXml($template)" & vbCrLf & _ "$toast = New-Object Windows.UI.Notifications.ToastNotification $xml" & vbCrLf & _ "[Windows.UI.Notifications.ToastNotificationManager]::CreateToastNotifier($AppId).Show($toast)" encodedCommand = Base64EncodeUTF16LE(psContent) psExePath = Environ("WINDIR") & "\System32\WindowsPowerShell\v1.0\powershell.exe" Shell psExePath & " -WindowStyle Hidden -NoProfile -ExecutionPolicy Bypass -EncodedCommand " & encodedCommand, vbHideEnd Sub' 文字列をUTF-16LEのバイト列に変換してBase64エンコードする' (PowerShellの -EncodedCommand は「UTF-16LE + Base64」形式が仕様のため必須)Private Function Base64EncodeUTF16LE(ByVal sText As String) As String Dim oXML As Object Dim oNode As Object Set oXML = CreateObject("MSXML2.DOMDocument") Set oNode = oXML.createElement("b64") oNode.DataType = "bin.base64" oNode.nodeTypedValue = StrConvToBytes(sText) Base64EncodeUTF16LE = oNode.Text Set oNode = Nothing Set oXML = NothingEnd Function' VBA文字列(内部的にUTF-16LE)を1文字ずつバイト配列に展開するヘルパーPrivate Function StrConvToBytes(ByVal sText As String) As Byte() Dim i As Long Dim charCode As Long Dim bytes() As Byte ReDim bytes(0 To Len(sText) * 2 - 1) For i = 1 To Len(sText) charCode = AscW(Mid(sText, i, 1)) If charCode < 0 Then charCode = charCode + 65536 ' サロゲートペア等の負数対策 bytes((i - 1) * 2) = charCode And &HFF bytes((i - 1) * 2 + 1) = (charCode \ 256) And &HFF Next i StrConvToBytes = bytesEnd FunctioncopyShowToastNotification("タイトル", "本文") という形で呼び出すだけで、Windows標準のトースト通知が表示されます。この部分は汎用パーツなので、どんな条件で呼び出しても使い回せます。2. 監視処理(条件判定)シート側では、Worksheet_Calculateイベントを使って、楽天RSSの関数で値が更新されるたびに全行をチェックする、というやり方にしています。Option Explicit' 行ごとの通知状態を保持する配列 (0=未通知, 1=上限超え通知済み, 2=下限割れ通知済み)Private notifyState(2 To 400) As Integer' 取得単価(J列)がG列を上回った通知の状態を保持する配列 (0=未通知, 1=通知済み)Private notifyStateCost(2 To 400) As IntegerPrivate Sub Worksheet_Calculate() Call CheckAllRowsEnd Sub' 手動でのセル書き換え(数式を介さない変更)を検知するPrivate Sub Worksheet_Change(ByVal Target As Range) Dim watchRange As Range Set watchRange = Application.Intersect(Target, Me.Range("G2:G400,J2:J400")) If Not watchRange Is Nothing Then Call CheckAllRows End IfEnd SubPrivate Sub CheckAllRows() Dim r As Long Dim currentVal As Variant Dim upperVal As Variant Dim lowerVal As Variant Dim costVal As Variant ' J列 取得単価 Dim baseVal As Variant ' G列 比較対象値 Dim code As String Dim name As String Dim msg As String For r = 2 To 400 currentVal = Me.Cells(r, "E").Value ' E列: 現在値 upperVal = Me.Cells(r, "C").Value ' C列: 上限 lowerVal = Me.Cells(r, "D").Value ' D列: 下限 If IsEmpty(Me.Cells(r, "E").Value) Or IsEmpty(Me.Cells(r, "C").Value) Or IsEmpty(Me.Cells(r, "D").Value) Then GoTo ContinueLoop End If If IsError(currentVal) Or IsError(upperVal) Or IsError(lowerVal) Then GoTo ContinueLoop End If If Not IsNumeric(currentVal) Or Not IsNumeric(upperVal) Or Not IsNumeric(lowerVal) Then GoTo ContinueLoop End If If currentVal = 0 Then GoTo ContinueLoop End If code = CStr(Me.Cells(r, "A").Value) ' A列: 銘柄コード name = CStr(Me.Cells(r, "B").Value) ' B列: 銘柄名 If currentVal > upperVal Then If notifyState(r) <> 1 Then msg = code & " " & name & vbCrLf & "現在値: " & currentVal & " (上限 " & upperVal & " を超過)" Call ShowToastNotification("上限超過アラート", msg) notifyState(r) = 1 End If ElseIf currentVal < lowerVal Then If notifyState(r) <> 2 Then msg = code & " " & name & vbCrLf & "現在値: " & currentVal & " (下限 " & lowerVal & " を下回り)" Call ShowToastNotification("下限割れアラート", msg) notifyState(r) = 2 End If Else notifyState(r) = 0 ' 範囲内に戻ったら通知状態をリセット End If ' 取得単価(J列)がG列の値を上回ったら通知 costVal = Me.Cells(r, "J").Value baseVal = Me.Cells(r, "G").Value If IsError(costVal) Or IsError(baseVal) Then GoTo ContinueLoop If IsEmpty(Me.Cells(r, "J").Value) Or IsEmpty(Me.Cells(r, "G").Value) Then GoTo ContinueLoop If Not IsNumeric(costVal) Or Not IsNumeric(baseVal) Then GoTo ContinueLoop If costVal > baseVal Then If notifyStateCost(r) <> 1 Then msg = code & " " & name & vbCrLf & "取得単価: " & costVal & " が基準値 " & baseVal & " を上回りました" Call ShowToastNotification("取得単価超過アラート", msg) notifyStateCost(r) = 1 End If Else notifyStateCost(r) = 0 End If ContinueLoop: Next rEnd Subcopyポイントは、条件ごとに別々の状態管理配列(notifyState、notifyStateCost)を持たせていることです。こうすることで「上限超過」と「取得単価超過」が同じ行で同時に起きても、それぞれ独立してきちんと通知されます。躓いたポイント・注意点まとめ実際に動かしてみるまでわからなかった落とし穴がいくつもあったので、同じことをやろうとする方は事前に知っておくと時間の節約になるかと思います。① Worksheet_Calculateは「数式の再計算」でしか発火しないこれが一番のハマりどころでした。株価のように楽天RSSの関数で自動更新される列はWorksheet_Calculateで検知できますが、セルに直接数値を手入力しただけでは発火しません。数式を介さないただの値の書き換えは「再計算」として扱われないためです。手入力の列(取得単価など)も監視したい場合は、Worksheet_Changeイベントを別途用意し、Application.Intersectで対象範囲かどうかを判定する必要があります。② 楽天RSSが返す#N/Aでループが丸ごと停止する楽天RSSの関数は通信状況によって一時的に#N/Aのようなエラー値を返すことがあります。これを何も考えずに数値と比較すると「型が一致しません(実行時エラー13)」が発生し、その回のループ処理全体が止まって以降の行が一切判定されなくなるという厄介な症状が出ました。対策は単純で、比較の前に必ずIsError()でエラー値かどうかを弾いてからIsNumeric()でチェックすることです。If IsError(currentVal) Or IsError(upperVal) Or IsError(lowerVal) Then GoTo ContinueLoopEnd IfIf Not IsNumeric(currentVal) Or Not IsNumeric(upperVal) Or Not IsNumeric(lowerVal) Then GoTo ContinueLoopEnd Ifcopy③ Shell関数で「実行時エラー53(ファイルが見つかりません)」が出るPowerShellをShell "powershell.exe ..."のように相対パスで呼び出すと、Excelのカレントディレクトリ(OneDriveの同期フォルダなど)の状態によっては実行ファイルが見つからずエラー53になることがありました。Environ("WINDIR")でシステムディレクトリを取得し、フルパスで指定することで解消しました。psExePath = Environ("WINDIR") & "\System32\WindowsPowerShell\v1.0\powershell.exe"copy④ PowerShellへのコマンド受け渡しはUTF-16LE + Base64が必須トースト通知の中身(タイトルや本文)に日本語を含める場合、-EncodedCommandパラメータを使うのが安定していますが、これは仕様上「UTF-16LEでエンコードした文字列をBase64化したもの」しか受け付けません。単純にShift-JISやUTF-8でエンコードすると文字化けしたり実行に失敗したりします。VBAの文字列は内部的にUTF-16LEなので、1文字ずつAscWで文字コードを取り出し、下位バイト・上位バイトの順にバイト配列へ詰め直すことで対応しました(サロゲートペアで負の値になるケースの補正も必要です)。⑤ 通知の重複を防ぐには「状態」を記憶させるWorksheet_Calculateは値が更新されるたびに何度も呼ばれるため、何も対策しないと条件を満たしている間ずっと通知が鳴り続けてしまいます。行ごとに「通知済みかどうか」を配列で保持し、条件を満たした瞬間だけ通知して状態を1(または2)にする条件から外れたら状態を0に戻す(次回また条件を満たしたら再通知できるようにする)という形にすることで、「一度だけ通知→範囲に戻ったらリセット→また外れたら再通知」という自然な挙動になります。条件が複数ある場合は、条件ごとに別の状態配列を用意するのがおすすめです(1つの配列で使い回すと、片方の条件のリセットがもう片方の通知状態まで巻き込んで消してしまうことがあります)。まとめExcel VBA単体でも、PowerShell経由でWindowsのネイティブなトースト通知を鳴らすことができるMsgBoxなどのExcel内の通知と違い、最小化中やバックグラウンドでも画面右下に表示されるため気づき逃しにくいリアルタイム更新される数式列はWorksheet_Calculate、手入力の列はWorksheet_Changeで監視する必要がある(発火条件が違う)外部関数のエラー値(#N/Aなど)は必ずIsErrorで弾いてから数値比較する通知の重複防止には行ごと・条件ごとの状態管理配列を用意する同じように「エクセルで指定した値になったら知らせてほしい」という方の参考になれば幸いです。この記事はExcel/VBAの実装メモを元にまとめたものです。実際にご自身の環境で使う際は、シート名・セル位置・列の意味などをご自身のブックに合わせて調整してください。光触媒より便利な『CT触媒フェイクグリーン エクリア』( 卓上 ミニ 消臭 空気清浄 防臭 防汚 抗菌 おしゃれ リアル インテリア ガラス瓶 多肉植物 寄せ植え トイレ 玄関 造花 人工観葉植物 置物 アーティフィシャルグリーン プレゼント おすすめ )
2026.09.12
コメント(0)
全3件 (3件中 1-3件目)
1