2011年7月7日木曜日

高齢者の栄養スクリーニングツールMNAガイドブック 発売中です



高齢者に適した栄養スクリーニングツールであるMNA(Mini Nutritional Assessment)の本格的な書籍
「高齢者の栄養スクリーニングツールMNAガイドブック」が医歯薬出版社様より発売されました!

当社が開発・サポートを行なっております「MNA スターターキット」のCD-ROMが付属しています。
是非お試しください!
(利用にはExcel2000~2010のいずれかが必要です。Windows版のみ。)




MNA®て何?
6項目からなる栄養状態を把握するシートです。(ショートフォームの場合。)
詳しくはネスレ日本株式会社 ネスレニュートリションカンパニー様のWEBサイトをご参照下さい。

※医療従事者、関係者向けのサイトなので、詳細なページへの直接リンクはご容赦下さいm(__)m



Excelを用いたシステムのご相談、ツール開発、その他諸々、ご相談下さい!(∩´∀`)∩



2011年6月27日月曜日

Excel2010ってば・・・shapeがずれる!

Excel2010だと、他のバージョンに比べてShapeが右にずれる!

なので、Excel2010の場合、Shapeを左に3ポイントずらして描画することで対応するけど、
なんだか納得いかねぇ~なぁ~。

Excel2007だと印刷される罫線がExcel2010だと印刷されないんだよね。

まさか、Windows7の仕業(プリンタドライバ)じゃなかろう・・・・な・・・そこまで変わるか!?
ぬぬぬ・・・

印刷時にExcel2010の罫線が歯抜けになる現象

Excel2010の場合、印刷時に罫線が歯抜けになる事象が発生。
なんだよ・・・勘弁してくれよ・・・・

当然、2003と2007は正常に出力されるんだよね。
色の指定とかも疑ったのだが、試してみても印刷されない。
ほんと、頼むよぉ~、Excel。

で、ネットを漁っていたらヘッダーフッターの印刷が無ければ?OKだそうな。

今回は、フッターに画像を入れて印刷していたのだが、それをはずしてみた。
すると・・・・
罫線が印刷できたよ・・・
ほんと、勘弁してくれよなぁ・・・
なぁ~に、この仕様・・・
仕方ないので、フッターは使わずに画像を貼り付けることにするわ。

2011年6月10日金曜日

[Excel]シートを別ブックに保存する

こんちは。部隊長です。
梅雨でジメジメの蒸し暑暑ですが元気に行きましょう。寒いより暑いほうが好きです。女子は薄着になるし。

今回もまたExcelVBAで芸がないのですが、30分考えたので書き起こします。

そもそもあるシートを新規ブックとして起動させるには、

Dim sht as WorkSheet
Set sht = ThisWorkbook.Worksheets("対象のシート")
sht.Copy

これだけ。
対象シートが非表示の場合、Copyメソッドが失敗しますので、
ブックの保護解除とシートの可視化も導入

Dim sht as WorkSheet
Set sht = ThisWorkbook.Worksheets("対象のシート")
ThisWorkbook.Unprotect Password:=BKPWD
sht.Visible = True
sht.Copy
sht.Visible = False
ThisWorkbook.Protect Password:=BKPWD

この新規ブックを別名で保存するには、CopyするとWorkBooksがAddされたのと同じ状態になりますので、

'' 最後のブックを別名で保存
Workbooks(Workbooks.Count).SaveAs newFileNm, FileFormat:=xlNormal

します。ActiveWorkBookでもいいですが、Copyの後にActiveが動くような事があると・・・

というわけで全体のコードはこんな感じ。CSV形式での保存も対応しています。

Sub SaveAsOtherName

 Dim newName As String
 newName = _
     Application.GetSaveAsFilename( _
          InitialFileName:="デフォのファイル名" _
        , FileFilter:="エクセルファイル(*.xls),*.xls" & _
         ",CSVファイル(*.csv),*.csv" _
        , FilterIndex:=1 _
        , Title:="保存先の指定" _
        )

 If newName = "FALSE" Then Exit Sub
 If Dir(newName) <> "" Then
     If MsgBox("同名のファイルが存在します。上書きしてもよろしいですか?", Title:=MSGBOX_TITLE, Buttons:=vbYesNo) <> vbYes Then
         Exit Sub
     End If
 End If

 Dim sht As Worksheet: Set sht = ThisWorkbook.Worksheets("コピー対象シート名")

 ThisWorkbook.Unprotect Password:=BKPWD
 sht.Visible = True
 sht.Copy
 sht.Visible = False
 ThisWorkbook.Protect Password:=BKPWD

 Application.DisplayAlerts = False

 '' 新ファイル名称の拡張子で保存形式を判定しています。
 If CheckExtension("xls", newName) Then
     Workbooks(Workbooks.Count).SaveAs newName, FileFormat:=xlNormal
 Else
     Workbooks(Workbooks.Count).SaveAs newName, FileFormat:=xlCSV
 End If

 ActiveWorkbook.Close

 Application.DisplayAlerts = True

 MsgBox "保存しました", Title:=MSGBOX_TITLE
 
End Sub



divirta-se!

2011年5月28日土曜日

Softbankガラケーの画像が表示されない!?

灰皿なうのガラケー対応してから、Docomo、auは画像が確認できたんだけど、Softbankのガラケーだけ、うまくmapが取れていなかったことが、カミさんの携帯で判明。
この原因がわからん。

1件、探してヒットしたのが、3G以前のものはgif形式だとダメでjpgならOK、というもの。
早速、画像の形式を変更してみたけど(こんな感じ&format=jpg)うまく表示されない。

それで、さらに検索していると、同じようなQAを発見。
それによると、GooglemapAPIのバージョンによる記述式が異なり、v1の形式で記載しているからでは?とのこと。
あれ?そもそもv2って出てたの?と情弱ぶりを発揮しながらv2の構文で記述。

んー、出た出た。表示された。
なるほどね、こういうことだったのね。

v1とv2の違いにより変更した箇所はこんな感じ。
・最初んとこ
 V1の場合:<img src='http://maps.google.com/staticmap?
 V2の場合:<img src='http://maps.google.com/maps/api/staticmap?center=
・マーカーの設置
 V1の場合:marker=緯度,経度,色
 V2の場合:markers=color:色|緯度,経度

という話。

2011年5月26日木曜日

[訂正]Excelでカイ二乗検定

昨日の記事に誤りがありました。
最初のクロス集計表で、総合計欄が20の固定値になっておったんですな。
SUMに修正致しました。

正しくは下記の通りです。



確率としては4%に上昇しましたが、まだ5%未満で有意ですね。


しかし不思議なことに、総合計欄を動かすとCHITEST関数の結果も変わるんです。
この関数では合計欄見てないのに。。。なぜだろう?


サンプルファイルをダウンロード

2011年5月25日水曜日

[Excel]簡単カイ二乗検定

こんにちは。部隊長です。
最近統計処理を行う事が多いものですから、復習も兼ねてやり方を書いてみます。

【カイ二乗検定とは?】
クロス集計の結果が、統計的によくある事なのか否かを検定します。
これによって、カテゴリー毎の独立性が立証されるわけです。

【どういう時に使うの?】
例えば前日に酒を飲んだ人たちと、飲まなかった人たちで翌日の起きた時間帯に差があるのかどうかー
なんて事が統計的にわかります。


では、やり方。


1.クロス集計表を準備
検定を行いたいクロス集計表を準備します。




2.期待値を計算
このクロス集計表の期待値を計算します。
期待値とは・・・この例で言うと飲んだ人と飲んでない人を寝坊した人と寝坊してない人の割合で分けた値です。



飲んでなくて寝坊した人の期待値は、「寝坊した人の数×飲んでない人の数÷全体」となります。
これを4つのセルにそれぞれ貼り付けて、値を出します。


3.カイ二乗値を計算
カイ二乗値とは、実測値と期待値のズレを表します。
このズレが統計上の信頼確率範囲内ででるものか、そうでないかを検定するのが今回のゴールです。


各セルごとに「(実測値-期待値)の二乗÷期待値」で算出し、総和がこのクロス集計表のカイ二乗値となります。


4.確率を検定する
求めたカイ二乗値はカイ自乗分布に従います・・・ってなんのこっちゃですね。
詳しくはこちらを見ていただくとして、求めた値がどれくらいの確率で出現するものなのかを算出する関数が「CHIDIST(x,自由度)」です。


今回のクロス集計表は2×2マスですから、自由度は「(行の数-1)×(列の数-1)」で1となります。
算出された確率は・・・0.038 → 3.8%の確率となるわけです。
統計上、信頼確率範囲は用途により95%だったり99%だったりしますが、95%とするのであれば、このクロス集計表の結果から、酒飲んだ人と飲んでない人が寝坊するかどうかは関係が無い事が棄却された事になり、要するに飲んだら寝坊するみたいよ。有意に。って事になるのです。
・・・まどろっこしい。












5.もっと楽に確率を算出する =CHITEST(実測,期待値)


えっ?


カイ二乗値も自由度もいらない・・・



結論:理屈は大事。



2011年5月24日火曜日

位置情報(緯度、経度)をMySQLのGeometry型で保存する

こんばんは。BS事業部隊員です。

今回は、大好評(!?)「灰皿なう」にて採用している位置情報(緯度、経度)の保存方法を紹介します。

---Ads by ITC -----------------------------------------------------------------------------------------------------------------------------------------------------------------
ここでちょこっと宣伝です。
灰皿なう→近くの灰皿を検索するスマートフォン向け(特にiPhone)Webアプリ。舞浜にある有名テーマパーク内の喫煙所にも対応しています。喫煙所を登録することもできます。ぜひ、一度見に来てください。
灰皿なうFacebookファンページ→更新情報や、FAQなど載せてます。今後もパワーアップさせていきますので、乞うご期待です。
灰皿なうの付属品か中の人かどっちか(@smokerbot On Twitter)→こちらは、新しい喫煙所の情報やたばこに関する情報なんかをつぶやいています。とりあえず、フォロワー1000人が目標です。
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

これもまた得意のググりで見つけたものです。
位置情報サービスのはじめ方
Google MapsとMySQLの連携
※先輩方ありがとうございます。参考にさせていただきました。

MySQL(v5.0)のGeometry型.... 便利そう!とういうことで使ってみることにしました。
....
くわしいことは、先輩方のサイトを参考にしてください。詳しく載ってます。

ここでは、ポイントだけ。※ 例の位置情報は適当です。

1.Geometry型とは
MySQL4.1以降で用意されている空間情報を扱うデータ型

2.テーブル定義
対象カラムの型をGeometryとするだけ。
CREATE TABLE points (
  point_id INT NOT NULL
 ,latlon GEOMETRY NOT NULL
 ,PRIMARY KEY (point_id)
 ,SPATIAL KEY (latlon)
) Engine=MyISAM;
latlonカラムをSPATIAL INDEXとするため、MyISAMで使用します。

3.データの挿入
INSERT INTO points (
  point_id
 ,latlon
) VALUES (
  1
 ,GeomFromText('POINT(137.111 35.222)')
);
GeomFromTextはGeometry型に変換するMySQLの関数です。

4.データの取得
① 位置情報を取得する
SELECT
  point_id
 ,X(latlon) as lon
 ,Y(latlon) as lat
 ,ASTEXT(latlon) as geomtext
FROM points;
Xは経度、Yは緯度、ASTEXTは文字表現を返す関数です。

② 指定した範囲内の位置情報を取得する
SELECT
  point_id
 ,X(latlon) as lon
 ,Y(latlon) as lat
FROM points
WHERE MBRContains(GeomFromText('LINESTRING(140.00 36.00, 139.20 35.55)'), latlon);
MBRContains、LINESTRING関数については、このサイトに詳しく載ってます。

③ 2点間で一番近い位置情報を取得する
SELECT
  point_id
 ,X(latlon) as lon
 ,Y(latlon) as lat
 ,GLength(GeomFromText(CONCAT('LineString(137.111 35.222,', X(latlon), ' ', Y(latlon),')'))) AS len
FROM points
ORDER BY len
LIMIT 0 , 1
GLength関数は、2点間の距離を取得します。

かなり、省略してしまいましたが、こんな感じです。
足りない情報は、追記していきます。では。

2011年5月21日土曜日

Bloggerに「いいねボタン」を記事毎に設置したい

こんばんは。BS事業部隊員です。

今度は、最近当社で使い始めたFacebook。
このブログにも、いいねボタンを設置しました。

※ とりあえず、宣伝。。
当社のFacebookファンページ

ググってみました。

・bloggerでFacebookの「いいね」(Like)ボタンを設置するには


まるコピで、設置完了。

① [デザイン] - [HTML編集]で、「data:post.body/」を検索。

② その下あたりに、以下を追加。

<iframe allowTransparency='true' expr:src='&quot;http://www.facebook.com/plugins/like.php?href=&quot; + data:post.url + &quot;&amp;layout=standard&amp;show_faces=false&amp;width=100&amp;action=like&amp;font=arial&amp;colorscheme=light&quot;' frameborder='0' scrolling='no' style='border:none; overflow:hidden; width:450px; height:40px;'/>


以上で、設置完了です。

いっぱい、押していただけるよう、頑張ります。では。

[ExcelVBA] AdvancedFilterでGroupBy

こんにちは。部隊長です。
おなじみExcelVBAのAdvancedFilterを使って、ExcelのデータをDBのようにGROUP BYしてしまおうというネタです。

メニューから行くとフィルタオプションというのがありますが


これを使います。
一番最初にやるのは、GROUPしたい項目を抜き出すことです。
抽出元のシートから、ヘッダーにする項目をコピーし、抽出先のシートに貼っておきます。
同時に、データの抽出先としても貼りつけておきましょう。
この時に、抽出条件の下に条件を書けば任意のデータを抽出する事ができます。
ここでは鈴木さんの年齢をGROUPしてみます(どんだけ鈴木さんいんだよって話ですが)


抽出条件に="鈴木"と書いているのは、単に「鈴木」と書いた場合部分一致になってしまうからです。
また、部分一致の挙動が2002と2003以降等Excelのバージョンで異なるため、
誤動作を防ぐためには="○○"と書くとよいです。
先頭に=を書くと数式扱いになってしまいますので、セルの書式を文字列にするか、
先頭に「'」を打って文字列にしましょう。


それでは先程のフィルタオプションメニューを開き、
まずは抽出先に「選択した範囲」として、データ元にしたいセル範囲を指定しましょう。


次に先ほど用意した抽出先と出力先をそれぞれ
「検索条件範囲」と「抽出範囲」に指定します。

※抽出条件は、指定するしないに関わらずタイトル行入れて最低2行指定!



設定画面に戻ったら、「重複するレコードは無視する」にチェックを入れます。
じつはコレでGroupできるのです。



準備が終わったらOKを押してみましょう。
うまく抽出されましたか?



で、タイトルにVBAって書いたのに長々と操作の説明になってしまいましたが、
コードはこんな感じです。
データシートのフィルタモード解除、出力先のクリアを追加しています。
GROUPしたい場合、unqにTRUEを指定して下さい。


''' TEST
Private Sub test()

    Dim sh As Worksheet
    Dim db As Range, crt As Range, ext As Range
    
  '' 結果のシート
    Set sh = ThisWorkbook.Worksheets("抽出結果シート")
  '' データ範囲指定
    Set db = ThisWorkbook.Worksheets("データ").Range("A:X")
  '' 抽出条件(タイトル含め条件の行数全部)
    Set crt = sh.Range("A2:B3")
  '' 抽出先(タイトル行のみ指定)
    Set ext = sh.Range("D2:E3")
    
    If doAdvancedFilter(db, crt, ext, True) Then
       '’成功
    End If
    
End Sub

''' AdvancedFilter実行
''' データレンジのシートがフィルタされてたら解除する
''' 抽出レンジのデータは末尾までクリアする
''' 検索レンジが1行の場合エラー
''' 検索レンジは2行以上指定すること
Public Function doAdvancedFilter(ByVal dbRange As Range, _
                            ByVal crtRange As Range, _
                            ByVal extRange As Range, _
                            ByVal unq As Boolean) As Boolean

On Error GoTo Err:
    
    Dim sht As Worksheet
    
    If crtRange.Rows.Count <= 1 Then
        MsgBox "抽出条件が不正です"
        Exit Function
    End If
    
    Set sht = dbRange.Parent
    If sht.FilterMode Then sht.ShowAllData
   
    '' 最大行数
    Dim mxR As Long
    Set sht = crtRange.Parent
    mxR = sht.Rows.Count
    
    '' extRangeクリア
    Dim fCell As Range
    Set fCell = extRange.Range("A1")
    fCell.Offset(1, 0).Resize(fCell.Offset(1, 0).End(xlDown).Row - fCell.Row, extRange.Columns.Count).Clear
   
    '' Filter実行
    dbRange.AdvancedFilter xlFilterCopy, crtRange, extRange, unq
    
    doAdvancedFilter = True
    Exit Function
    
Err:
    MsgBox Err.Description

End Function

抽出条件を色々工夫して大変なデータ処理を楽に済ませちゃいましょう!


Bloggerでソースコードをかっこよく表示したい

はじめまして。ビジネスサービス事業部隊員です。

我が事業部隊長の命を受け、ブログに参戦することになりました。
よろしくお願いします。

あいさつはこのくらいにして、、


このブログのソースコードをきれいに表示しようと、早速ググッてみたところ、

・コードをハイライトする「Blogger Syntax Highlighter」ウィジェット     http://www.kuribo.info/2008/06/blogger-syntax-highlighter.html

Syntax Highlighter」というライブラリを発見。
 ※ ソース→http://code.google.com/p/syntaxhighlighter/

簡単だね。と思われましたが、そうでもなく、、

・Blogger Syntax Highlighter 導入(いろいろトラブった)
    http://micchysdiary.blogspot.com/2011/04/blogger-syntax-highlighter.html

最近の古い(?)ブラウザじゃないと簡単にはいかない模様。

・BloggerにおけるSyntaxHighlighterの使い方
    http://moririn-web.blogspot.com/2010/03/bloggersyntax-hilighter.html

ここの情報が比較的新しいらしいので、ここを参考に実践してみました。

[手順]
① Bloggerの設定から、[デザイン] - [HTMLの編集]で、上記サイトよりコピーしたソースを<head></head>内に追記。保存。


これだけ。簡単でした。

var sample = function(){
alert="Hello!! World!!";
}

が、こんな感じになります。

var sample = function(){
 alert="Hello!! World!!";
}

いいかんじ~

使い方は、

// ここにコードの内容

「*****」は、ここから使いたい言語のBrush aliasesに書き換えればOK!

エディターでソースを書いて、[HTMLの編集]で<pre>~</pre>で囲むだけ。

では。

2011年5月18日水曜日

facebook open graph error. Try again shortly or reload the page -

facebookにFAQを追加しようとFAQアプリを追加。
FAQを、「灰皿なう」に追加してみたのですが、facebook open graph error. Try again shortly or reload the page -なるメッセージが表示され上手く動作していない模様。


その対応策を調べても英語サイトばっかで良くわからん。

そこで試しに「会社のページ(IT-CRAFT)」に追加してみたところ、正しく動作。
この二つのページの違いで影響しそうなところは・・・・

年齢制限。
そこで年齢制限を変えてみた。

この年齢制限を「誰でも」にしてみたら、正常に動作した。


・・・という話です。

2011年5月16日月曜日

Windows2008Server タスク起動備忘録

Windows2008Serverのタスクスケジューラでbat形式のファイルを実行する場合。

プログラム/スクリプト欄にcmd.exeを指定する。
引数の追加欄に/c batファイル名を指定する。

すると、動きます。備忘録的な。

ADODBとASP.net

現在、保守しているシステムでASP.net(Visualstudio2003) + ADODBといった構成のものが有ります。
開発当時は、様々な技術の過渡期であったことからこのような構成になったことが推測されます。

ただ、これまでこの環境下で安定的に運用されていたシステムですが、いきなり不機嫌になり、
「System.NullReferenceException : オブジェクト参照がオブジェクト インスタンスに設定されていません。」
が出現。
ん?

えーーーー!なにこれ!?こんなの初めて出たし、そんなところに変更加えたりしていないんだけど!
データかな?
と思い調査すると、データには問題なし。まぁ、そりゃそうだよね、これまで動いていたんだし。

更に、開発環境では上記事象が発生せず、本番環境のみで発生するという状況。
ソースを比較しても全く同じ。
参照設定等の環境周りについても同じ。

これには参った・・・・
が、これじゃないっすか?「http://support.microsoft.com/kb/810098/ja」なったことありんす。的な助言を受けて、あー、きっとこれだと、これしかない!と。

それで、該当プロジェクトの参照設定を外してロジックを見直してGO!
具体的には adodb.~ を全て削除して、
dim con,rs
con = Server.CreateObject("ADODB.Connection")
rs = Server.CreateObject("ADODB.Recordset")
といった感じに変更。

で、先方のテスト環境へ設置後、動確OK!
本番もOK!
いやぁ、良かった!

SqlServer2005のアンインストール

過程がわからないので、どういう順序でそうなっていたかは不明なのですが、とあるサーバにはSqlServerの2005と2008がセットアップされていました。

ちなみに、OSはWin2008Std。

ただ、2005については正しくインストールされていない可能性があるので、一度、アンインストールして再度、インストールしたいとの事。

まずは2005の削除、ということでアンインストールに臨みます。
しかし、「プログラムと機能」の一覧でSqlServer2005が表示されないので、どうしようかと。
ぐぐったところ、http://support.microsoft.com/kb/909967/ja でやり方が示してあったのでその通りに実行。

  1. SQL Server 2005 のインストール元のメディアを用意します。
  2. サポート ファイルをインストールするには、Servers\setup\sqlsupport.msi ファイルをダブルクリックします。
  3. コマンド プロンプトで、次のコマンドを実行します。
    "%ProgramFiles%\Microsoft SQL Server\90\Setup Bootstrap\ARPWrapper.exe /Remove" #ちなみに僕はSetup Bootstrapに移動して「ARPWrapper.exe /Remove」を実行。
     まぁ、同じことだけどね。

すると、見慣れた画面が表示され、無事、対象のインスタンスのみアンインストールに成功。
ここで失敗すると、また面倒だと思ったのですが素直に削除されてくれてよかった。

で、再度2005を入れて無事、作業完了。

2011年5月10日火曜日

facebookとtwitterを連動させてみた

なるほど、FaceBookってすごいな!
「何が」といわれてもあれだけど。
ちなみに、うちのサービスのFaceBookを登録したのね。「灰皿なう」という喫煙所を検索するサイトなんだけど。
FaceBookにはご存じの通り、ウォールがあるんだけど、こことTwitterを連動できるとの事でやってみた。
まぁ、通常とおり自分のとこに投稿するのは大したことじゃないんだろうけど、ここでのミッションは、あくまでつぶやいた内容が「灰皿なう」としてウォールに投稿することだ。

その方法としては、FaceBookからTwitterを連携するときに、多分、サービスサイトの管理者になっていたらだと思うんだけど、チェックボックス的なものが二つ表示される。

その片方のチェックボックスの傍らにはドロップダウンリストがあって、そこには自分が管理者になっているサイトが一覧されるから、今回対象とした「灰皿なう」を選択したわけ。

説明がわかりにくくて申し訳ないけど、まぁ、そんなわけです。

あまりにわかりにくそうだから、その途中途中の画像を上げてみた。


2011年5月5日木曜日

いまさらですが「いいね!」

会社のサイトに「いいね」ボタンを付けてみました。
なんだか、自分で「いいね!」をクリックするのはちょっと照れ臭いなぁ。

知り合いに、片っ端からクリックしてもらうことにしよう。(笑

「いいね!」ボタンの付け方は簡単。
http://developers.facebook.com/docs/plugins/ のLike Button に移動して、そこにある入力項目(URL to Like )に対象のURLを入れる。
それで、僕はスペース的にこじんまりとさせたかったので、Send Button等は未チェック状態にしてLayout Style はbutton_countをチョイス。

で、「Get Code」をクリックすればコードが表示されるので、上段(iframe)の内容をコピーして、対象となるサイトのお好きなところに埋め込みます。
 
ついでに、会社のFaceBookも作成。

2011年4月29日金曜日

Excelがおかしくなったんだけど。

んー、GWだからどこ行っても混雑しているだろーと、タスクをこなそうと事務所に来たわけです。
しばらくは順調にExcelのマクロを組んでいたのですが、しばらくするとExcelがセーフモードでしか起動しない状態に。(ちなみにExcelは2007)
しかも、悪いことにExcelのアンインストールをしようとしても1704とかってエラーが発生してそれもできない。
最悪。
こんなことのためにGW来たのではない!
で、まずはどうしてもアンインストールしたかったので、あえてCDからオフィスを「Excel抜き」でセットアップしたあとにOfficeをまるごとアンインストール。
したらアンインストールは出来たので、安心してExcelをインストール。
で、開発を再開!と思ったら、またセーフモードじゃないと起動できない。

ん~、困った。
きっと、あやしい起動情報がレジストリに保存されているはず。
そこで、再度、Officeをアンインストール。
そのあと、Excelで検索して該当したレジストリを削除!
※但し弥生とかその編のソフトに絡んでそうなレジストリは削除しちゃだめだけど。
きっと真似はしない方が良いと思います。

で、起動情報あたりのヤツがきっと削除できたんでしょう。
再度Officeをインストールしたら無事に起動しました。

ぁ~、変なとこに時間を使ってしまった。

2011年4月25日月曜日

用語集が欲しくてpukiWikiをいれてみた

自社サービスを作るにあたって、そのサービスに関わる業務の用語集が欲しくなりました。
できればその用語集はサービスをリリースした後に有効活用できるものが良い!ということで、PukiWikiを導入してみました。

んー、設定は簡単!
PukiWikiからダウンロードして、展開。
そして、レンサバにディレクトリこさえて、そこに展開したものをアップロードして、INSTALL.txtに従ってパーミッションを設定すれば、すぐ使えた。
素敵。

で、トップページを編集しようとしたら、何やら怪しいメッセージ。
「Maybe permission is not writable or filename is too long」
探ったら、下記のファイル属性を666へ変更することでOKっぽい。
cache/recent.dat
cache/entities.dat
wiki/*.txt

結果、OKでした。
とりあえず、wikiはOK!

2011年4月15日金曜日

2008r2 GestOSのライセンス認証 vol1

WindowsServer2008R2はStandardEditionの場合、Hyper-vにより仮想化して作成したGestOSに1ライセンスまで、同ライセンスでの利用が認められているようなのです。
で、これは!ということで早速利用。
んで、ライセンス認証をしようとしたところ、こんな感じ。


ライセンス認証を放置しておくと、いずれアクセスできなくなるので(期間は忘れたけど)、認証はどうやるのかな、と思ってMSに問い合わせたところ、ちょっと待ってちょうだいとのこと。
どんくらい待てばよいかはわからないけど「期限が来る前に指定した電話に問合せして」と教えてもらいました。

今は仮想化での認証の問い合わせも含め、混雑しているとのこと。
しばらくしたら問い合わせてみよう。
ちなみに、インストールに仕様したのは物理、仮想ともにOEM版ね。
→つづく

2011年3月24日木曜日

WPFに挑戦してみた

今回、ちょっとした事からWPFに挑戦してみました。
で、イカシタ仕上がりになるってんでExpressionBlendを使ってみてます。
ExpressionBlendはそれ自体がイカシタ雰囲気を醸し出している(と思ってる)のでそれだけでも気分がいつもと違う。気がする。

WebsiteSparkのお陰で無料だし。

ん~、それでWPFはデータグリッドのところで戸惑ったけど、他はすんなりいきそう。
XAMLはasp.netの経験が有る人はすんなりいけるのではないでしょうか?
とまだとりかかったばかりなので、これから躓くのでしょうけど・・・

で、昨日の一つとしてGoogleMapをうまい具合に表示させたかったのですが、「アカベコさん」という方が既に確認していたので、それをまるパクリして動かしてみました。
うむ、イイかんじ。

ね?なかなか素敵でしょ?
といってもまるパクリなわけですが。


2011年3月16日水曜日

サーバが静かすぎて感動

先週、サーバを新たに調達したのですが!
これが、なんとも静かで素敵!

これまで、メインで使っていたサーバは1Uのラックマウントタイプで、古いせいもあってか、ファンの音が非常にうるさかった!
今回調達したのはDellのタワー型なんだけど、ものすごい静か!
こりゃすごいわ。
とても感動しますた。
で!梅の香巻は食べ始めたら止まらないから困る・・・


2011年2月16日水曜日

adbが無いんだけど・・・

今、ちょっとAndroidアプリの構築をお試し中で、開発環境を構築しています。

で、環境構築中にadbの利用とあります。
このadbを利用するには事前にtoolsというフォルダにパスを通しておくことが必要なんですが、
パスを通したのにadbコマンドをたたいてもそんなの無いよ、と言われます。
(ちなみに、Windowsで環境を構築しています)

で、よくよく見てみたら、android-sdkの中に、toolsとは別に「platform-tools」というフォルダがあって、そちらにadb.exeというものを見つけました。

うん、これだ。

ここにパスを通すことで、使えるようになりました。


2011年2月8日火曜日

GMAILの便利機能

こんにちは。部隊長です。
今回はちょっと脱線してGMAILの便利機能を1個ご紹介。

ご存じGMAILは他のPOPメールアカウントからメールを受信する事ができます。
これのお蔭で、ローカルにたまっていたメール本体がネット上に置ける事になり、
実質どこでもお仕事状態です。怨みます

しかしながら、POPアカウントからの受信は、
設定→アカウント→各アカウントでメールをチェックをクリック
しないとオンデマンドで受信できなかったんですよね。

しかし最近Laboをなんとなく見ていると発見しました







これだ!

「POPアカウントの更新」



こいつを有効にしておくと、
受信トレイの更新ボタン



で他のPOPアカウントを受信してくれるんですね!
さすがGoogle先生!太っ腹!


ちなみに僕はGmailの受信トレイは未消化のタスク置き場として使っています。
消化したものはタグつけてさっさとアーカイブです。
メルマガとか揮発性の情報はタグもつけずアーカイブか削除です。


また便利機能が見つかったらまたUPしようと思います。おもうだけかもしれません。

2011年2月1日火曜日

[Excel]VBAコードのバージョン管理

こんばんは。部隊長です。
今回も引き続きExcelVBAのネタです。

Excelでの開発は、Excelファイル本体がバイナリであるため
バージョン管理を行う事が困難です。
(2007以降はzip解凍してxml形式になるようですが・・・)

また、VBAのモジュールは開発が進むにつれ、履歴がたまりファイルサイズが大きくなります。
モジュール自体が破損する事も多いようですね。
そういうときの対処として、モジュールを全てエクスポートし、インポートし直すと最適化される、
というのがネットに載っています。

それであれば、モジュール自体でソース管理してしまった方が良いでしょう。
モジュールはテキストファイルですので、バージョン管理ソフトとの親和性も高いです。

そこで、モジュールファイルを一括してエクスポート、
または全て解放後、一括してインポートするコードをご紹介します。

本体のファイル直下にForm、Class、Module、それぞれのフォルダを作成し、エクスポートするコードと、それらのフォルダからインポートするコードです。

一括エクスポートした後はVSSなりSVNなりにコミットしたって下さい。

''-----------------------------------------------------------------------
'' 全プロジェクトファイルエクスポート(ブック・シートに付随するコード以外)
'' 事前にマクロのセキュリティ→VBAのオブジェクトモデルへのアクセスを許可する事(実行時エラーになります。)
''-----------------------------------------------------------------------
Private Sub Export_All()

    Dim Path As String
    Dim i As Integer
    
    Const cls As String = "\Class\"
    Const FRM As String = "\Form\"
    Const MODL As String = "\Module\"
    
    Const EXT_MODL As String = ".bas"
    Const EXT_CLS As String = ".cls"
    Const EXT_FRM As String = ".frm"
    
    Path = ThisWorkbook.Path
    
    '' エクスポートフォルダ
    If Dir(Path & cls) = "" Then MkDir (Path & cls)
    If Dir(Path & FRM) = "" Then MkDir (Path & FRM)
    If Dir(Path & MODL) = "" Then MkDir (Path & MODL)
    
    With ActiveWorkbook.VBProject
    
        For i = 1 To .VBComponents.Count
        
            Select Case .VBComponents(i).Type
            Case 1  '' vbCompTypeModul
                .VBComponents(i).Export Path & MODL & .VBComponents(i).Name & EXT_MODL
            Case 2 '' vbCompTypeClassModul
                .VBComponents(i).Export Path & cls & .VBComponents(i).Name & EXT_CLS
            Case 3 '' vbCompTypeUserform
                .VBComponents(i).Export Path & FRM & .VBComponents(i).Name & EXT_FRM
            End Select
        Next
    
    End With
    
End Sub


''-----------------------------------------------
''--プロジェクトファイル洗い替え-----------------
''-----------------------------------------------
Private Sub Refresh()

    Call Release_All
    Call Import_All

End Sub


'' 全プロジェクトファイルリリース
Private Sub Release_All()

    Dim i As Integer
    Dim colComName As New Collection
    
    With ThisWorkbook.VBProject
   
        For i = 1 To .VBComponents.Count
            If .VBComponents(i).Type = 1 Or .VBComponents(i).Type = 2 Or .VBComponents(i).Type = 3 Then
                colComName.Add (.VBComponents(i).Name)
            End If
        Next
    
        For i = 1 To colComName.Count
            .VBComponents.Remove .VBComponents(colComName(i))
        Next
    
    End With
    
    Set colComName = Nothing
    

End Sub

'' 全プロジェクトファイルインポート
Private Sub Import_All()

    Dim Path As String
    Dim i As Integer
    
    Const cls As String = "\Class\"
    Const FRM As String = "\Form\"
    Const MODL As String = "\Module\"
    
    Const EXT_MODL As String = ".bas"
    Const EXT_CLS As String = ".cls"
    Const EXT_FRM As String = ".frm"
    
    Path = ThisWorkbook.Path
    
    Dim fso As Object
    Set fso = CreateObject("Scripting.FileSystemObject")
    Dim fileList As Object
    
    '' Cls
    Set fileList = fso.GetFolder(Path & cls).Files
    For Each file In fileList
        ActiveWorkbook.VBProject.VBComponents.Import Path & cls & file.Name
    Next
    
    '' Form
    Set fileList = fso.GetFolder(Path & FRM).Files
    For Each file In fileList
        If Right(file.Name, 4) = EXT_FRM Then
            ActiveWorkbook.VBProject.VBComponents.Import Path & FRM & file.Name
        End If
    Next
    
    '' Module
    Set fileList = fso.GetFolder(Path & MODL).Files
    For Each file In fileList
        ActiveWorkbook.VBProject.VBComponents.Import Path & MODL & file.Name
    Next
    

End Sub




これをアドインにしてインストールして置くと便利。
但し、シートオブジェクトやブックオブジェクトに記述されているコードは対象外となるので、
そこらへんは手作業なのが玉に傷。



ネタ元はネットに散らばっていた情報ですので、ご利用は自己責任でお願いいたします・・・ 



2011年1月29日土曜日

[EXCEL]Chart.Export makes 0byte File

こんちは。Azureの続きをやるやる詐欺続行中の部隊長です。
今回もAzureはちょっとおいといて、絶賛進行中のプロジェクトから1ネタ。


現在進行中のプロジェクトで、某社販促グッズとして提供している某Excelブック(以下ツール)の改修を行っております。なんのこっちゃですね。

このツールでは集計したデータでグラフを作成し、それをフォームで表示するために一旦gifにExportしているんですね。

こんな感じで。

'' グラフタイトル設定
        .ChartObjects(1).Chart.ChartTitle.Text = GRAPHTITLE_ALL & " n=" & .Range(VALUE_N).Value        
        '' 画像ファイルのExport
        .ChartObjects(1).Chart.Export ThisWorkbook.Path & GRAPHPICT_ALL

このコードはExcel2000から2007まで問題なく動作します(97以前も動くかもしれんけど)
で、基本的に2010でも動くはず。

と思ったら、フォーム側のImageにロードする時にエラーが・・・


何故だと思ったら、出力されたファイルが0kbなんですね。空っぽです。
ググっても殆ど情報は出てきません・・・

そこで試しに簡単なサンプルを書いたら問題なく動作します。なんで?




対象のグラフが載ってるシートは非表示・・・!サンプルは表示・・・!


というわけでVisibleにしてやったらちゃんと動いた、というわけでした。
しかし、このブックはパスワードでロックされていて、表示するにはUnLockしなければならない・・・


というわけでこうゆう事になりました

'' Visible Befor Export (for Excel2010)
     ThisWorkbook.UnProtect password:="XXXXXXXXX"
        .Visible = xlSheetVisible
        
        '' 画像ファイルのExport
        .ChartObjects(1).Chart.Export ThisWorkbook.Path & GRAPHPICT_ALL
        
        .Visible = xlSheetHidden
     ThisWorkbook.Protect password:="XXXXXXXXXX"
        '' --

これはちょっと行き当たりばったり過ぎだろJK・・・
つかこんなとこにパスワード書くなよ。書き直し。


教訓:非表示シートを弄る際はお気をつけ下さい。


2011年1月24日月曜日

喫煙所検索サイト

喫煙所検索サイトを復活させてくれました。
といってもiPhone用だけど。
なので、IEでは上手く見えません。
http://kensaku.serve55.net

ちなみに、喫煙所の登録が可能!
問題は、GPSの精度だけど、きっと解決してくれるハズ。


2011年1月5日水曜日