DuKiccoの雑記

My Life Is Myself

【セルの行高さや列幅をmmで指定する】【エクセル2013,VBA】

結論としてはセルの大きさは0.01mm単位での設定は難しいが0.1mm単位だとそれなりに近い値での設定が可能である。

 

エクセルの行の高さの単位はポイント、列の幅の単位は文字数となっている。「mm→ポイント」変換は用意されている関数を使えばよいので行の高さ設定について頭を悩ませることはないが、「mm→文字数」変換はフォントや環境(ディスプレー)などによって値がかわってくるのでかなりややこしい。さらに画面上でしっかり設定できたとしても、印刷の際にはプリンターに依存して微妙に大きさが変わる。これは、印刷されたセルのサイズを実際に測定し、印刷時の拡大縮小設定を調整することで対応するしかないようだ。

 

行の高さの設定

センチからポイントへはCentimetersToPoints関数を使用すればよい。

ただし、行の高さを手動でかえていくと、(自分の環境では)設定できる数字が0.25ポイント刻みであることがわかる。

例(9.5→9.5,9.6→9.5,9.7→9.75,9.8→9.85) 

 

ここでいったん長さの単位のおさらい

「1ポイント=1/72インチ

 1インチ=25.4mm

 0.25ポイント=25.4/72/4mm=0.088...mm」

という割り切れない中途半端な数字になっている。細かくmmで指定しても、結局は0.25ポイン刻みに丸められてしまうので0.1mm程度の誤差がでてしまう。

 

ちなみに画面の文字は小さな点(ピクセル)の集合であり、フォントや環境により文字あたりのピクセル数が異なる。大きさはピクセルの倍数かつ変更の最小単位は1ピクセルの大きさとなる。

 

列の幅の単位

列の幅の単位は文字数。0が何文字表示されるかを意味している。0の幅の値は設定されているフォントの種類・大きさ、および環境(ディスプレー)によって異なってくる。

 

列の幅の設定

VBAではプロパティから列幅を取得する2つのメソッドがある。「Columnwidth(単位:文字数)」と「Width(単位:ポイント)」である。Widthは値の取得のみで変更・設定できず、変更・設定できるのはColumnwidthだけである。なので「mm→ポイント→文字数」へと順に変換する必要が有る。「mm→ポイント」変換は行高さと同様に行えばよい。同一環境下ではポイントと文字数の関係はどうも「Y = aX + b」であらわされる”ようだ”(Y→ポイント、X→文字数、a,b→定数)。a,bは環境により異なる。言い換えると、「一定の余白(→b) + 一文字あたりの幅 (→a)X 文字数」ということらしい。a,bをどうやって求めるかだが、セルの幅を変化させ(Columnwidthに様々な値を入れる)たのち、Widthを1回ごとに取得し、それらの値をもとに計算すれば求めることができる(方法1)。また単純に最小の文字数から0.01文字(最小単位)ずつColumnwidthを増加させていきWidth値を監視し目的の幅(単位ポイント)になるまで増加させることで求めるやり方(方法2)も考えられる。方法1は数字の丸め(ピクセルの幅に調整される)が入ると微妙にずれる可能性が考えられ、方法2は力技すぎるので方法1で大体の数値を設定し方法2で微調整する方法をとることとした。くわえて方法1のとおりにaとbを求めるやり方だとゴテゴテするので若干不正確かもしれないがシンプルなコードを採用している。

 

===============================================================

Sub セルサイズ指定()
'
' 選択された各セルをmm単位で設定する。


Dim PointDelta As Double, EndN As Long, StepN As Long, NEARW As Double, NearD As Double, i As Long

Dim Buf As Range, tempW As Double, setteiRH As Double, setteiCW As Double, setteiCWP As Double

 

On Error GoTo ELH

Set Buf = Application.InputBox(PROMPT:="サイズを変更したい範囲を選択してください。", Type:=8)
Buf.Select

 

Application.ScreenUpdating = False

 

setteiRH = InputBox("各セルの行高さの設定値を入力(単位:mm)", "入力", 10) / 10

setteiCW = InputBox("各セルの列幅の設定値を入力(単位:mm)", "入力", 10) / 10

On Error GoTo ELH2
'RowHeghtを設定(高さはポイントをいれればよい。センチからポイントへはCentimetersToPoints関数を使用)
Selection.RowHeight = Application.CentimetersToPoints(setteiRH)


'setteiCWP →幅の設定値をcmからポイントへ変換

setteiCWP = Application.CentimetersToPoints(setteiCW)

 

'「X= (Y-b)/a」X(文字数)。bはYにくらべ十分小さく、1/aは「Selection(1).ColumnWidth / Selection(1).Width」に近い数字となる。またSelection(1).Widthと目的の値との差が小さいほどtempWが目的の値に近くなるため、ループさせることで1回ごとに正解に近づいていく。ColumnWidthの取りうる値が不連続なためだいたい3回くらいで目的の値にたどりつく。

For i = 1 To 5

tempW = setteiCWP * Selection(1).ColumnWidth / Selection(1).Width

Selection(1).ColumnWidth = tempW

Next

 

'ここまででほぼ完了。

 

'============ここから微調整のためのコード。しかし試したところ↑だけで目的の値になっていた。不要かもしれない(削除可)。===================

PointDelta = setteiCWP - Selection(1).Width

Select Case PointDelta
Case 0
Case Is < 0
EndN = -2000
StepN = -1
Case Is > 0
EndN = 2000
StepN = 1
End Select

 

NearD = PointDelta
NEARW = tempW

Debug.Print "差=設定値(ポイント)-実際の値(ポイント)=" & PointDelta

'0.001文字刻みで増減させていき最も設定値に近い幅を探索

For i = 0 To EndN Step StepN

Selection(1).ColumnWidth = tempW + i / 1000
If Abs(NearD) < Abs(setteiCWP - Selection(1).Width) Then
Exit For
Else
NearD = setteiCWP - Selection(1).Width
NEARW = tempW + i / 1000
End If

Next

Selection.ColumnWidth = NEARW

Debug.Print "ループした回数=" &  i
Debug.Print "ループ後の差=" &  NearD

'================微調整ここまで===================================

 

'数字が丸められた後の実際の値を表示。

MsgBox "完了" & Chr(13) & "丸められた後の幅(mm)=" & Selection(1).Width / Application.CentimetersToPoints(1) * 10 & Chr(13) & "丸められた後の高さ(mm)=" & Selection.RowHeight / Application.CentimetersToPoints(1) * 10

Application.ScreenUpdating = True

Exit Sub
ELH2:
MsgBox "設定可能な最大値を超えてるかも?"

Exit Sub

ELH:

MsgBox "終了"

End Sub

 

 

 

 

iMacデュアルディスプレイ化

やることは単純にディスプレイをつなぐだけだったのだがちょっとミス。


iMacをデュアルディスプレイ化する方法 ―実はケーブルつなぐだけの簡単設定 - NAVER まとめ

 

まずは以下の2点を購入

1.Thunderbolt➡HDMI変換ケーブル、980円

 

2.ディスプレイ「BenQGW2255」

しかし手元に届いたディスプレーをみるとHDMI端子がなくDVI端子のみ。もう一つ新しい型である「GW2255HM」は1,500円ほど高くHDMI対応であったのだが、こちらを購入したものと勘違いしていた。

 

ケーブルを買い直すと、GW2255とGW2255HMの価格差はひっくり返りそうな気がしたので、しっかり確認しなかったことをつよく後悔した。しかしThunderbolt➡HDMI変換ケーブルを生かすべく、調べてみると以下の品を発見!

 

3.HDMI DVI 変換アダプター

通常お店で買うと1,500円くらいするのだが驚きの177円。恐る恐る購入したところ、しっかり動き安さに感動した。

 

合計14,000円でデュアルディスプレイ化完了した。とても快適。

 

 

「PC TV with nasne」がmacの仮想環境に対応

去年の夏にipadでTVを見ながらネットしたくてnasneを購入していた。しかし、nasne自体は気に入っていたのだが、ipadでの動きのもっさり感と画面の小ささで、若干不満があった。


リンゴ印のライフハック (22) NASを買うなら「nasne」がおトク! | マイナビニュース

 

 

最近、旗艦のimacデュアルディスプレイ化したのにともない、imacでnasneが見れたらなと思っていたところに以下のような記事を発見した。


PC版 nasneがアップデートでMacの仮想環境での使用が可能に?:ソニーをマンガで見よう!:So-netブログ

 

nasneはwindowsでは使えるが通常macでは使えない。今までは、macで使いたいという場合はBootcampでwindowsを走らせる必要があり仮想環境のwindowsでは動かせなかったが今回のnasneのアップデートで「仮想環境で使用可能に?」なったとのことであった(「?」はあくまでも動作は保証しないということらしい。)。当方は仮想環境でwindowsが動いている環境(VMware)なので求めていた内容であった。

 

ということで「PC TV with nasne」の体験版をインストールしてimacでみれるか確認してみた。方法は特に難しい設定はなく、必要なことといえばブリッジ接続にするだけ*。結果、21.5-inchのimacのディスプレーでも綺麗にTVをみることができ十分満足。↓こんな感じ。

 

 

f:id:DuKicco:20150111225258p:plain

 

*マイネットワークでnasneがみえてないと設定できない。そのためにはVMwareネットワークアダプタ設定をNATではなくブリッジ接続にしておく必要がある。

VMware Fusion から NAS 認識されない : トイレのうず/ぼやき

 

環境

CPU:2.7 GHz Intel Core i5

Memory:8 GB

OS:Mac OS X Yosemite 10.10.1 

仮想化環境:VMware Fusion Ver7.0, Windows 7

 

IO-Data HDR-XR4.0(RAID6.0) RAID崩壊からの復旧【復旧天使】

IO-Data HDR-XR4.0(RAID6.0)がRAID崩壊した。実はこれが二回目。

 

前回いろいろと試した結果、なんとかデータを救い出すことに成功した。その組み合わせが以下のとおりで今回もこれで対応した。

 

 

X 2台(1台で2つのHDDをUSB経由でPCへ接続可能)

+


データ復元ソフト|テラステーションなどのNAS復旧ソフトなら【復旧天使】

StandardRAID

 

データ復旧業者さんに見積もりをお願いすると数十万円とか言われるますが上の組み合わせだと数万円で可能です。安くあげたい方は自己責任でどうぞ。ソフトは体験版を使えば救い出せるかどうかの判断はつきますので判断後に購入すればよいです。

 

以下手順

HDR-XR4.0よりHDDを4つとりだす。

・HDD接続キットにHDD4つを差し込みUSB経由でPCへ接続

・復旧天使でデータをHDDよりサルベージ(容量に制限はありますが体験版でも可能です) 。

・HDDを戻しHDR-XR4.0の管理ソフトでRAIDの強制復帰なり再フォーマットを行う

・必要ならばサルベージしたデータをHDR-XR4.0へ再移植

 

自分は定期的にバックアップしてたので最悪取り出せなくともあきらめはついたのですが、絶対復旧したいという方は業者さんにお願いした方がよいです。通電するだけでHDDが書き変えられファイルが壊れる可能性があるので、頼むなら自分でジタバタするのはよくないです。そっとしておきましょう。

 

ちなみに前回は再フォーマットの憂き目にあいましたが、今回は強制復帰で回復してくれました。前回と違いHDDの故障ではなさそうなのでRAID崩壊の原因がよくわからなかったのですが。。。

 

 

 

パスが通らずはまる

「;」が大事。

 

どこから見ても同じにしか見えない会社支給のPC2台のうち1台は

・set PATH=%PATH%C:¥Program Files¥NCBI¥blast-2.2.26+¥bin

でOKなのに、もう1台は

・set PATH=%PATH%;C:¥Program Files¥NCBI¥blast-2.2.26+¥bin

としないとPathが通ってなかった。

 

「;」が大事。

 

理由不明。

 

Pathが通ってないと気がつくまでかなりはまる。。。