徒然日記

徒然なるままに書いていきます 固めのものからゆるい日常まで書きたいものを

大学生から始める投資信託

大学生の皆さん,20年近くも生きていればお金の大事さが分かっていると思います.
でもお金はそのままじゃ増えません.運用せねば増えないのです.

それだったらFXで一発当てたる!!なんてのも悪くないかもしれませんが,難しそうだし全額溶かして「ぬ」と「ね」の区別がつかなそうな顔を晒したくはないはず.

f:id:cobaltic:20191228231509j:plain
FXで有り金全部溶かした顔


じゃあ難しいこと考えずにとりあえず将来に備えてお金を増やしたいって方にお勧めしたいのが投資信託です.
しかも大学生の皆さんはバリバリ働いてて投資の知識をたくさん持ってる年上の人たちより有利な条件があります.それが時間です

暇とかってことじゃなく純粋に残りの人生の時間です.老後の資金を形成しようとするなら40代の人と比べて圧倒的な時間的アドバンテージがあります.初めにも言いましたが,お金は運用せねば増えません.しかし時間をかければかけるほど増える確率も増える量も上昇していきます.
あの誰もが知る天才アインシュタインでさえも「人類最大の発明は複利だ」なんて言っています.

時間をじっくりかけて運用powerを使えば文字通り時は金なりです.
時間という触媒でお金にお金を増やしてもらいましょう

僕自身も大学生で投資信託とか良く分からなかった(むしろ胡散臭いと思ってた)のですが,金融意識の高い兄に勧められるまま投資信託を一年半前に始めました.
つまり投資信託歴一年半です,といっても全くやってる意識はないです.毎月お金が口座から引き落とされてたまにいくらになってるかを確認しにいくだけですので.それでもこれはいいものだ…やるとやらないとじゃ全然違うし大学生こそやるべきだ!!と思ったので今回筆を取った次第です.

まあ前置きはこの程度にして本題に入りましょう.

そもそも投資信託って?

投資信託(ファンド)」とは、一言でいえば「投資家から集めたお金をひとつの大きな資金としてまとめ、運用の専門家が株式や債券などに投資・運用する商品で、その運用成果が投資家それぞれの投資額に応じて分配される仕組みの金融商品」です。

そもそも投資信託とは? - 投資信託協会
要するにお金を増やすのが得意な人にお金を預けて増やしてもらおうってことですね.それだけです.



投資信託のメリット・デメリット

調べればたくさん出てくると思いますが,個人的に思うのは気軽に低額でも始められることが一番だと思います.
デメリットとしては元本割れ(投資した額よりも少ない金額しか手元に返ってこないこと)のリスクは避けられないということです.
詳しくは投資信託のメリットとデメリット | 投資信託を学ぶ | 投資信託 | 楽天証券

じゃあ増えるか減るか分からないなんてギャンブルじゃんなんて思った方もいるかもしれませんが,そんなことはないです.
というより長期的な投資ならば限りなく高い可能性でお金を増やせます.
実例として日経平均株価(日本の代表的な企業達の株価の平均的なもの)の2000年からの推移を見てみましょう.

f:id:cobaltic:20191229005620p:plain
日経平均株価の推移
日本は失われた20年なんていわれるほどの不景気でしたが,それでも長期的に見れば確実に成長はしているのです.
ましてや世界全体で見れば世界は確実に成長していっています.(オススメ本:
FACTFULNESS(ファクトフルネス)10の思い込みを乗り越え、データを基に世界を正しく見る習慣
『FACTFULNESS』ブックレビュー - 徒然日記




つまり僕がお勧めしているのは すぐに遊ぶ金が欲しいから投資ではなく,将来に備えて数十年スパンを見据えて今から投資を始める ということです. 

宣伝を少し挟むとお金そのものについて考えてみるのも実は面白いです.
現代貨幣理論(MMT)を学べば分かる「財政健全化」という言葉の不健全さ - 徒然日記



なぜ投資信託なのか?

それは国が投資をしやすいように制度を整えてくれているからなんです.
本来は投資で得たお金には20.315%の税金がかかるはずですが,NISAという制度を活用すると非課税になります.つみたてNISAは年間40万円以内で20年間,NISAは年間120万円以内で5年間という制約付きになります.
つみたてNISA(積立NISA)とは?メリットは?やさしく解説します|たあんと
NISAとは? : 金融庁

そして特に積立NISAは初心者にお勧めできます.積立NISAの投資先は金融庁が長期の資産形成に向いていると判断した優良な166本(2019年10月1日付)に絞られています.そのため初心者であっても,積立NISAで投資信託を始めれば大きな失敗をすることはないでしょう.



実際の投資信託の成果

ここまでさんざん投資信託に関する話をしてきましたが,実際の所どうなのって話ですよね.
といっても前述したように僕自身どこに投資したらいいとかは詳しいわけではないので,金融意識の高い兄から教えてもらった銘柄をやっているだけですけれど,一年半の成果を紹介したいと思います.

SBI証券「野村つみたて外国株投信」

これは兄に勧められるがまま選んだので,当時はなぜこの銘柄なのか良く分かっていませんでした.
ただ今回この記事を書くにあたって調べてみたら
①世界中に投資をするので低リスク ②信託報酬(手数料的なの)がすごく低い のがよさそうです.
野村つみたて外国株投信の評価、世界分散投資でつみたてNISAにおすすめ | 1億人の投資術

これは月5000円ずつ自動引き落としで投資していて,トータルではこんな感じです.
f:id:cobaltic:20191229011147p:plain
月5000円だから年6万のはずなのに,なぜ今年は55000円しか投資されていないのか!
それは5000円すら銀行口座になくて引き落とされなかった月があったからです…
あまりにも寂しい懐事情はさておき,初年はマイナスでしたが今年はその分も取り返してくれてトータルで+11737円ということですね.
今年だけで見れば+15679円です.10年後とかどれだけ増えてるか楽しみです.

トラノコ「大トラ」

これは自分で始めたやつですね.個人的にいいと思ったのは以下の三つ.
①23歳の誕生日を迎えるまで手数料が無料 ②投資のスタイルで簡単に選べる ③おつり投資という気軽なシステム

①これはまさしく学生がやるべき理由ですね.手数料無料は素晴らしすぎます.
②安定重視の「小トラ」,バランス重視の「中トラ」,リターン重視の「大トラ」の三パターンから選ぶだけなので初心者でも簡単に始められます.
③クレカとかスイカに連動させて一定額以下のおつりを投資に回せるシステムなので気軽に投資が出来ます.

f:id:cobaltic:20191229021920p:plain
投資画面

で肝心の成果です.まだ初めて4か月ですけど結構順調そうです.

4か月で計13264円投資して今は14053円になってるので+789円ですね.
額で言えば微増ですが,この短期間でそもそも投資額が少ないわりにラーメン一杯分ぐらい増えたと考えたらまあいいでしょう.

ちょっとした感想

個人的には銀行口座から直接天引きというのが向いてました.あると使いたくなってしまう人間なので.
投資っていうと堅いイメージがありましたが,
お金を貯めることが苦手な人間こそが投資信託をすべき
なんじゃないかって自分でこの一年ちょいやってて思いました.
確かに,将来引き出したいときにもしかしたら元本割れを起こしているかもしれません.でもその可能性は長期的に見ればかなり低いし,たとえそうだったとしても結構な額が貯まってるのは間違いないです.手元にあると使っちゃうぐらいなら増やしといてもらいましょう.気長に待って知らぬ間に増えてたらいいな~ぐらいの軽い気持ちで投資信託をしていていいと思うんです

あと単純に投資信託やってるって言えたらちょっとカッコよくないですか???

まとめ

・将来が長い学生こそ今から投資信託を始めて貯蓄を作ろう
・学生向けの優待もある
投資信託は気軽に始められる

以上です.この記事を読んで興味を持ってもらえたら幸いです.

[追記]
prime readingで見つけたこの本が分かりやすかったのでオススメです.
難しいことはわかりませんが、お金の増やし方を教えてください!

Twitterで定期的に検索&RTするお狐かわいいbotを自作した話

キツネをこよなく愛する世界の70億人の方々コン!にちは!!
突然ですがこの写真は私が蔵王キツネ村に行った時に撮れた一枚です。
f:id:cobaltic:20190629105829j:plain
んん〜〜 かわいいっ

でも世の中には良いカメラでもっと可愛くて凛々しいお狐の写真を撮ってきてくれる方々がおり、私はそんなキツネを愛する写真家の方々をフォローしております。
するとかわいいお狐の画像が定期的に流れてきて日々Twitterを開くだけで幸せに過ごすことが出来ます。



最高ですね!!!

ちなみに最近まめちゃんを今一番推しております 凛とした可愛さって感じで本当に最高です…

こんなかわいい画像をまとめてるアカウントはないものだろうか…
というわけで調べると出てきますね、画像を保存して我が物顔でツイートしているであろう輩が…

許せねぇ!!!
かわいくて凛々しいお狐の写真を撮ってくれる方々への敬意を払うべきやろがい!!!!

かわいくて凛々しいお狐の写真を撮ってくれる方の嘆きのツイート…
Cheng-Ren🦊 on Twitter: "キツネアイコンの人にフォローされた!と思ってメディア欄見に行ったら転載画像ばっかりだった時の悲しみ"


ということでかわいくて凛々しいお狐画像を定期的にリツイートするbotを製作しました。
フォローするだけでQoLが上がると思います。



ここからは技術的なお話です。



大まかな流れ



0.botアカウントの登録

好きなようにアカウント作りましょう 以上です。

1.botアカウントのAPIkey取得


www.torikun.com

この記事を参考にしました。

どんな理由で作成して運用するのか?みたいな欄では
私はキツネが大好きです。
自動的にかわいいキツネの画像を取得してリツイートするボットを作りたいです。
自分が楽しむだけでなく、たくさんの人に見てもらいたいです。
自動お気に入りや自動フォローなどの機能を作成して、作業をより効率的にしたいです。

google先生に翻訳してもらって
I love foxes.
I want to create a bot that automatically gets a cute fox image and retweets.
Not only I enjoy myself, I want many people to see it.
I want to make functions more efficient by creating functions such as automatic favorites and automatic follow.
と書いておきました。

2.いい感じのコード書きかき

こちらが今回使ったコードになります

import tweepy
import json
#キー設定                                                                                                                                                     
CONSUMER_KEY = 'XXXXX'
CONSUMER_SECRET = 'XXXXX'
ACCESS_TOKEN = 'XXXXX'
ACCESS_SECRET = 'XXXXX'
#APIインスタンスを作成
auth = tweepy.OAuthHandler(CONSUMER_KEY, CONSUMER_SECRET)
auth.set_access_token(ACCESS_TOKEN, ACCESS_SECRET)
api = tweepy.API(auth)
#検索条件部
q = " #蔵王キツネ村 OR #キツネ村 OR #ホンドギツネ OR #北キツネ牧場 , filter:images , exclude:retweets , min_faves:100 " 
count = 1

#検索部 
search_results = api.search(q=q, count=count)
#検索結果表示                                                                                                                                                   
for result in search_results:
    username = result.user._json['screen_name']
    tweet_id = result.id #ツイートのstatusオブジェクトから、ツイートidを取得
    user = result.user.name #ツイートのstatusオブジェクトから、userオブジェクトを取り出し、名前を取得する
    tweet = result.text
    time = result.created_at
    
    print(tweet)
    print(tweet_id)
    print(user)
    print('-------------------')
    
    
    #print(time) 
    #fox_list.append(tweet_id)
    
    url = "https://api.twitter.com/1.1/statuses/retweet/%d.json"%tweet_id
    api.unretweet(tweet_id)
    api.retweet(tweet_id) # retweet実行
    api.create_favorite(tweet_id) #いいね
    print(user)
    print("をいいねしました")
    api.create_friendship(username)
    print("をフォローしました")  

長々と書いてるけど要点だけかいつまむと
#蔵王キツネ村 #キツネ村 #ホンドギツネ #北キツネ牧場
のいずれかのタグを含む画像ツイート(100いいね以上)をリツイートといいねして、投稿者をフォローするプログラムです

製作当初は #キツネ も入れていたのですが日向坂46なるグループがキツネ という新曲をリリースしたせいか、女の人の画像が大量に混入する事態が発生してしまったのでお蔵入り。


参考にした記事たちです
Twitterの検索APIについて - メモ帳の裏の切れ端
【Python】 Tweepyで、ツイート・フォロー・リムーブ・検索・画像投稿する方法をまとめてみた - Qiita
TwitterAPI でツイートを大量に取得。サーバー側エラーも考慮(pythonで) | コード7区


3.定期的に実行する

Pythonで作ったTwittter botをHerokuで定期実行する方法【Windows版】 | クロヤギ
この記事を参考にしたかったのですがどうにもうまくいかなかったので挫折…
タスクスケジューラでいい感じに設定しました。
あとはたまに手動でも動かしていきたいと思います。


改善案としてはハッシュタグが入ってないと検索に引っかからないので、TL取得して画像認識してキツネならRTみたいな感じが理想なんですけど出来るんでしょうか
頑張ってみたいと思います。

野郎三人石川旅Day3

この日は一日中あいにくの雨です。

とりあえず朝風呂。昨日は入るのが遅くて何も見えなかったけど、海望という名に恥じぬオーシャンビュー露天風呂でした。

 

売店でお土産を買って、名残惜しいけどチェックアウトして市内散策へ。

f:id:cobaltic:20190902191131j:image

昨日も見た総湯。

和倉温泉-総湯-


f:id:cobaltic:20190902191148j:image

近くのパン屋でパンを買って


f:id:cobaltic:20190902191054j:image

総湯の足湯に浸かりつつ頂きました。

足湯に浸かりつつ立て替えていた諸経費を清算して絶望。

 

総湯の入り口にある返却式コインロッカーに荷物を預けて身軽になったし、雨脚が弱まったので市内散策へ。
f:id:cobaltic:20190902191111j:image

湯ったりパークにて


f:id:cobaltic:20190902191100j:image

オーシャンビュー足湯。

 

さらに市内散策。
f:id:cobaltic:20190902191126j:image

こういう感じ非常に良い。

 


f:id:cobaltic:20190902191044j:image

 

近くの店で生卵を買って、温泉卵作り🥚
f:id:cobaltic:20190902191145j:image

 


f:id:cobaltic:20190902191122j:image

美味いとか以前にとにかく熱い。美味いけど。

 

さらにぶらっとして
f:id:cobaltic:20190902191105j:image

能登ミルクファクトリー。

ジェラートカフェ 能登ミルクファクトリー|金沢の観光スポット・イベント案内「金沢日和」
f:id:cobaltic:20190902191156j:image

トリプル(500円)

天然塩 能登ミルク パイナップルシャーベット

全部超うまい。絶対行くべし。

 

店の外ではBGMが流れてて入るときは「マッチとピーナッツ」で出たときは「三日月サンセット」

もしかしてずっとサカナクション流れてるんじゃないか??それも含めて店内も外観ももちろんアイスもセンスがいい。

 

そして再び総湯。
f:id:cobaltic:20190902191049j:image

入浴料はまさかの440円。

ひたすら休憩室でトランプしたりダラダラしてました。

 

三人とも充電がないってことで充電できるカフェへ。

アメリカンダイナー リトルピクニック 能登半島 七尾の和倉温泉で本格的なハンバーガーが食べれます - littlepicnic ページ!
f:id:cobaltic:20190902191115j:image

スペースインベーダーの筐体とかあって、苦戦してたらマスターが攻略法を教えてくれました。近所にあったら通いたくなるようなお店です。

 

最後の晩餐は寿司🍣

蛇之目寿司(じゃのめずし) | すし王国 能登七尾

f:id:cobaltic:20190902210017j:image

能登づくしと海苔味噌汁。

 

最終日はとにかくまったり。これもこれで良いもんです。
f:id:cobaltic:20190902210014j:image

グッバイ石川。良いところでした。

 

 

 

本日の予算

夜行バス代 6600円

お土産代 1534円

入浴料 440円

寿司 2600円

その他食品 1890円

 

総計 13064円

野郎三人石川旅Day2

本日は輪島を出発して色々寄りつつ和倉温泉へ。

野郎三人石川旅Day1 - 徒然日記

↑昨日のやつです。

 

まずは輪島の朝市へ。

https://asaichi.info

f:id:cobaltic:20190901184443j:image

屋台が立ち並ぶ感じ。


f:id:cobaltic:20190901184428j:image

おこぼれを狙うネコちゃん!

 

朝ごはんはフグたっぷりの能登丼。
f:id:cobaltic:20190901184406j:image

個人的にはポン酢より醤油の方が美味しかった。

お土産とか夜の酒盛り素材を買ってブラブラ。

 


f:id:cobaltic:20190901184352j:image

お次は旧輪島駅。廃駅になった輪島駅を道の駅として活用しているらしい。
f:id:cobaltic:20190901184420j:image

 

輪島発シベリア行き。
f:id:cobaltic:20190901184416j:image

なんで??って思ってたら昔落書きされてそのままにしているらしい。

 

またこんな感じの海沿いドライブをして
f:id:cobaltic:20190901184252j:image

ちなみにBGMはユーミン

 

千枚田に到着!
f:id:cobaltic:20190901184312j:image

綺麗な棚田の風景。

f:id:cobaltic:20190901193330j:image

安倍昭恵小泉進次郎小泉純一郎の畑 すごい並び。

 

続いては能登島に渡って
f:id:cobaltic:20190901184302j:image

のとじま水族館

のとじま水族館 | 来て!見て!触れる!石川県の体験型水族館


f:id:cobaltic:20190901184402j:image

ジンベイザメが大迫力!


f:id:cobaltic:20190901184324j:image
f:id:cobaltic:20190901184358j:image

カワウソ 元気すぎて上手く撮れない。
f:id:cobaltic:20190901184320j:image

イルカの餌やり体験。
f:id:cobaltic:20190901184335j:image

ペンギンのお散歩タイム。
f:id:cobaltic:20190901184446j:image

説明不要のかわいさ。

 


f:id:cobaltic:20190901184346j:image

イルカショー
f:id:cobaltic:20190901184328j:image

久しぶりに水族館きたけど童心に返って楽しめました。

 

今晩のお宿。

和倉温泉 ホテル海望
f:id:cobaltic:20190901184309j:image

1日目の宿は安くして2日目の宿は良いところにしようって話でここ選んだ訳なんですが…


f:id:cobaltic:20190901184258j:image

高級すぎる。明らかに場違い感がある。


f:id:cobaltic:20190901184340j:image

オーシャンビューの部屋。ここのスペース好き。


f:id:cobaltic:20190901184317j:image

窓からは能登大橋も見える。

 

レンタカーは金沢駅で借りてここで乗り捨てです。車ありの旅は今回初だったんですが、やはり車は便利ですね。

 

素泊まりプランなので夜ご飯を食べるべく町歩き。

f:id:cobaltic:20190902000125j:image

情緒の極みみたいな温泉♨️

 

 

のとの蔵|和倉温泉商店連盟
f:id:cobaltic:20190902000131j:image

ロースとんかつ がびっっっくりするほど美味しかった。

 

f:id:cobaltic:20190902092207j:image

夜は朝市で買ったこいつらをつまんで酒盛りです。

 

 

本日の予算

宿代 7020円

ふぐ丼 1800円

お土産 700円

能登水族館 1650円

レンタカー代(今日の分、一人分) 1961円

ガソリン代(一人分) 700円

酒盛り代 1100円

ロースとんかつ 1200円

その他 800円

 

総計 16971円

野郎三人石川旅Day1

夜行バスで約10時間 金沢駅に到着!

f:id:cobaltic:20190831165532j:image

有名な鼓門というやつらしいです。

 

金沢市内の移動どうしようかと思っていたらシェアサイクルが一日200円で各所にあるポートに乗り捨てていける と係員の方が案内してくれました。
f:id:cobaltic:20190831165553j:image

 

ちょろっとチャリを漕いで近江町市場へ。

ここは石川県出身の友達に金沢に行くと行ったらおススメされた場所。

近江町市場 – 金沢市民の台所としてもうすぐ300年の小売市場
f:id:cobaltic:20190831165543j:image

 

この市場感たまらない。
f:id:cobaltic:20190831165600j:image

売ってるものもどれも安いし美味しそうなので、無限の金と胃袋が欲しくなる。

あと何故か近江町市場全体でPayPayが使える。
f:id:cobaltic:20190831165557j:image

エアコン代わりなのか分からないけど各所にある氷


f:id:cobaltic:20190831165527j:image

たまに花入りのお洒落なやつも

 

時間も早くてご飯を食べるには中途半端だったので次なる目的地 21世紀美術館へ。
f:id:cobaltic:20190831165549j:image

 

ちょうどチームラボの企画展が

チームラボ 永遠の海に浮かぶ無常の花|金沢21世紀美術館, 石川, 日本 | teamLab / チームラボ

 

f:id:cobaltic:20190831172121j:image

良い感じに撮れた写真たち。


f:id:cobaltic:20190831172104j:image

白Tを着ていくと同化できる。


f:id:cobaltic:20190831172101j:image

鏡で左右対称なの好き。


f:id:cobaltic:20190831172127j:image

光る玉が動くやつ。


f:id:cobaltic:20190831172039j:image

混雑と金により21世紀美術館定番のプールのやつは諦めてしまいました。

まあでもチームラボのやつで結構満足できたので。

何となく思ったのはチームラボは作品そのものと共に観る人を含めた新たな作品を作る場を提供しているんじゃないかと。

普通の美術館は作品と鑑賞者は二項対立だけど、チームラボの作品はさっきの写真とか、自分が描いた花がスクリーン上に咲く作品とかみたいに鑑賞者も巻き込んで1つの作品を完成させていくみたいなイメージ。

とっつき難い芸術と人との間にテクノロジーで架け橋をかけるって感じで非常に良かったです。

 

続いて兼六園へ。

事前に石川県出身の友達にリサーチをしたところ「兼六園は豪華な庭」と言われていて良くも悪くもその通りだなと。

f:id:cobaltic:20190831172114j:image

侘び寂びって感じ。


f:id:cobaltic:20190831172048j:image

池に面したご飯屋さんがあったので、そこでラムネと蕎麦を注文。


f:id:cobaltic:20190831172044j:image

 

あとは適当にブラブラして金沢城へ。f:id:cobaltic:20190831172052j:image

 

お城だ〜で終わってしまった。
f:id:cobaltic:20190831172157j:image

 

シェアサイクルで再び近江町市場へ。
f:id:cobaltic:20190831172056j:image

近江町市場に戻って食べた海鮮丼…ノドグロが美味しすぎる…

 

美味しい海鮮丼食ったし、チャリ乗って帰るか!って言ってたら無いんですよ。シェアサイクルが無いんですよ。
f:id:cobaltic:20190831172131j:image

乗り捨て自由だし特定のチャリを借りるのではなくて借りる権利を買うみたいな感じだからこうなるかもとは思ってました。

止むを得ず歩きで金沢駅へ。近いから歩きでなんとかなったけど遠くてこう言う状況なってたらどうするんでしょ。

 

それはさておき駅でレンタカーを借りて、今晩のお宿がある輪島へ。

のと里山海道が最高。

f:id:cobaltic:20190901021439j:image

海沿いの道で日没を眺めつつひたすらドライブ。

ちょうど車内で流してたサカナクションの「陽炎」が流れてきたのが忘れられないの。

 

途中道の駅に車停めて、海岸の方へ。
f:id:cobaltic:20190901021451j:image

子供は被写体として良いですね。

 

トイレですら溢れるこの良さ。
f:id:cobaltic:20190901021443j:image

 

車で砂浜を走れるなぎさドライブにも行きました。暗かったので写真はないですけどオススメです。

『日本で唯一!砂浜を車で走れる![石川]千里浜なぎさドライブウェイ!』|レンタカー予約 オリックスレンタカー

特にインディジョーンズのテーマ曲を流しながら走ると最高。

 

今晩のお宿。

温泉民宿 海辺

素泊まりプラン。床が全面畳調なのがめっちゃ良かったです。
f:id:cobaltic:20190901021448j:image

宿でスマブラやったりダベったりしつつ就寝。

 

本日の予算

夜行バス 5500円

シェアサイクル 200円

21世紀美術館チームラボ展 2200円

兼六園入園料 310円

海鮮丼 2500円

酒盛り代 1038円

その他食費 2100円

レンタカー代(今日の分、一人分) 1961円

宿代 4860円

 

総計 20669円

 

 

研究室入退室管理システム Excel編

前回このような記事を作成しました。
cobaltic.hatenablog.com

…が結局API取得しなくちゃならないのは非常に面倒ですし、まとまって見ることが出来ません。
なによりも研究室に行かず家でダラダラしていると友人から「早くlabo inしろや」 というメッセージが届くようになって限界を感じました。

というわけで今回はExcelファイルに入退室記録を書き込みようなものを作成したいと思います。これで家でダラダラしていても煽られることはないはずです。

完成イメージはこんな感じです。
f:id:cobaltic:20190813183721p:plain

目次

プログラム

labo in

labo in の方のコードは以下のようなものです。下準備としてやることはlabo_manage.xlsxを作成するだけです。

import openpyxl
import datetime 
import os
from openpyxl.styles import numbers
from openpyxl.styles.fonts import Font
from openpyxl.styles import borders
os.startfile('C:\\***\\***\\labo_manage.xlsx')
  
d = datetime.datetime.today()
youbi = ["月","火","水","木","金","土","日"]
#d.weekday()では数字が吐き出されるのでそれに対応した曜日の配列を用意しておく
wb =openpyxl.load_workbook('labo_manage.xlsx')
sheet = wb.active
#初期設定-
if  sheet.cell(column = 1, row = 1 ). value == None :
    sheet.cell(column = 1, row = 1 ). value = '日付'
    sheet.cell(column = 2, row = 1 ). value = '曜日'
    sheet.cell(column = 3, row = 1 ). value = 'laboin'
    sheet.cell(column = 4, row = 1 ). value = 'laboout'
    sheet.cell(column = 5, row = 1 ). value = 'ラボ滞在時間'
    sheet.cell(column = 7, row = 1 ). value = '経過日数'
    sheet.cell(column = 7, row = 2 ). value = '滞在日数'
    sheet.cell(column = 7, row = 3 ). value = '総滞在時間'
    sheet.cell(column = 7, row = 4 ). value = '平均滞在時間(経過日数)'
    sheet.cell(column = 7, row = 5 ). value = '平均滞在時間(滞在日数)'
       
    for i in range (1,5):
        font = Font(b = True, sz = 12)
        sheet.cell(column = i, row = 1).font = font
        sheet.cell(column = 7, row = i).font = font
        sheet.cell(column = i ,row = 1).border = borders.Border(bottom=borders.Side(style=borders.BORDER_THICK, color='000000'))
    
    sheet.column_dimensions['A'].width = 13
    sheet.column_dimensions['C'].width = 11
    sheet.column_dimensions['D'].width = 11
    sheet.column_dimensions['E'].width = 13
    sheet.column_dimensions['G'].width = 22
    
    
    sheet.cell(column = 8, row = 1 ).number_format = numbers.FORMAT_GENERAL 
    sheet.cell(column = 8, row = 2 ).number_format = numbers.FORMAT_GENERAL 
    sheet.cell(column = 8, row = 3 ).number_format = numbers.FORMAT_DATE_TIME6
    sheet.cell(column = 8, row = 4 ).number_format = numbers.FORMAT_DATE_TIME6
    sheet.cell(column = 8, row = 5 ).number_format = numbers.FORMAT_DATE_TIME6

#-初期設定

for j in range(2,1000):
    if  sheet.cell(column = 1, row = j ).value == None :
            sheet.cell(column = 1, row = j ). value = '%s-%s-%s' % (d.year, d.month, d.day)
            sheet.cell(column = 2, row = j ). value = '%s曜日' % (youbi[d.weekday()])
            sheet.cell(column = 3, row = j ). value = '%s:%s:%s'  %(d.hour, d.minute, d.second)
            
            #それぞれのセルの書式設定をいじる
            sheet.cell(column = 1, row = j ).number_format = numbers.FORMAT_DATE_YYMMDD
            sheet.cell(column = 3, row = j ).number_format = numbers.FORMAT_DATE_TIME6
            sheet.cell(column = 4, row = j ).number_format = numbers.FORMAT_DATE_TIME6
            sheet.cell(column = 5, row = j ).number_format = numbers.FORMAT_DATE_TIME6
            
            
            print('%s時%s分%s秒%s曜日\n' % (d.hour, d.minute, d.second, youbi[d.weekday()]) + 'C' + str(j) + 'のセルに入力しました。')
            break   
wb.save('labo_manage.xlsx')

動きを簡単に説明すると#初期設定-から#-初期設定の部分ではコメントの通り初期設定をしています。
A1のセルが空白なら初期設定(セルの書式設定やフォントなど)をやってくれます。
f:id:cobaltic:20190813183850p:plain
これが
f:id:cobaltic:20190813183857p:plain
こう

labo out

import openpyxl
import datetime 
from openpyxl.styles import numbers
import os
os.startfile('C:\\***\\***\\labo_manage.xlsx')

   
d = datetime.datetime.today()
youbi = ["月","火","水","木","金","土","日"]
#d.weekday()では数字が吐き出されるのでそれに対応した曜日の配列を用意しておく

wb =openpyxl.load_workbook('labo_manage.xlsx')
sheet = wb.active
 

for i in range(2,1000):
    if sheet.cell(column = 3, row = i ).value == None :
            sheet.cell(column = 4, row = i-1 ). value = '%s:%s:%s'  %(d.hour, d.minute, d.second)
            sheet.cell(column = 5, row = i-1 ). value = '=D' + str(i-1) + '-C' + str(i-1) 
            sheet.cell(column = 8, row = 1). value = '=A' + str(i-1) + '-A2+1' 
            sheet.cell(column = 8, row = 2). value = '=SUMPRODUCT(1/COUNTIF(A2,A' +str(i-1) +'))'
            sheet.cell(column = 8, row = 3). value = '=SUM(E2:E' + str(i-1) +')'
            sheet.cell(column = 8, row = 4). value = '=H3/H1' 
            sheet.cell(column = 8, row = 5). value = '=H3/H2'        
            
            print('%s時%s分%s秒%s曜日\n' % (d.hour, d.minute, d.second, youbi[d.weekday()]) + 'D' + str(i) + 'のセルに入力しました。')
            break
                     
wb.save('labo_manage.xlsx')


labo in側の列で入力がない場所の右上にlabo outの時間を書き込みます。
計算式もゴリ押しで代入していきます。計算式については最後の「参考にしたもの」の部分を参照してください。
問題点としては日付が変わるとうまくいきません。24時を越えての入退室はないと信じて。
…とはいえ一応対策できないことはなくて、日付も入力した上でセルの書式設定を後からhh:mm:ssなどにすれば、表示されるのは時刻だけだけど日付もちゃんと入っているので計算は出来ます。ただ書式設定を入力とは別で完全に後からいじらねばならず、使用頻度に対して手間がかかるだけだと思ったので見送りました。

実装

やることは前回記事と全く変わらないので完全にコピペしています。そのためファイル名が若干違いますがご容赦を。
細かいステップを説明すると
1. laboin.pyを発動するようなbatファイルの作成
2. laboin.batをグループポリシーでログオンスクリプトとして登録
3. laboin.pyをログオンディレクトリに置いてくる
になります。

1. laboin.pyを発動するようなbatファイルの作成
これの3番目の方法を参考にbatファイルを作成します。
WindowsでPythonの実行する4つの方法 - ちょっと便利なてっちーノート


2. laboin.batをグループポリシーでログオンスクリプトとして登録
これが一番わかりやすいと思います。
グループ・ポリシーを使って、コンピュータの終了時にコマンドを実行する:Tech TIPS - @IT

自分はシャットダウン時ではなくてログオフ時にしたかったので実際の登録場所は以下の記事を参考にしました。
Windows 2012 でログオン・ログオフ時間をイベントへ記録する。


そしてこれらの記事を参考にログオンスクリプト・ログオフスクリプトとして登録します。

…それだけのはずなのに何度やってもうまく発動しないので、


3. laboin.pyをログオンディレクトリに置いてくる
のステップをやります。

以下の図はログオンスクリプトにlaboin.batを登録しているだけの状態です。
f:id:cobaltic:20190628204850p:plain

他の設定を少しいじって(後述)実行すると以下のようなメッセージが吐かれます。

f:id:cobaltic:20190628204913p:plain

多分
①ログオンスクリプトのbatファイルが開く
②batファイルの処理としてpyファイルを開こうとするがないので開けない

というような流れなので参照ボタンを押して出てくる場所に以下のように実行されるべきpyファイルを置いてきたところ
f:id:cobaltic:20190628204932p:plain
上手くいくようになりました。

ちなみにログオンスクリプトに登録して、仮に失敗したとしても親切にエラーを吐いてくれません。
[GP]「実行中のレガシ ログオン スクリプトを表示しない」で利用されているレジストリ | Windowsレジストリ置き場
を参考にしてログオンスクリプトの実行を表示する に設定することで原因が明らかになりました。

この記事を書く上では以下の記事にお世話になりました。
はてなブログにソースコードを色付けして貼り付ける方法 - sonickun.log

Excelで複数条件で検索して複数結果を抽出・整理するような処理をしたいとき

データ整理をする際に結構多いシチュエーションだと思います。

けどサッと探してピッタリな記事がなかったので、備忘録もかねて書きます。 

完成イメージはこんな感じです。

  

f:id:cobaltic:20190718223423p:plain

 

鈴木1郎~鈴木100郎の中から複数の検索条件に合致するものを複数返してくれていますね。

サッと調べるとこういった記事が出てきますが、INDEX関数やVLOOKUP関数は複数条件を設定しても単一の答えしか返してくれません。

Excel2010: 複数列の条件に合致した値を取り出す(条件エリア不要)★SUMPRODUCT関数、INDEX関数 - 教えて!HELPDESK

 

しかも関数が複雑でわかりにくい。

今回紹介する方法は結構ゴリ押しです。

その分だけ分かりやすいと信じています。

 

[目次]

 

 

1.検索条件に一致しているかを判定

 各項目で個別に判定します。複数組み合わせると複雑になってしまうので。

ひとまずこんな感じのやつが目標です。

f:id:cobaltic:20190718232959p:plain

 

 完全一致の場合の処理

まずは一番簡単なH列の処理について。

H列の処理はこのようになっています。

=IF(H$3=D4,1,0) 

 

IF(条件, TRUE の処理, FALSE の処理)

条件を満たすときはTRUE の処理を返します。満たさないときは FALSEの処理 を返します。

IF関数のルールはこのような処理なのでH列は

 =IF(H$3=D4,1,0)

もしH3とD4が一致しているなら,1を返す,一致していないなら0を返す

つまり血液型がO型の人は1,そうでない人は0と返すだけの簡単な処理です。

 

 部分一致の場合の処理

次にF列とG列の処理について。

=だと完全一致のみを判定するので、趣味欄で散歩 を検索しても 散歩,読書の人は除外されてしまいます。

そこでワイルドカードである「*」を使います。

これを使うと1文字以上の任意の文字列として機能してくれます。

つまり「*阿部*」で検索すると阿部寛阿部サダヲのどちらかが含まれているものが判定されます。

 

しかし悲しいことにIF関数を使うと文字列「*阿部*」として検索されてしまうので、別の関数を使います。

というわけでF列の処理はこちら。

=COUNTIF(B4,"*"&F$3&"*") 

 

COUNTIF(範囲, 条件)

範囲の中で条件を満たすセルの数を数えます。

=COUNTIF(B4,"*"&F$3&"*") 

B4のセルが,F3が部分一致するならばB4のセルのみカウント(1を返す)

範囲の部分は相対参照、条件の部分は絶対参照なので、常に条件と一致しているか1セルだけ判定して一致していたらそのセルをカウント(1を返す)というわけです。

 

 複数の検索条件に一致していたら該当と表示する

これまでに各条件に一致しているかどうかを0or1で判定してきました。

という事で3つの検索条件に全て合致していたら和が3になっているはずですので

 =IF(SUM(F4:H4)=3,"該当","")

という処理をします。

各条件判定の和が3(すべての条件に一致)しているなら,「該当」と表示,そうでないなら「」と表示(空白のセル)

これだけです。

 

 

2.該当しているものを番号順に列挙

ここから先はこの記事を参考にしています。

関数で条件を満たす複数のデータを表から取り出す方法 [エクセル(Excel)の使い方] All About

 

ここでの目標はこんな感じです。

 

f:id:cobaltic:20190721114625p:plain

 

 

 該当者に連番を振る

=IF(I4="","",COUNTIF(I$4:I4,"該当"))

合わせ技です。

もし空白のセルなら,何もしない,そうでないならI4(該当判定列の一番上のセル)から処理している場所までにある「該当」の数を数える

これで該当している人の横に連番が振られていきます。

連番付けした列に対してMAX関数を使うことで該当人数も分かります。

MAX(数値1, 数値2 …)

数値1から数値2の中で最大値を返す。

=MAX(J:J)

とすればJ列(連番付けの列)の最大値を返してくれるので該当人数が分かります。 

 

該当者を連番に従って並び替え

下準備として並び替えたい場所に、1からオートフィルで連番を打っておいてください。

最期の処理はこちらです。

 =INDEX(A$4:D$103,MATCH($L3,J$4:J$102,0),1)

 

 INDEX(対象範囲, 行番号, 列番号) 

対象範囲の中から行番号列番号の交差するセルの参照を取得します。

説明の為に再掲。これはM列の処理になります。

=INDEX(A$4:D$103,MATCH($L3,J$4:J$102,0),1)

f:id:cobaltic:20190721114625p:plain

まず対象範囲はA$4:D$103 処理したいデータが入っているところです。

次に行番号

MATCH(検索値, 検索範囲, 照合の型)

照合の型検索範囲にある検索値と一致するセルの位置を取得するように指定できます。

を使います。

MATCH($L3,J$4:J$102,0) というのは

J4~J102(連番付けの範囲)にある数字L3(並び替え後の連番1)完全一致していたらそのセルの位置を取得 ということです。

 

そしてINDEXの処理に戻ると

 =INDEX(A$4:D$103,MATCH($L3,J$4:J$102,0),1)

列番号のところは氏名の所がもらえればいいので,A$4:D$103の範囲の1番目の列なので1を指定します。

つまり連番と一致している人の氏名を引っ張ってきているだけの処理です。

これで完成です。

 

3.もっとスマートにするために

 赤枠で囲った部分がイケてない

f:id:cobaltic:20190721121732p:plain

連番も手入力だし、枠が余ると参照エラーになってしまうのでここの部分をスマートにしていきます。

該当人数を越えたら非表示にする処理

 = IF(ROW()-2<=K$3,ROW()-2,"")

ROW()はそのセルの行位置を返してくれる関数ですので、-2とか良い感じの調整をして

該当人数を越えたら非表示 というゴリ押しです。

 

氏名の方も同様に

=IF(K$3>=L3,INDEX(A$4:D$103,MATCH($L3,J$4:J$102,0),1),"")

該当人数を越えたら非表示になるような処理をします。

 

最後にワークスペースを見えないところに移動して体裁を整えれば完成です。

f:id:cobaltic:20190718223423p:plain


各関数の処理については以下の記事を参考にしました。

エクセル の Tips 一覧