2017年6月
        1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30  

« 2007年8月 | トップページ | 2007年10月 »

2007年9月30日 (日)

▼ダイエット大作戦(6ヶ月で10Kg減)

9月も今日で終わりダイエットを開始してから約6ヶ月が経過しました。体重は-10Kgとなりました。今週はちょっとリバウンド気味でしたがなんとかここまで到達しました。まだまだ標準体重にはほど遠いですがベスト体重の75Kgを目標に今後もがんばりたいと思います。

ダイエット大作戦20070930

2007年9月29日 (土)

¥Money(投信生活070929)

今週も新興国投信が絶好調。最終損益も400万円台に乗りました。国内株式投信も日経平均株価が上昇基調になってきたためか回復してきたようです。新興国投信があまりにも好調すぎて、なぜ好調なのか理由付けする情報を持ち合わせておらず半信半疑なのでのでここらで一旦利益確定しておこうか考えています。

現在の運用成績(2007/09/29)

2007年9月23日 (日)

▼ダイエット大作戦(77Kg台突入)

減量のペースが上がってきました。77Kg台に突入です。先週今週と3連休なので月曜もジョギングが出来ているからでしょうか。残暑が厳しいですが夜はジョギングがし易くなり正味1時間程度の運動時間だったものが45分位にスピードアップして来ました。体が軽くなって気候も楽になってきたのが良いのかもしれません。
ところで、8/26で書いたこんにゃく麺はまずいので一回食したきりでそれ以降食べてません。やはりまずいと続きませんね。それよりもヴァームウォーター(VAAM)が良いですね。スポーツ飲料で私の知る限りカロリーゼロなのはこれだけです。ちょっと高価ですが宣伝通り体脂肪を効率よく燃焼してくれている気がします。運動(1時間弱のジョギングと10分のダンベル)と食事(夜だけ炭水化物抜き)と水分補給(VAAM)でここまで到達しました。

ダイエット大作戦20070923

2007年9月22日 (土)

¥Money(投信生活070922)

およそ2ヶ月ぶりの投信生活です。やっとサブプライムショックが落ち着いてきた雰囲気がありますね。一時は評価損益はマイナスにはならなかったものの50万円ほどになってしまいかなり狼狽しましたが、新興国投信が絶好調になってきたので300万円まで回復しました。これで米国のサブプライム問題が落ち着いてくれば国内株投信も少しは回復してくれるのではと期待しています。

現在の運用成績(2007/09/22)

2007年9月16日 (日)

▼ダイエット大作戦(ついに”普通人”に)

ついにBMIが”普通”に突入し、やっと肥満人から普通人になってきました(一瞬かもしれないけど)。今週も土日のジョギングでしたが朝晩2回走るようにしています。朝走るのもだいぶ苦ではなくなってきました。しかし、ひと頃よりは湿度が少なく秋の気配がしてきましたが、ここ数日は残暑が厳しいですね。日焼けには気をつけなければ。
この3連休で走りこんで70Kg台を定着させたいものです。

ダイエット大作戦20070916

2007年9月 9日 (日)

▼ダイエット大作戦(一進一退続く)

今週も土日のジョギングです。なかなか70Kg台が定着しません。週末でなんとか70Kgに戻すといった状態を繰り返しています。

ダイエット大作戦20080909

2007年9月 6日 (木)

◆Excel VBA(ブックとマクロを分離する方法)

今回は、ブックとマクロを分離する方法をご紹介いたします。
通常、ブックにマクロを組み込んで配布してしまいがちですが、予め配布するブックとそれを操作するマクロを分離しておくと、不具合などが発生した場合はそのマクロだけ修正すれば再配布を最小限にすることができます。なぜ最小限かというと、ブック側の行や列を追加するといったレイアウトの変更の場合はブックの再配布が避けられないからです。
では、その方法ですが、ブック側とマクロ側に分けて解説します。

■ブック側
マクロ側にロジックを分離するといっても、ブック側に処理がなくなるわけではなく、マクロ側の処理を呼び出す命令を記述しなければなりません。
例えば、ボタンを配置して、そのボタンの処理を下記のように記述しておきます。
コンスタントの内容はシート上に定義しておくのも良いでしょう。

Const cMacroName As String = "【macro】.xls"
Const cMacroPath As String = "Q:\tool\" & cMacroName

Sub ボタン1()
    Workbooks.Open cMacroPath, ReadOnly:=True
    Application.Run (cMacroName & "!Button1_Click")

End Sub

Sub ボタン2()
    Workbooks.Open cMacroPath, ReadOnly:=True
    Application.Run (cMacroName & "!Button2_Click")

End Sub

■マクロ側(【macro】.xls)
下記例のように実際のロジックを記述します。
ブック側からオープンされるので、【macro】.xlsは非表示ブックにしておくと見た目がすっきりするでしょう。
ブック側を大勢のユーザに配布しても、このマクロ側の処理を変更するだけで即座に仕様変更等に対応できるという訳です。

Sub Button1_Click()

    Show.Dialog1

End Sub

Sub Button2_Click()

    Show.Dialog2

End Sub

マクロ側を普通の.xlsファイルとしていますが、アドインファイルにするという方法もありますが、機会があればご紹介いたします。

2007年9月 5日 (水)

◆Excel VBA(マクロ側からVisual Basic Editorを操作する方法)

今回はマクロ側からVisual Basic Editorを操作する方法を書いてみたいと思います。

職場でVBAマクロのツールを作成していたりすると、始めは良いのですがそのうち機能追加や仕様変更などが発生して、マクロを修正することがあります。ブックにマクロを実装して複数の人に配布していると、下手をするとマクロの修正が発生するたびに、配布済みの大量のブックを直接修正する羽目になります。新しいブックを再配布して、利用者にシートを入れ替えてもらうといった手間を強いるケースも考えられます。
以上を考慮すると、予め複数の人が使用することが分かっている場合はブックとマクロを分離しておくことが望ましいです。分離する方法は次回述べますが、今回は既に多くの人に配布してしまったブックのマクロを置き換える方法をご紹介いたします。

■前提/作業の流れ
(1)まず、マクロが実装されているブックを多くの人が使用している職場を想定します。
(2)そのマクロにバグが発見されたり仕様変更で、マクロの修正が発生したとします。
(3)その配布済みの全てのブックのマクロを読み込みつつ、新しいマクロに置き換えていくというスペシャルマクロを作成する
(4)利用者には予め修正予定日時を周知し、その間は使用しない旨連絡し、スペシャルマクロを実行する。
完了したらその旨連絡して終了。

以下はスペシャルマクロのサンプルです。
長々と書きましたが、ここでようやく題名のVisual Vasic Editorを操作するロジックが必要になります。

Sub ModuleInportAll()
    Dim i As Integer
    Dim cPath
    Dim oVBC As VBComponent
    Dim cSavePath As String, cKaku As String, lFileName As String, lName As String
    Dim lFlg As Boolean
   
    If vbYes <> MsgBox("インポート対象のブックをアクティブにしてください。" & Chr(10) & _
            "VBAProjectにパスワードが設定されている場合は解除しておいてください。" & Chr(10) & _
            "実行しますか?", vbYesNo + vbQuestion, "実行確認") Then Exit Sub
   
    'ファイル指定&パス、拡張子取得
    cPath = Application.GetOpenFilename("*.*ファイル (*.*), *.*", MultiSelect:=True, Title:="★★★ ファイル選択 ★★★")
    If Not IsArray(cPath) Then Exit Sub
   
    For i = 1 To UBound(cPath)
        cSavePath = Left(cPath(i), InStrRev(cPath(i), "\"))
        cKaku = Mid(cPath(i), InStrRev(cPath(i), "."))
        lFlg = False
        For Each oVBC In ActiveWorkbook.VBProject.VBComponents
            lFileName = oVBC.Name & cKaku
            If Dir(cPath(i)) = lFileName Then
                lFlg = True
                lName = oVBC.Name
                Exit For
            End If
        Next oVBC
       
        'モジュールが存在したら入れ替え、存在しなかったら追加
        With ActiveWorkbook.VBProject
            If lFlg = True Then
                .VBComponents.Remove .VBComponents(lName)
                .VBComponents.Import (cPath(i))
            Else
                .VBComponents.Import (cPath(i))
            End If
        End With
    Next

    Set oVBC = Nothing
End Sub

解説すると、予め修正後のマクロをエクスポートしておき、上記のロジックで既存のマクロを置き換えていきます。
マクロを実行するには下記3点の注意が必要です。
・Microsoft Visual Basic for Application Extensibilityの参照設定が必要になります
・アクティブブックのVBAProjectにパスワードが設定されている場合は解除しておきます
・Excel2002からはセキュリティが強化されているらしく、「プログラミングによるVisual Basic プロジェクトへのアクセスは信頼性に欠けます」というエラーメッセージが表示されます。そのような場合は、Excelメニュー「ツール」→「マクロ」→「セキュリティ」→「信頼できる発行先」→「Visual Basicプロジェクトへのアクセスを信頼する」にチェックしてから実行するようにします

さて、ロジックの中身ですが、GetOpenFilenameで予めエクスポートしておいた.basファイルを読み込み、For i = 1 To UBound(cPath)でモジュール単位に処理を繰り返します。少し汎用的に、同じモジュールが存在したら入れ替え、存在しなかったら追加する作りにしています。
よかったらお試しください。

2007年9月 4日 (火)

◆Excel VBA(カスタムツールバーのボタンからマクロへ引数を渡す方法)

今回はカスタムツールバーのボタンからマクロへ引数を渡す方法です。
いろいろ機会のある度に調べたり試したりして出来なかった長年の疑問がやっと解決してとてもスッキリした気持ちです。
複数のボタンから同一のプロシージャを設定すれば当然同じ機能が実行されますね。でも、ボタンによって微妙に処理を切り分けたいときに、ボタン数分プロシージャを作成するのはロジックが冗長的になりメンテナンスが煩雑になります。そこで、ボタンから実行するプロシージャは一つで、どのボタンから実行されたかを引数で判定すれば、共通処理とボタン固有のロジック部分とでスッキリとします。ではその手順を以下に記述します。

(1)プロシージャ側の記述(イメージ)
プロシージャはPublicで作成します。Privateだとボタンから呼び出せないようです。
引数はOptionalで受け取ります。

Public Sub Main(Optional pArg As Integer)

     共通処理
    
     'ボタン固有の処理
     Select Case pArg
     Case 1
        ボタン1の処理
     Case 2
        ボタン2の処理
     Case 3
        ボタン3の処理
        ・
        ・
        ・
     End Select
    
End Sub

(2)カスタムツールバー側の設定
カスタムツールバーを作成し、ボタンを配置します。
ボタン1の「マクロの登録」のマクロ名の設定を @@@@@.xls!'Main 1'と、プロシージャ名 + ブランク + 引数をシングルクォートで括ります。ボタンごとに別の引数を設定してやれば処理を切り分けることができます。

シングルクォートで括るところがポイントです。市販のマニュアル本などでは結構当たり前のテクニックだったりするのかもしれませんがこれを発見したときは本当にうれしかった!!お試しください。

2007年9月 2日 (日)

▼ダイエット大作戦(5ヶ月で8Kg減)

今週も週末三日間のジョギングです。ここ一ヶ月ほど週末のジョギングが定着して来てしまいました。ところで最近涼しくなりましたね。猛暑の中(それでも夜ですが)でのジョギングがウソのようにとても走りやすい。自分が速くなったような錯覚さえ起こすくらいです。ジョギングではなくランニングに近くなってきたかな。体重は株価のように上昇下降となりましたが、なんとか70Kg台に戻しました。
さて、ダイエット大作戦を始めて5ヶ月が経過しました。途中仕事の忙しさや暑さで挫折しそうになったこともありますが、ブログで報告するというモチベーションがあるおかげでここまで継続してこられた気がします。”標準"人間に戻るためにもこれからも焦らずじっくりと頑張って行こうと思います。

ダイエット大作戦20070902

2007年9月 1日 (土)

◆Excel (ファイルサイズの肥大化を解消する)

今回は職場で問題になったExcelブックのファイルサイズ肥大化解消について書いてみたいと思います。ネットで検索するといろいろと情報はありますが、私の経験から確実にファイルサイズが縮小するワザをご紹介します。
そもそもExcelブックのファイルサイズの肥大化とはなにかというと、あるファイルをずっと修正したりしていくとファイルサイズがどんどん大きくなるということです。これはAccessでもWordでも言える事です。ではなぜこのようなことが起きるのでしょう。その原因が分かれば解決法も分かります。Excelについて言えば原因と解決方法は以下のようなものです。ちなみにExcel2000/2003で有効であることを確認しています。

■原因
(1)ExcelVBAを何度も修正して保存を繰り返すことによりファイルサイズが増大
(2)「ブックの共有」設定で複数人がファイルを更新することにより、”変更履歴”が増大
(3)見た目以上のデータがシートに入力されているとExcelが認識している
(4)罫線や関数、条件付き書式や入力規則を大量に設定している
(5)ビットマップやグラフなどが貼ってある
(6)ブック内に大量のシートが追加された(シートが非表示になっていて見た目は少ない場合もある)
(7)もともと図などのシェイプオブジェクトが貼り付いていたが行を削除したため、見た目はオブジェクトが見えない

■解決方法
(1)Visual Basic Editorを開き、モジュールを選択し右クリックメニューから「Moduleの解放」→「削除する前にModuleをエクスポートしますか?」→「はい」で一旦モジュールを削除およびbasファイルを出力します。
次にモジュールを選択し右クリックメニューから「インポート」でbasファイルを取り込みます。
これを標準モジュールだけでなくユーザフォームやクラスモジュールについても繰り返すとファイルサイズが縮小します。モジュールを多く含むブックだと効果が大です。

(2)Excelメニュー「ツール」→「ブックの共有」→「編集」タブの「複数のユーザーが同時に編集する」のチェックを外し、変更履歴を削除し、一旦ブックを保存します。再度ブック開き、ブックの共有を設定しなおします。
変更履歴が不要であれば、始めから「詳細設定」タブの「変更履歴を保存しない」を設定しておけばよいです。

(3)ちょっと解説すると、Excelは一旦入力したセルをずっと記憶しているようで、セルをクリアしても記憶し続けます。Ctrl+Endキーを押下してみるとExcelが認識している最終セルが分かります。したがって、仮に見た目は入力が無いというシートでも、この範囲が大きければ大きいほどブックサイズが大きくなります。
これを解消するには、Ctrl+Endキーを押下してジャンプしたセルから入力されている行、列までの未入力部分を選択し、
メニュー「書式」→「スタイル」→「スタイル名」が”標準”でなければ一旦”標準”に設定し、選択している行および列を削除します。ブックを保存すればファイルサイズが縮小しているはずです。スタイルを”標準”に戻さずにただ行や列を削除したのではファイルサイズは縮小されないので注意してください。

(4)(5)はできるだけ使用しないとしか言えません。でも便利だから使ってしまいますよね。必要に迫られて使用しているのであればこれ以上は縮小できませんね。

(6)は可能であればブックを分割するしかありませんね。たまに、既存のブックを流用して作成していたりして、流用元のブックにシートが隠れていたりします。非表示シートはメニューの「書式」→「シート」→「再表示」で確認し、不要であれば削除しましょう。

(7)見た目は何も入力が無いシートのブックがやたらファイルサイズが大きい場合があります。誰かと共同でブックを修正していたりして、自分以外がオブジェクトもろとも行を削除したりすると削除された行の上にあったオブジェクトは点の状態になってしまいます。試しにツールバー上で右クリックし「図形描画」を選択するとツールバーが追加されますので、矢印マークの「オブジェクトの選択」でシート全体を選択し、Deleteキーを押下してみると隠れているオブジェクトが削除されるかもしれません。私が作ったE2000Toolsにはアクティブシートのオブジェクトの一括削除機能がありますので、それを実行してみると便利だと思います。E2000Toolsはこちらhttp://cat.zero.ad.jp/iizy/のDownloadからダウンロードできます。不明な点などがあればコメント欄にでも書いて頂ければお答えしたいと思います。

以上がこれまで解決できたケースです。自分のケースに当てはまる場合は試してみてください。

« 2007年8月 | トップページ | 2007年10月 »