Office2007で、拡張子mdiのファイルを開く

mdiとは、Microsoft Document Imagingの略であり、Microsoft Officeの仮想プリンタで印刷したときにできるファイルらしい。このviewerは、デフォルトではインストールされないので以下の操作をおこなって有効化する(この操作はOffice2007限定)

「コントロールパネル」>「プログラムの追加と削除」
>「現在インストールされているプログラム」>「Microsoft Office 2007 ???」
>「変更」>「機能の追加/削除」>「次へ」>「Office ツール」
>「Microsoft Office Document Imaging」>「スキャン、OCR および Indexing Service フィルター」
これを、[マイ コンピューターから実行]?>「次へ」

上記操作で関連付けもやってくれるはずだが、viewer実体は下記なので自前で関連付けても良い。
C:\Program Files\Common Files\Microsoft Shared\MODI\???\MSPVIEW.EXE

EXCELで土日を赤くする

良くある要求で、やり方もいろいろありますが、「条件付き書式」を利用する方法

  1. 日付のセットしてあるセルを選択
  2. リボンのホーム>条件付き書式>新しいルール
  3. 数式を使用して、書式設定するセルを決定
  4. 数式として =WEEKDAY(選択範囲の先頭セル,2)>5

WEEKDAYの2つめの引数=2は、月=1 火=2 ・・・とするためのパラメータです

SQL Server へのインポートを楽におこなう

以下の記述は、SQL Server2005と2008で確認しましたが、以降は未確認です。

「データのインポートおよびエクスポート」ウィザードを使うことが多いと思いますが、このときにCSVなどからのインポートだと、インポート時のエラーが多発します。多くは項目毎に桁数や変数型の指定などをしていけば解消しますが、項目数が多いと、とても面倒です。

こんなときは、CSVをEXCELで読み取り、EXCELファイルにしてからインポートします。この場合は項目毎の指定はほぼ不要です。さすがマイクロソフトと言うべきか、そもそもどうなんだと考えさせる状況ではあります。

Excelでカナ以外を半角に変換する

Function z2hexckana(target As String) As String
    Dim charReplace As String, charcur As String
    Dim charAlph As String, charNum As String, charSign As String
    Dim result As String
    Dim i As Long

    charAlph = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
    charNum = "0123456789"
    charSign = "!#$%&?()*+?./:;<=>?@[¥]^_{|}。、,,"
    charReplace = charAlph & StrConv(charAlph, vbLowerCase) & charNum & charSign
    
    result = target
    For i = 1 To Len(charReplace)
        charcur = Mid(charReplace, i, 1)
        result = Replace(result, charcur, StrConv(charcur, vbNarrow))
    Next i
    
    z2hexckana = result
End Function

Excelで半角カナのみを全角に変換する

Function h2zkana(target As String) As String
    Dim charexclude As String, charcur As String
    Dim charAlph As String, charNum As String, charSign As String
    Dim result As String
    Dim i As Long

    result = StrConv(target, vbWide)
    
    charAlph = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
    charNum = "0123456789"
    charSign = "!#$%&?()*+?./:;<=>?@[¥]^_{|}。、,,"
    charexclude = charAlph & StrConv(charAlph, vbLowerCase) & charNum & charSign
    
    For i = 1 To Len(charexclude)
        charcur = Mid(charexclude, i, 1)
        result = Replace(result, charcur, StrConv(charcur, vbNarrow))
    Next i
    
    h2zkana = result
End Function

Windowsのcmdファイルをエクスプローラーから

cmdファイル中で同じフォルダのファイルを参照するのは良くある作りですが、この場合にエクスプローラー上に見えるcmdファイルをダブルクリックしても、そのファイルは参照できません。このときのカレントディレクトリは、C:\WINDOWSになってしまうからです。

この動きを変えるためにレジストリを書き変える方法もあるようですが、そうではなくてcmdファイル側でカレントディレクトリを移動してしまうという対処もあります。

つまりは、そのcmdファイル自身があるフォルダをカレントディレクトリにするというコマンドを実行すれば良いわけで、Windowsの標準コマンドだけで実現可能です。

cd "%~dp0"

Excelファイル中の画像を圧縮する

Excelのファイルが大きくなったとき、多くは画像を貼りつけたときです。Excelに貼り付けるような大概の画像は、解像度が低くても支障がないのですが、気をつけないと高解像度でファイルが巨大化します。そのときの対処をメモ。

  1. 貼りつけた画像を何でもよいので選択
  2. リボンの「図ツール」 > 図の圧縮
  3. 「選択した画像のみに適用」はチェックせずにオプション
  4. 圧縮オプションは両方チェック、解像度を選択
  5. OK

なお、Excel2007から2003形式にセーブしていると、圧縮がききません。一度2007形式でセーブ後に、改めて2003形式にすればOK

Excelのデータベース関数の比較は前方一致

データベース関数のCriteriaをワークシート上の領域に取る場合、その条件に合致しているかの文字列比較は前方一致でされてしまいます。
つまり、該当列が”検索”である行のみを引っかけたいのに、”検索文字列”となっている行も引っかけてしまいます。例えばDSUM関数であれば、想定以上の数になります。

これを防ぐには、Criteriaの領域のセルに =”=検索” と入力します。
ただし、当然のことながらこのままの形で表示されるので、Criteria部分と集計結果表を兼用したい場合には要注意です。イコールを削除した別セルを表示するようなことになるでしょう。

また、Excel2002以前では、デフォルトで完全一致だそうなので、これまた要注意です

Access2003とAccess2007のGetFile().Typeの違い

プログラム中で、

objFile.GetFile(strFile).Type

で、エクセルファイルかどうかを調べておくことがあります(気休めですが)。

これが返す値が、2007では変更されています。
2003以前のファイルか、2007以降のファイルかを区別して返してくるので注意。
エクセルなら何でも良いなら、

InStr(objFile.GetFile(strFile).Type, "Excel")

でいけます。