コントロール パネルからOffice 2013、2016のアニメーションを無効にする





コントロール パネルからOffice 2013、2016のアニメーションを無効にする

Office 2013で追加されたアニメーション
全く不要なのですがアニメーション。
Office 2013公開直後はアニメーションをやめるにはレジストリを修正する必要がありました。
でも、最近、検索したらコントロール パネルに設定できるようになっていました。
よほど、不評だったのだと思います。

MicrosoftのOffice Support
Office アニメーションを無効にする


Windows ロゴ キーを押しながら U キーを押して、コンピューターの簡単操作センターを開くか
コントロール パネルの表示方法を大きいアイコン、または、小さいアイコンに設定し
コンピューターの簡単操作センターを選択します。


画面中央の[コンピューターを画面なしで使用します] をクリックします。


必要のないアニメーションは無効にします (可能な場合)] をクリックします。

スポンサーサイト

Excel VBA のCellsプロパティで最近知ったこと





Excel VBA のCellsプロパティで最近知ったこと

Excel VBA ワークシートのセルを参照する場合
  • Rangeプロパティ
  • Cellsプロパティ

を使用します。
例えばB2のセルを参照する場合
    Cells(2, 2) = 1
Range("B2") = 2

のようにします。

Cellsプロパティの良いとこは
For Next文で列や行を容易にループできるところです。
Dim row As Long

For row = 1 To 10
Cells(row, 2) = 100
Next row


Rangeプロパティでは行を変化させて
For row = 11 To 20
Range("B" & row) = 101
Next row


のようにできますが列を変化させるには工夫が必要です。

で、ここからが本題ですが
私は勝手にCellsプロパティは
列と行を数字で指定するものと思っていました。

しかし、ひょんなことから文字も指定できることに気付きました。
Cells(2, 2) = 1

Cells("2", "B") = 100
行は文字といっても実際は行数なので数値ですが
列として文字の「A B C ... Z AA AB ... 」が指定できるのです。

まぁ、数値しか指定できないと勝手に思っていただけなのですが...
目からうろこが落ちた思いでした。

比較的小さい列であれば
Cells(2, 2) = 1

Cells("2", "B") = 100
と指定できます。
でも、
Cells("2", "ZZ") = 100
位になると列を数値で指定するのは少々厄介です。
それまで、私は
col = Range("ZZ" & "1").Column
Cells(2, col) = 100
このように一度、Rangeプロパティを使って、
列を数値に変換後
Cellsプロパティを使用していました。

でも、Cellsプロパティでも
Cells("2", "ZZ") = 100
このように
列として文字の「A B C ... Z AA AB ... 」が指定できるのです。

結構便利だと思いませんか?
それとも、知ってました?

Excel INDIRECT関数を相対式のように使う

Excel INDIRECT関数を相対式のように使う




通常、INDIRECT関数は
=INDIRECT("A1")
のように参照したいセルを文字列で指定したり
=INDIRECT(A1)
のようにセルに参照先のセルを格納して使用するのが一般的です。

これらはどれもセルを直接アドレスで指定しています。

しかし、VBAからセルに式を格納する場合などは
格納するセルの相対指定ができると
格納先のセルに関係なく式を統一できて便利です。

例1
1つ右のセルは
=INDIRECT(ADDRESS(ROW(),COLUMN()-1))

例2
1つ上のセルは
=INDIRECT(ADDRESS(ROW()-1,COLUMN()))

例3
(1つ右のセル)-(2つ右のセル)は
=INDIRECT(ADDRESS(ROW(),COLUMN()-2))-INDIRECT(ADDRESS(ROW(),COLUMN()-1))

となります。

このようにすることで格納するセルの相対指定が可能になり
格納先のセルのアドレスを意識せずに参照することができるようになります。

Excelのマクロが実行途中に止まる






Excelのマクロが実行途中に止まる障害が発生した。

処理はそんなに複雑ではない
  1. 複数のExcelブックを読み込み、ブック内にシートを追加作成しコピーする
    読み込んだブックの数だけシートが追加される。

  2. 読込んだシートは集計シートから式で参照されている(Sheet!A1 こんな感じで)

  3. 再実行の処理
    読み込んだブックと追加作成するシートは一意に決まっており
    既に同じシートが存在する場合はシートをいったん削除後に 上記 1.から実行

このような処理でブックを4つほど処理すると下のエラーが表示され、Excelが勝手に終了してしまう。

Microsoft Excelは動作を停止しました


このエラーが出ると実行途中のデータは保存されない。
また、他で開いていたExcelも道連れに亡くなってしまう。

それと、この障害、利用するパソコンにより発生したりしなかったりする。
私が動作確認したパソコンはほとんど発生しないが
他の人のパソコンではほぼ100%発生するのだ。

マクロ中に
DoEvents()
を適当に入れても改善しない。

結構、ハマってしまった。

Google先生に聞いてみてもいいアドバイスは得られなかった。

■解決方法
上記 3.の再実行した場合の処理を見直した。

既に同じシートが存在する場合はシートをいったん削除していたが。
これがまずかったようだ。

他のシートが参照しているシートを削除する場合
Excelにとってはかなりつらい処理の様に思われる。
Excel「もう、やっていけない。止めるよ!」

誤って参照されているシートを削除すると残ったシートには
#REF!
が表示されます。今回はこの「#REF!」の数がかなりありました。

そこで、シートの削除は行わず、ブックのデータだけを書き換えるように変更しました。

これで、他のパソコンでも
「Microsoft Excelは動作を停止しました」
は表示されず、処理が完了するようになりました。

解決策を実施する前も後も結果のブックを見ると同じなのですが
Excelの事を考えると
シートの削除よりはデータの書き換えの方が楽なのかも知れません。

今回のマクロのコードを作っている時は少しでもコードが少なくなるように考え、シートの削除を行ってしまいましたが、
シートの削除時のExcelの負荷(動作)を考えるとデータの書き換えの方が正解だったようです。

意外と使える Excel のTEXT関数(2016年 平成28年版)





意外と使える Excel のTEXT関数

明けましておめでとうございます。
今年もよろしくお願いいたします。

過去記事
Excelの意外と知らない書式設定について
でも書きましたが

年が変わったので Excel日付の書式設定についてもう一度。



B C D E F
4 No. 書式 表示形式 備考
5 1 2016/01/01 1:23:45 y"年"m"月"d"日" 16年1月1日 №20まで書式は=TEXT(C5,D5)
6 2 2016/01/01 1:23:45 yyyy"年"m"月"d"日" 2016年1月1日 =TEXT(C6,D6)
7 3 2016/01/01 1:23:45 ggg 平成
8 4 2016/01/01 1:23:45 e 28
9 5 2016/01/01 1:23:45 ggge"年"m"月"d"日" 平成28年1月1日
10 6 2016/01/01 1:23:45 r 28
11 7 2016/01/01 1:23:45 rr 平成28
12 8 2016/01/01 1:23:45 aaa
13 9 2016/01/01 1:23:45 (aaa) (金) 「()」には"を付けなくてもOK
14 10 2016/01/01 1:23:45 aaaa 金曜日
16 11 2016/01/01 1:23:45 bbb 2559 タイ仏暦
16 12 2016/01/01 1:23:45 ddd Fri
17 13 2016/01/01 1:23:45 dddd Friday
18 14 2016/01/01 1:23:45 hh:mm:ss 01:23:45 「:」には"を付けなくてもOK
19 16 2016/01/01 1:23:45 m 1
20 16 2016/01/01 1:23:45 mm 01
21 17 2016/01/01 1:23:45 mmm Jan
22 18 2016/01/01 1:23:45 mmmm January
23 19 2015/12/28 23:00:00 yyyy/mm/dd h:mm:ss 2015/12/28 23:00:00 A
24 20 2016/01/01 1:23:45 yyyy/mm/dd h:mm:ss 2016/01/01 1:23:45 B
25 21 =B-A [h]"時間"mm"分"ss"秒" 74時間23分45秒 [h]は24時間以上の時間表示
26 22 =B-A [h]:mm:ss 74:23:45 時間計算には必須
28 23 =B-A h:mm:ss 2:23:45 普通のhでは24以上は存在しない
28 24 =B-A [m]:ss 4463:45 [m]は分換算の値になる

「表示形式」の欄は全て「=TEXT(Cn,Dn)」(nは列の意)です。

和暦、曜日の表示、時間計算などは書式設定で簡単に表示できるのですが
書式設定を知らないと式を作ったり、日数と時間の変換をしたりと
結構、面倒なシートを作っている例を見かけます。

幅の狭いセルに日付を表示させる場合、日付として表示すると桁があふれ「####」などと表示されます。
でも、TEXT関数を使うことで文字としての扱いになり隣のセルにまたがって表示されます。
TEXT関数を使うと文字としての扱いになりセルの書式を右寄せすれば文字が消えることもないので便利。

例えば、現在の日付を文字として表示したい場合の
実際の入力式と表示例です。

例1
=TEXT(NOW(),"ggge""年""mm""月""dd""日""")
平成28年01月07日

例2
=TEXT(NOW(),"yyyy/mm/dd")
2016/01/07

文字なので右寄せできるので便利です。
アクセスカウンタ
オンラインカウンター
現在の閲覧者数:
プロフィール

たっきー

Author:たっきー
たっきーのブログへようこそ!
パソコン・スマホを
より使いやすくするため奮闘中!
改造したり、root取ったり
色々やってます。

カテゴリ
最新記事
最新コメント
月別アーカイブ
最新トラックバック
検索フォーム
RSSリンクの表示
リンク
ブロとも申請フォーム

この人とブロともになる

QRコード
QR