月: 2016年2月

確定申告完了!

日曜日に確定申告に行ってきた。
今回はいつもの医療費控除の他に株の配当の申告もしておこうと思ったのだが、初めてのことだったのでどこにどう入力すればよいのかわからず、結局今回もヘルプ付きの申請書作成コーナーで入力。

1年に1回のことなんで、ほんと、忘れるわ~~~と、情けないところだが、作成コーナーは前年よりだいぶんスムーズに行くようになっていたので、待ち時間もかなり短縮されていた。
(もう、みんな電子化するのね)

「配当まで申告するんですね?申告すると後で修正は無理ですよ?」とかいわれたから、配当とか売買利益とかを入れると納税額が大きくなるんだろうなぁ、と思いつつ、でも「きっちり納税しまっす!」と申告してしまった。
(ヘルプの皆さん、ありがとう。あなた方いないと、私は申告書もろくに書けませんでした。)

お国のために、勤労と納税は義務ですよ、はい。

SQLServer覚書 8桁数値を日付表示に

さて、最近くだらないことをまじめに書いているので、久しぶりに技術的なことを軽くメモ書きしておこう。

8桁数値を日付(yyyy/mm/dd)表示にする方法

SELECT CONVERT(varchar,CONVERT(datetime, CONVERT(varchar,20160223), 112),111)

1つ目(内側から)は文字列に変換、2つ目のCONVERTではDATETIME型に変換するので、出力としては「2016/02/23 0:00:00」というように日付と時間で出力される。
これを「yyyy/mm/dd」形式の文字列で出力させるために3つ目(一番外側)のCONVERTを用意。

これとは逆に日付を8桁数値に変える場合は、データを「yyyymmdd」の文字列で出力した後、INT(またはNUMERIC)型に変えてしまえばよい。

SELECT CONVERT(int,CONVERT(varchar, '2016-2-14', 112))

よろしいですか?

あなたの店の前はあなたの店ではありません。
あなたの店の前はあなたの店の待合室ではないし、喫煙室でもありません。
あなたの店の前はあなたの駐輪場ではありませんし、ましてや駐車場ではありません。

あなたの家の前はあなたたちの駐車場ではありません。
あなたの家の前はあなたたち家族の遊び場ではありません。

道は唾や煙を吐くところではありません。
道はゴミを捨てるところでもありません。

どうして自分の子供の前で吸わないたばこを赤の他人の前で吸うのでしょう?
どうして道路で喫煙して、他人の服や肺をいとも易々と汚すのでしょう?
どうしてゴミを放置したり、ポイ捨てしたりするのでしょう?
それらをきれいにするのはいったい誰なのでしょう?

あなたはペットを子供のようにかわいがりますが、その「子供」は人の家の前で糞尿をしています。
あなたの子供が「人」であるなら、そのようなことは許されるでしょうか?
片付けるからいいではないか?そういう問題ではありません。

これらはすべて意識の問題です。

道路は公共の場所です。
他人に迷惑をかける行為を故意にやる必要はありません。
家でやれることは家でやればよいのです。

家の中で唾を吐き、ポイ捨てすればよいのです。
家の中で煙を吐き、外に出さなければよいのです。
家の中で糞をして、トイレに流せばよいのです。

そう、他の人は関係ありません。

Excel印刷範囲指定+ウインドウ枠固定→チカチカ

印刷範囲指定をしてウィンドウ枠を固定すると、アクティブセルのある領域以外の図形がちらついて見える事象。
Excel2010でしか起きないらしい当該事象だが、さてどうしようかと考えると、結局は印刷範囲指定をやめる結論に至った。
解決作的には根治してもらわなければならないのだが、MSさんが重い腰をあげないので、
自分で腰を上げるとするなら、例えば、印刷ボタンを作って、ボタンを押したときだけ印刷範囲指定→印刷→印刷範囲クリアすればよいのかなぁと考えた。
でも、厳密に印刷設定を行う必要性がないのであれば、印刷の拡大率を設定しておくだけでも何とかなるような気もする。

ExcelVBA覚書 Shellとかリモート実行とか

忘れる前にメモっとく。
VBAからコマンド実行を非同期で行う時に使うShell関数。
第2引数にvbMinimizedNoFocusを設定すると、コマンドプロンプトは非表示になって、裏側で走る仕組みにできるそうな。

Dim cmd_buf As String
Dim res     As Double

cmd_buf = "cmd /c sqlcmd -S {DB-Source} -U {DB-UserId} -P {DB-UserPw} -d {DB-Name} " _
         & " -Q ""EXEC {プロシージャ名} {*}, '{*}' """ 
res = Shell(cmd_buf, vbMinimizedNoFocus)

{}書きは環境に合わせて変更
{*}はストアドの引数で、文字列の場合はシングルクォーテーションで囲む。

Shellの戻り値はタスクIDで、「0」がかえってきたら動いていないということらしい。
非同期なので勝手に動いて、勝手に終わる。

終わったらウィンドウをアクティブにするとかすると、終わったことがわかるらしい。

If res > 0 Then Call AppActivate(res)

と、こんな感じかね。
ふむふむ、しかしだね、裏側で勝手に動いているわけで、下手にPCシャットダウンしちゃうと、処理が途中で終わっちゃう!ってところが怖い。

で、次。
リモート環境にあるバッチファイルを実行する方法。

'server:リモートサーバ(user_id/user_pwでログイン)
'exe_name:実行ファイル, exe_position:実行ファイルのパス
Public Function ExecuteRemoteExe(server As String, user_id As String, user_pw As String _
                                , exe_name As String, exe_position As String) As Boolean

    Const AUTHENTICATION_LEVEL_PKT_PRIVACY = 6
    
    Dim obj_locator As Object
    Dim obj_server  As Object
    Dim obj_process As Object
    Dim res As Long
    Dim pid As Long
    
    On Error GoTo ErrExecute
    
    Set obj_locator = CreateObject("WbemScripting.SWbemLocator")
    Set obj_server = obj_locator.ConnectServer(server, "root\cimv2", user_id, user_pw)
    obj_server.Security_.authenticationLevel = AUTHENTICATION_LEVEL_PKT_PRIVACY
    
    Set obj_process = server.get("Win32_Process")
    res = obj_process.Create(exe_position, Null, Null, pid)

    Select Case res
        Case 0
            ExecuteRemoteExe = True
        Case 2
            Msgbox "アクセスできませんでした。"
        Case 9
            Msgbox "パスが正しくありません。" 
        Case 21
            Msgbox "パラメータが正しくありません。"
        Case Else
            Msgbox "バッチを実行できませんでした。"  
    End Select
        
ErrExecute:
    
    Set obj_process = Nothing
    Set obj_server = Nothing
    Set obj_locator = Nothing
    
End Function

これでリモートのバッチファイルを実行することができる。
できるんだけど、これもこっち側のPCを切ってしまうと、バッチも終わってしまう・・・
なんとかならんか。

ExcelVBA覚書 Resize

モノを整理するのにモノを買う・・・
という、断捨離しているはずなのにモノを増やす、愚かしいことをやってしまった。

いや、何にせよ、今のままじゃイカン!と、虚無感たっぷりに自分に活を入れつつ。

ExcelのRangeオブジェクトのメソッドにあるResize。起点セルと行列数を指定して範囲指定するのに使っているようだ。
こんなメソッドがあるとは全く知らなかったが、ネットサーフィンしてたらたまたま見つけたので試してみる。

参照サイト:Range,Cells」と「Resize」のセル範囲指定を比べてみる

パターン1:ごくごく一般的な範囲指定

With ThisWorkbook.Worksheets(1)
    .Range("C2:E4").Select
End With

パターン2:一般的なはずな範囲指定

With ThisWorkbook.Worksheets(1)
    .Range(.Cells(2, 3), .Cells(4, 5)).Select
End With

パターン3:「Resize使って同じことしてみるよ」な範囲指定

With ThisWorkbook.Worksheets(1)
    .Cells(2,3).Resize(3,3).Select
End With

パターン4:「Offset使って同じことしてみるよ」な範囲指定

With ThisWorkbook.Worksheets(1)
    .Range(.Cells(2,3),.Cells(2,3).Offset(3,3)).Select
End With

パターン1から4まで、すべて同じ範囲が指定される。(つまり、セルC2~E4)
なるほど、少なくともパターン4よりは、パターン3の方がきれいだ。
パターン2と3、どちらを使うかは、周辺のロジック次第。

なお、参照サイトには「Rangeが参照しているシートがアクティブになっていないとエラーになる」と書いてあるが、実はどのメソッドでも同じ。Selectメソッド自体、アクティブシート上にでないと動かないので、ResizeやOffsetとは関係がないと思う。

最近のダメな私

最近の私は本当にダメダメだ。
なんてったって、仕事をする意欲がない。
寒いから外にも出たくない。家事もしたくない。
とりあえず、起きて、食べて、遊んで、寝る、ってなルーティーンをできるだけの財力が欲しい・・・

・・・以下、個人保護のため音声は変えております。・・・

SMAP解散騒動
 なんで謝罪するのか意味不明。
 お騒がせさせたのはメディアで、騒いでるのはマスコミとファンでしょ。
 解散しない方がいいのもよくわからん。
 他人の人生に口を挟む理由もよくわからん。
 という、わからんことばかり。
 社会ってこういうものかしら。

ゲスさん不倫
 何がゲスなのかわからん。
 そもそも、好きになってしまったらどうにもならんのです。
 不倫から始まってうまくいってる夫婦って結構いるし。
 それをゲス呼ばわりできる人って限られてる。
 でも、男の方はやっぱりゲスかな。ゲスというよりアホってかんじだけど。
 次にゲスってるのは男の嫁だと思う。
 旦那が不倫してる思いの丈なんて、週刊誌にしゃべるか?
 普通そんなことしないでしょ。夫婦のことは夫婦で決着つけてね。
 え、そう、そうよ。私には関係のない話。


 去年持ってる株を全部売った。
 年初から日経平均が値下がりしたといっても、私が売ったときよりはまだ高い。
 というか、そもそも株価の変動激しすぎ。
 一律20%とかでなく、買ってから売るまでの期間によって税率を変えてみてはどうだろ。
 投資してほしいというわりに、NISAも中途半端だし、
 低金利でお金預けてもたいした利息も付かんし、
 今後マイナンバーで管理されるようになれば、結局タンス預金で落ち着いちゃうよ。

所詮外野は適当だわ。

 

PostgreSQL覚書 DBLINK設定方法

昔やったのに忘れてしもーた・・・
と、Webで調べたDBLINK。

「CREATE EXTENSION DBLINK;とやったら使えるよ!」みたいなサイトがあったからやってみたら、postgreさんに「なんじゃい!」って怒られたので、過去のドキュメントを引っ張り出してきた。

「そもそも、モジュールあらへんやん、あんた」みたいな話なので、
コマンドプロンプトを立ち上げて、

cd /d C:\Program Files\PostgreSQL\9.0
bin\psql -U {USER_ID} -d {DBNAME} < share\contrib\dblink.sql でPWを入れてDBLINKを使えるようにすると、関数としてDBLINKが使えるようになった。