N/C比率1以上=スクリプト
2025-03-06 US銘柄とかもスクリーニングできるのは便利だ。Tradingview
まあ、あまりに極端なスクリーニング過ぎるけど。
時価総額スクリーニング逆のほうがいいかな。
2025-03-06 Tradingviewでのスクリーニング。
これってSMA(100)>価格みたいにチャートで絞ることもできそう。
用は便利っぽい気がする。
“流動資産”、”負債合計”で絞れないのでマニュアル追加で目視って事にはなるけど。
N/C比率のスクリプトは作っていないから目視でだいたいでってことにとりあえずはなるんだけど。
2025-03-06 スクリーニング条件若干変更。超厳しめ。
用は営業利益率の条件追加。
で、スクリプト実行でNC比率を出す。
絞るとこれが残る。
銘柄コード | 会社名 | 流動資産-負債 | NC比率 |
8772 | アサックス | 38504 | 1.59 |
株探で調査。配当増やせるはずと思う。
チャートは微妙。
2024-07-22とりあえずシートに貼り付けた後の処理をスクリプトで自動にした。
024-07-22とりあえずシートに貼り付けた後の処理をスクリプトで自動にした。
要は比較日を設定して、前回のデータを突合することにした。
メモはそのまま同期、新規は太字でわかるように。
流動資産-負債 、NC比率 とかの計算は自動、ソートも自動、背景色も移行。
GASを使います。
function onOpen() {
var ui = SpreadsheetApp.getUi();
// メニューを追加
ui.createMenu('Custom Menu')
.addItem('Execute Tasks', 'myFunction')
.addToUi();
}
function myFunction() {
freezeRowsAndColumns();
addColumnsAndCalculate();
sortData();
formatColumnHeadersAndData();
copyMemoAndBackground();
highlightNewEntries();
}
function freezeRowsAndColumns() {
// アクティブなスプレッドシートを取得
var ss = SpreadsheetApp.getActiveSpreadsheet();
// アクティブなシートを取得
var sheet = ss.getActiveSheet();
// 行を固定(この場合は3行目までを固定)
sheet.setFrozenRows(2);
// 列を固定(この場合は3列目までを固定)
sheet.setFrozenColumns(3);
}
function addColumnsAndCalculate() {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
var lastRow = sheet.getLastRow();
var lastColumn = sheet.getLastColumn();
// ヘッダー行を取得
var headers = sheet.getRange(2, 1, 1, lastColumn).getValues()[0];
// 各カラムのインデックスを取得
var liabilitiesCol = headers.indexOf('負債') + 1;
var currentAssetsCol = headers.indexOf('流動資産') + 1;
var marketValueCol = headers.indexOf('時価総額') + 1;
if (liabilitiesCol === 0 || currentAssetsCol === 0 || marketValueCol === 0) {
Logger.log("必要なカラムが見つかりません。");
return;
}
// 新しいカラム見出しの追加
sheet.insertColumnAfter(lastColumn);
sheet.insertColumnAfter(lastColumn + 1);
sheet.getRange(2, lastColumn + 1).setValue("流動資産-負債");
sheet.getRange(2, lastColumn + 2).setValue("NC比率");
// 各行に対して計算を実行
for (var i = 3; i <= lastRow; i++) { var liabilities = sheet.getRange(i, liabilitiesCol).getValue(); var currentAssets = sheet.getRange(i, currentAssetsCol).getValue(); var marketValue = sheet.getRange(i, marketValueCol).getValue(); if (typeof liabilities === 'number' && typeof currentAssets === 'number' && typeof marketValue === 'number' && marketValue !== 0) { var netCurrentAssets = currentAssets - liabilities; var ncRatio = netCurrentAssets / marketValue; sheet.getRange(i, lastColumn + 1).setValue(netCurrentAssets); sheet.getRange(i, lastColumn + 2).setValue(ncRatio); sheet.getRange(i, lastColumn + 2).setNumberFormat("0.00"); // 小数点以下2桁のフォーマットを適用 } else { sheet.getRange(i, lastColumn + 1).setValue("#NUM!"); sheet.getRange(i, lastColumn + 2).setValue("#NUM!"); } } } function sortData() { var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); var lastRow = sheet.getLastRow(); var lastColumn = sheet.getLastColumn(); // ヘッダー行を取得 var headers = sheet.getRange(2, 1, 1, lastColumn).getValues()[0]; // 各カラムのインデックスを取得 var ncRatioCol = headers.indexOf('NC比率') + 1; var perCol = headers.indexOf('PER(会予)') + 1; if (ncRatioCol === 0 || perCol === 0) { Logger.log("必要なカラムが見つかりません。"); return; } // ソート範囲を取得 var range = sheet.getRange(3, 1, lastRow - 2, lastColumn); // ソート実行 range.sort([{ column: ncRatioCol, ascending: false }, { column: perCol, ascending: true }]); } function formatColumnHeadersAndData() { var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); var lastRow = sheet.getLastRow(); var lastColumn = sheet.getLastColumn(); // ヘッダー行を取得 var headers = sheet.getRange(2, 1, 1, lastColumn).getValues()[0]; // カラムのインデックスを取得 var marketValueCol = headers.indexOf('時価総額') + 1; var liabilitiesCol = headers.indexOf('負債') + 1; var currentAssetsCol = headers.indexOf('流動資産') + 1; var netCurrentAssetsCol = headers.indexOf('流動資産-負債') + 1; var ncRatioCol = headers.indexOf('NC比率') + 1; // 緑色にするカラム if (marketValueCol > 0) {
sheet.getRange(2, marketValueCol, lastRow - 1, 1).setFontColor("green");
}
if (liabilitiesCol > 0) {
sheet.getRange(2, liabilitiesCol, lastRow - 1, 1).setFontColor("green");
}
if (currentAssetsCol > 0) {
sheet.getRange(2, currentAssetsCol, lastRow - 1, 1).setFontColor("green");
}
// 赤色にするカラム
if (netCurrentAssetsCol > 0) {
sheet.getRange(2, netCurrentAssetsCol, lastRow - 1, 1).setFontColor("red");
}
if (ncRatioCol > 0) {
sheet.getRange(2, ncRatioCol, lastRow - 1, 1).setFontColor("red");
}
}
function copyMemoAndBackground() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var activeSheet = ss.getActiveSheet();
var comparisonSheetName = activeSheet.getRange("C1").getValue();
var comparisonSheet = ss.getSheetByName(comparisonSheetName);
if (!comparisonSheet) {
Logger.log("比較するタブが見つかりません。");
return;
}
var lastRowActive = activeSheet.getLastRow();
var lastRowComparison = comparisonSheet.getLastRow();
var lastColumnActive = activeSheet.getLastColumn();
// アクティブなタブに「メモ」列を追加
activeSheet.insertColumnAfter(lastColumnActive);
activeSheet.getRange(2, lastColumnActive + 1).setValue("メモ");
// アクティブなタブと比較タブの会社名の列を取得
var activeCompanyNames = activeSheet.getRange(3, 1, lastRowActive - 2, 1).getValues().flat();
var comparisonCompanyNames = comparisonSheet.getRange(3, 1, lastRowComparison - 2, 1).getValues().flat();
for (var i = 0; i < activeCompanyNames.length; i++) { var activeCompanyName = activeCompanyNames[i]; var comparisonIndex = comparisonCompanyNames.indexOf(activeCompanyName); if (comparisonIndex > -1) {
// 比較タブからメモをコピー
var memo = comparisonSheet.getRange(comparisonIndex + 3, lastColumnActive + 1).getValue();
activeSheet.getRange(i + 3, lastColumnActive + 1).setValue(memo);
// 比較タブの背景色をコピー
var bgColor = comparisonSheet.getRange(comparisonIndex + 3, 1, 1, comparisonSheet.getLastColumn()).getBackground();
activeSheet.getRange(i + 3, 1, 1, activeSheet.getLastColumn()).setBackground(bgColor);
}
}
}
function highlightNewEntries() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var activeSheet = ss.getActiveSheet();
var comparisonSheetName = activeSheet.getRange("C1").getValue();
var comparisonSheet = ss.getSheetByName(comparisonSheetName);
if (!comparisonSheet) {
Logger.log("比較するタブが見つかりません。");
return;
}
var lastRowActive = activeSheet.getLastRow();
var lastRowComparison = comparisonSheet.getLastRow();
// アクティブなタブと比較タブの会社名の列を取得
var activeCompanyNames = activeSheet.getRange(3, 1, lastRowActive - 2, 1).getValues().flat();
var comparisonCompanyNames = comparisonSheet.getRange(3, 1, lastRowComparison - 2, 1).getValues().flat();
for (var i = 0; i < activeCompanyNames.length; i++) {
var activeCompanyName = activeCompanyNames[i];
var comparisonIndex = comparisonCompanyNames.indexOf(activeCompanyName);
if (comparisonIndex === -1) {
// 比較タブに存在しない会社名の行を太字にする
activeSheet.getRange(i + 3, 1, 1, activeSheet.getLastColumn()).setFontWeight("bold");
}
}
}
2024-07-11 、2024-07-15本のメモ

2024-07-19追加メモ
100個のサイコロ中、1個が絶対6が出るいかさまサイコロ。
1つ選んで6が出た。
6が出たんだけど、それが「いかさまサイコロ」であったときの確率は、
「いかさまサイコロで6が出る確率」*「いかさまサイコロを選ぶ確率」/ 「全体の6が出る確率」
「全体の6が出る確率」=「いかさまサイコロ」で6が出る確率*「いかさまサイコロ」を選ぶ確率 + 「正常サイコロ」で6が出る確率 * 「正常サイコロ」を選ぶ確率
2024-06-24 データをスプレッドシートに張り付け後。
手動で、
流動資産-負債 NC比率
を計算。
すべて選択。
データ > 範囲を並べ替え > 範囲の並び替え詳細オプション >
データにヘッダー行が・・・をチェック > 並び替え条件(NC比率) >
降順チェック > 並び替え
例えば0.8とかまで残して削除。
次に、PERの昇順で並び替え。
とか。
2024-06-21 とりあえず動画を見た時のメモ
割安小型成長株。
大型株はTOPIXを上回れないのでは?
PER 重視
決算業績推移、修正一株益
つまり、265円が基準、けど、PER11.7倍
けど株価は3102円だから、265*11.7倍になっている。
ネットキャッシュ比率。
=ネットキャッシュ(現金みたいなもの)/ 時価総額
要は本当に割安か?PERだけでは本当か分からない。
要は本当に現金持っているのか?
スクリーニング。
・PER 10b倍以下
・PBR(固定資産入っちゃう) 1倍以下
・(流動資産 > 負債)=ネットキャッシュ
・(ネットキャッシュ > 時価総額)= NC比率 1以上
・時価総額 500億円以下
つまり、
NC比率1は、ほぼ現金(100万円)が入った財布を、100万円で買える状態。
財布の価値はプラスになっている。
買った後は、”増配”、”自社株買い”=株価上昇する要因。を期待。
これで検索した結果。
検索結果は127件あります。売上高の上位100件を表示します。
との事。
このデータをGsheetに張り付け。
手計算。
追加は、
流動資産-負債
NC比率 = ”流動資産-負債” / 時価総額
NC比率順にソートして使う。つまり1以上は超割安。
次に、株探、検索、ニュース、決算速報、一番上の決算
事例はプロパスト3236
決算単信PDF
中身。
流動資産:一年以内に現金化できる。
これが276億=バフェットコードにもいきなり出ている。
負債は、流動(すぐに返す)と固定を合わせた額がバフェットコードに出る。それ以上に現金みたいなものが多くある。
それなのに株価がそれより安い。っていう話のようだ。
最終的にここから。
配当金どうなる?自社株買いしそうか?
これを見ると、
配当金を増やしてきている。まだ利回りは1.96%だから、もっと増やしそう。
っていうか、隣の一株当たりの利益は45円あるのに、4円しか配当出していない。という話のようだ。
チャートは好み。