frog.raindrop.jp.knowledge > Office/Word/Excel

August 21, 2009

Excel の全シートの表示倍率を設定するマクロ

Option Explicit

Public Sub SetAllSheetZoom()

Dim sZoom           As String
Dim oItem           As Object
Dim workSheetItem   As Excel.Worksheet
Dim lRatio          As Long

On Error GoTo ErrHandler:

    Do
        sZoom = InputBox("全シートに設定する表示倍率を入力してください。" _
                            & vbLf & " ※「%」などをつけず、数値のみ入力してください。", "表示倍率の設定", ActiveWindow.Zoom)
        If (Len(Trim$(sZoom)) = 0&) Then
            Exit Sub
        End If

        If (IsNumeric(sZoom)) Then
            lRatio = CLng(sZoom)
            Exit Do
        End If

        Call MsgBox("数値を入力してください", vbExclamation)
    Loop

    For Each oItem In Application.ActiveWorkbook.Sheets
        If (TypeOf oItem Is Excel.Worksheet) Then
            Set workSheetItem = oItem
            Call workSheetItem.Select
            ActiveWindow.Zoom = lRatio
        End If
    Next oItem

    Exit Sub

ErrHandler:

    Call MsgBox("エラーが発生しました" _
                & vbLf & " Source: " & Err.Source _
                & vbLf & " Number: " & CStr(Err.Number) _
                & vbLf & Err.Description, vbCritical)

End Sub

February 4, 2009

Word の表を削除する

いまさら何を言ってるんだ、って言われそうですが…。

Word で文書内に作成した表を選択して Delete キーを押下すると、表内の文字データのみが消えて、表自体は残ってしまいます。Delete はメニューでは [編集] → [クリア] に割り当てられており、表の削除はメニューで言うと [罫線] → [削除] → [表] で、こちらにはキーが割り当てられていません。仕様書や取説など、Word を使用する機会は大変多く、いちいちメニューから表を削除するのが面倒で、ずーっと「切り取り」してました。そう、Ctrl + X です。

現在、業務で使用しているのは Word 2000 ですが、表全体を選択した状態で、Delete キーでなく、Backspace キーで削除できることにさっき気付きました。

多分、後継バージョンもですよね ?

ちょう情けないです… orz

February 7, 2008

Excel で、範囲に含まれる値の種類数を取得する

Excel で、重複を排除した値の個数(要するに、値のバリエーション数)を取得したい場合がある。例えば以下でA列の値は何種類あるか
 ABC
17
23
34
43
これはこんな感じで取得できる。
{=SUM(IF(FREQUENCY($A$1:$A$4, $A$1:$A$4)>0, 1, 0))}
FREQUENCY は、1個目の配列の要素を2個目の配列でグループ化する関数で、戻されるのは2個目の配列要素でグループ化された1個目の配列中のデータ数。つまり上の例で行くと、
{4より大きく7以下の値の数; 3以下の値の数; 3より大きく4以下の値の数; 3以下の値の数; 7より大きい値の数}
という配列になる。この時、2個目の配列要素にダブりがあると、ダブった要素に対する結果は2回目以降は0が戻される。上の例は3がダブっているので、戻される配列は
{1; 2; 1; 0; 0}
となる。で、後は戻された配列について、0でないものの数を集計すると、前述の式になる。結果は3。

January 17, 2006

Word で、図形やワードアートの塗りつぶしの色が表示されない

親戚よりヘルプコール。「ワードアートにいくら塗りつぶしの色を設定しても透明のまま」とのこと。???と思って行ってみると、ワードアートだけでなく、Word のすべての図形で塗りつぶしの色が表示されない。それらしい設定項目を探してもない。

結論を言うと、コントロールパネルの「ユーザー補助のオプション」→「画面」タブ→「ハイコントラストを使う」にチェックが入っていた。そんなの入れた覚えがないって言うけど、まあとにかく、そのチェックをはずせば元通りになりました。
でも、そんなとこの設定が Word の表示に関係あるなんて思わないよねぇ。

December 5, 2005

ナチュラルインプットを抹殺する

Office Xp からかな? Word を使おうとすると、日本語入力システムが頼みもしないのにナチュラルインプットに切り替わってしまうようになりました。 これ、何とかならないの?と思って、あれこれ設定をいじくっていたのですが、とりあえず、完全抹殺の方法は見つけました。

  1. 日本語入力が可能な状態で、IMEツールバーを右クリックし、「プロパティ」を選択
  2. 「互換性」タブを表示する
  3. 「詳細なテキストサービスを使用しない」を選択する
  4. OKボタンを押下すると、再起動するか聞かれるので、再起動する

これで、文書の編集中に気づいたらナチュラルインプットになってしまっていて混乱することはなくなります。ただし、入力システムの選択肢から、ナチュラルインプットが完全に消えてしまい、たとえば Microsoft IME と ATOK のように一時的に切り替えて使用する、というようなこともできなくなります。両方が使える状態で、デフォルトをナチュラルインプット以外の入力システムにする方法は、まだ見つけられていません。

September 30, 2003

複数列のVLOOKUP

Excelで、別シートから1つの項目をキーにして、他の項目を参照したりするのに、VLOOKUP関数は便利だよね。

VLOOKUP(検索値,範囲,列番号,検索の型)

でも、たとえば、DB設計書を作る場合を考えてみよう。
DB設計って、1つの項目、たとえば在庫管理システムなら、品種のコードなんて項目、品種マスタ表にも、在庫表にもあって、同じデータ型、同じ桁数、同じデータ範囲だよね。
じゃあ、テーブルで必要な列の各属性をまとめたシートを1つ作って、各表の設計書は列名をキーにそのシートを参照しようって思ったとしよう。列名は項目一覧ってシートのB列。
とりあえずデータ型を参照する式をC2のセルに入力するとこんな感じとする。
=IF($B2="","",VLOOKUP($B2,'項目一覧'!$A$1:$E$100,2,FALSE))

で、次は桁数。セルはD2。
=IF($B2="","",VLOOKUP($B2,'項目一覧'!$A$1:$E$100,3,FALSE))

で、次はデータ範囲
=IF($B2="","",VLOOKUP($B2,'項目一覧'!$A$1:$E$100,4,FALSE))

みての通り、列番号以外は同じ式。でも、列番号が違うばっかりに、オートフィルで式を入力したりできなくって、コピーしたあと各列に合わせて列番号を修正する羽目に。間にやっぱり項目の日本名もいれなきゃってなったら、またやり直しだ。
そこで以下のように配列数式で上手にできないかなーと考えてみた。

続きを読む...

August 25, 2003

Excel 97 VBA

シートのUnprotectメソッドは、先にRange("A1").Selectなどして、
セルを再選択しておいた方が安全
また、ClearContents等のメソッドを呼び出すまえに、そのシートをアクティブにしておいた方がよいみたい。

August 12, 2003

Wordで、ページ番号を見開きの外側に挿入

見開きページのページ番号を、奇数ページは左、偶数ページは右というように指定する方法。
こういうの、すぐ忘れちゃうんだよね。

ページ設定>その他>ヘッダーとフッター>
奇数/偶数ページ別指定(O)にチェックを入れます。
これでヘッダー・フッター編集モードで奇数ページと偶数ページが別々に編集できるようになるの。
あとは右揃え・左揃えに設定するだけです。