2018年1月27日土曜日

【Windows】会社のパソコンが遅くなった【Update】

表題どおりです。
記事:【Excel】二重取り消し線の取得/設定が出来ない&下線のスタイルで破線・波線などの特殊線が取得/設定出来ない!VBA
で、非常に重くなった件とも関連すると考慮しております。


今まで特にストレスを感じていなかった処理が、非常にストレスを感じるレベル(「応答なし」というフリーズするようになった!? と言うレベル)に変化しました。
会社のパソコンですから、特に不要なソフトウェアはインストールしておらず、3日前と本日とで違う点としては、Windows Updateか!? でも、アップデートで遅くなるようなことは?

cid:image001.png@01D38F74.FE769940


どうにも、このあたりのアップデートが原因のようです。
タイムリーに言えば、CPU関連のバグは発見されたと言う記事を思い出します。
このバグ修正を行うと、CPUの能力が3割落ちる、だったかな?

車だったら、リコールの対象になるレベルだと考慮いたしますが、パソコン業界には「リコール」がないんでしょうか?(あるけどやらないだけかなぁ)
ソフト的な部分じゃなく、ハード的な部分らしいので、対応するためにはCPUを交換する必要があるんでしょうが、、、
交換するとなると、Intelは倒産するだろうなぁってレベルかなぁ。
問題となるのがWindows10より前のOSが殆どらしいのでWindows10プロフェショナル版とかウルティメイト版?とか)への無料アップデートとかの方が、まだ現実的かもしれませんね。

本当に「この問題にぶち当たった」とはっきりいえませんが、確かエクセルのマクロなどは、その速度はCPUに依存する(マルチタクス処理ではないので、2010年以前の物はマルチコア系のCPUの恩恵は受けなかったと記憶しています)

マルチスレッド化にして処理してやれば早くなるのか、それとも変わらないのか?
それは分かりませんが、
今後の検討課題として一通り仕上げた後に試しても良いかもしれません。

2018年1月18日木曜日

【Excel】二重取り消し線の設定【オートシェイプ】

エクセルで二重取り消し線を使用したい、という人はちらほらいるようで、ネットで検索するとその質問や方法についてヒットしますが、
一律でいうなら「二重取り消し線は使用できないというものです。

セルの書式設定を見ても、取り消し線はあるものの二重取り消し線はありません。

cid:image001.png@01D38B88.1BF23E70

方法として紹介されている物は、オートシェイプの直線を二重線に変更して取り消したい文字列の上に重ねると言う方法です。


ネットでは殆どヒットしなかった、エクセルで二重取り消し線を使用する方法として、
オートシェイプ(図形)のテキスト挿入機能を利用する方法があります。

二重打ち消し線

セル内のテキストに対するフォント装飾で二重取り消し線の設定は出来ませんでしたが、
オートシェイプのテキストに対してフォントプロパティを開くと下図のとおり二重取り消し線する設定ができます。


cid:image002.png@01D38B88.1BF23E70

メリット
・印刷時に=線の位置とセル内の打ち消したい文字の位置がずれる問題を回避することが出来る。
デメリット
オートシェイプの値をセルに入力したり参照するにはVBAを利用するしかない。
(数式や関数で参照する方法が見つからなかった)
・印刷時にオートシェイプの位置が表示とずれる場合がある。

ぱっと思いつく感じはこんなものです。

2018年1月15日月曜日

【Excel】VBA マクロでオートシェイプ内の上付き文字を設定しても反映されない問題。【VBA】

VBAでフォントの装飾を変更するコードを書いていたのですが、どうにも摩訶不思議な現象に遭遇しました。

エクセルを使用している方なら経験があると存じますが、セルに対して装飾を施すことが出来ます。

セル内の文字列を個別に対象にすることもでき、それをVBAで装飾を施す場合

 Range(セル情報の位置["A1"]).Characters(開始位置,文字数).Font.Superscript = True

こんな感じです。

オートシェイプの文字列もセルと同様のことができますので、VBAでやろうとしたのですが、なぜか反映しないという事象が発生しました。
(例:Aというオートシェープの文字をBというオートシェイプに装飾含めてコピーするというコード)








コートで書くと下記の通り。(上付き文字)

A.TextFrame.Characters(開始位置,文字).Font.Superscript = B.TextFrame.Characters(開始位置,文字).Font.Superscript


図にあるとおり、下付き文字と打ち消し線は問題なくできるという不思議状況です。
コピー元Bの上付き状態を(IF)で判定する分には問題なく取得できます。
なので
If B.TextFrame.Characters(開始位置,文字).Font.Superscript = True Then
A.TextFrame.Characters(開始位置,文字).Font.Superscript = True
 End If
と言うコードに変えてやったのですが、コピー先の「A.TextFrame.Characters(開始位置,文字数).Font.Superscript」はFalseのままという状況です。

Excel2002及び2003では、正しく取得できないと言う問題があるようですが、2013ではSuperscriptだけが直っていない状況のままなのでしょうか?
取得は問題なく出来るんだけどなー。

結論を言えば、「True」を「msoTrueに変更したことで問題を回避することが出来ました。

If B.TextFrame.Characters(開始位置,文字).Font.Superscript = True Then
A.TextFrame.Characters(開始位置,文字).Font.Superscript = msoTrue
 End If

ただ、これは明らかに「バグ」だよなぁ。