2016年6月30日木曜日

VBAのRoundの罠

ROUND(38.5)
結果:38

ROUND(39.5)
結果:40

「銀行家の丸め (bankers' rounding)」、「銀行丸め」ともいう。
5が切り捨てられたり切り上げられたりするので「五捨五入」と呼ばれたり、
端数がちょうど0.5の場合に整数部分が偶数なら切り捨て奇数なら切り上げる
ので「偶捨奇入」と呼ばれたりもする。



本当の「四捨五入」したい場合は

WorksheetFunction.Round()

が有効だそうです。
しかし、ADODB,Jet.OLEDBなどでQuery(クエリー)で運用時は使えないので

sql = "UPDATE MyTable SET `Ammount` = ROUND(35*1.1)"
Call csv_cn.Execute(sql)

=ROUND(38.5) = 38



sql = "UPDATE MyTable SET `Ammount` = FORMAT(35*1.1,""#"")"
Call csv_cn.Execute(sql)

=ROUND(38.5) = 39

ちなみに、小数点以下2位の四捨五入は

sql = "UPDATE MyTable SET `Ammount` = FORMAT(35*1.111,""#.00"")"
Call csv_cn.Execute(sql)




2016年6月24日金曜日

Scripting.Dictionaryのkeyまたはitemをindexで参照する方法

Dim dic As New Scripting.Dictionary
dic.Add "a", "apple"
dic.Add "b", "banana"

'For Eachで
Dim vntKey As Variant
For Each vntKey In dic.Keys
    Debug.Print vntKey & ":" & dic(vntKey)
Next

'または Forで
Dim intX As Integer
For intX = 0 To dic.Count - 1
    Debug.Print dic.Keys(intX) & ":" & dic.Items(intX)
Next


'Indexで指定でもいい←これは面白い
Debug.Print dic.Keys()(0) & ":" & dic.Items()(0)
Debug.Print dic.Keys()(1) & ":" & dic.Items()(1)
'最後のkeyとvalue
Debug.Print dic.Keys()(dic.Count - 1) & ":" & dic.Items()(dic.Count - 1)

2016年3月26日土曜日

OSが64bitでも64bitのODBC Connectorを使ってはいけません!Officeのbit数を確認べし…そうなの?!!

ぬぬぬ、罠だ!
64bitのOSも絶対64bitのMySQL Connector/ODBC

https://dev.mysql.com/downloads/connector/odbc/

64bitを使うと
「データ ソース名および指定された既定のドライバーが見つかりません」がでます

32bitを使うとすーっと通る

なぜた?!!!

うわー、Officeが32bitじゃん!!バカが!!!っと脱力した…

2015年7月16日木曜日

Could not read chunk size: connection was closed by server

subversionでsvn upを打ったら、エラーメッセージが出てきました

Could not read chunk size: connection was closed by server

svnのタイムアウトを長くして解決できた人もいるみたいだけど、自分の場合そもそも
ソースコードのサイズが大きくので、タイムアウトとは考えにくい。

ゆくゆく調べたら、なんかファイルが壊れてる可能性があるらしい、直す方法は「上書き」です


例えばmysourecってリポジトリがあるとし、それが壊れている、リポジトリのURLは例えば「http://192.168.1.2/mysource」。
.
..
mysourec

#mkdir clone → まず一時フォルダを作成
#cd clone
#svn co http://192.168.1.2/mysource mysource → そこで一回同じフォルダ名でcheckout
#\cp -rf mysource ../ → 「\」を使うの理由は、cpが「cp -i」 にaliasされている可能性大きい。これでクローンしたソースで問題があったソースを上書きします。
#cd ../mysource
#svn up → 成功したかを確認
# rm -rf clone → 成功したら、クローンフォルダを削除


以上

2015年5月30日土曜日

急にEclipseのBreakPointに止まれなくなった。

急にEclipseのBreakPointで止まれなくなった。

現象:
Optionによって一行目は止まるけど、それ以降全然止まらない、Step InしてもStep Overになります。

試み:
Sessionを止めったり再開したり、Eclipse自体を再起動する、またはOSを再起動、Apacheを再起動しても治らない

罠:
一旦BreakPointsを全部削除して、再設定したら、なぜか直りました…ちくしょー

2015年4月2日木曜日

特定の列に値が入ってれば、条件付き書式で行ごとを塗りつぶす

エクセルの条件付き書式なかなかわかりづらい。なのでメモ残す。

やりたいこと:
B列からF列まで、一つでも値が入ってれば、B列からJ列まで全部塗りつぶす。


手順:
1.最初の行(5行目)のB列からJ列を選択し、メニューから「条件付き書式」→「新しいルール」をクリック、

2.図のように、「数式を使用して、書式設定するセルを決定」を選択し、数式を入れます:

=COUNTA($B5:$F5)>0

※最初の「=」は省略できません、「COUNTA」は値が入っているセルの数を統計する、「B」と「F」の左に「$」が付いているのは、列は絶対参照するということです、「5」はその時の行番号です、複数行にこの条件付き書式を適用したいので、「5」の左には「$」を付けないです。
3.そして、塗りつぶしの書式を設定して、OKを押す。
4.最後、「B5:J5」を選択したまま、メニューから「条件付き書式」→「ルールの管理」をクリック、「適用先」は「=$B$5:$J:$5」になっていると思いますが、それを「=$B$5:$J:$33」に変えて「OK」を押す。

5.そうすると、ゴールの「B列からF列まで、一つでも値が入ってれば、B列からJ列まで全部塗りつぶす。」が達成できます。