人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

ExcelVBAについて。
ActiveSheet.Shapes.AddTextbox(msoTextOrientationHorizontal, 125.25, 33#, 75.75, 19.5).Select

と入力すればテキストボックスが作られます。
『,』で区切られた4つの数字の意味なのですが、
横の位置,縦の位置,横の大きさ,縦の大きさ
であると思います。(経験的に)
ここで、上の例の33の後の#の意味は何でしょうか。
また、『,』で区切られた数字の単位は何ですか。
それをPXで指定することは可能でしょうか。
上の数字のどれか(例えば4つ目の19.5)を特定のセル(例えば E3 )の数字にしたいときにはどうすればよいですか。

最後に、行間の大きさを変更しようとすると現在の行間の大きさを表示してくれます。(例えば 13.50(18ピクセル) )
このとき、縦と横とでピクセルの大きさに対する左の数字の大きさが違うと思うのですが、なぜでしょうか。

ひとつ以上解答して、参考URLもあれば教えてください。
基本的にひとつの質問に対する最初の私に分かる回答のポイントを大きくします。

●質問者: OKAMON
●カテゴリ:コンピュータ ウェブ制作
✍キーワード:E3 PX SELECT URL ひとつ
○ 状態 :終了
└ 回答数 : 4/4件

▽最新の回答へ

1 ● llusall
●30ポイント ベストアンサー

「33#」はDouble型の33ですよと、明示的に記述しています。


VBAヘルプ

倍精度浮動小数点数型の型宣言文字はシャープ記号 (#) です。


単位は、VBAヘルプでは、「ポイント単位」となっています。


PXで指定につきましては、残念ながらポイントをピクセルに変換するような関数等知らないのでわかりません。すみません。


(例えば4つ目の19.5)を特定のセル(例えば E3 )の数字にしたい

ActiveSheet.Shapes.AddTextbox(msoTextOrientationHorizontal, 125.25, 33#, 75.75, Cells(3, "E").Value).Select

◎質問者からの返答

解答ありがとうございます。

つまるところDouble型(倍精度不動小数点数型)とはなんなのでしょうか。

それ(♯)があるのとないのとでは何が違うのでしょうか。


2 ● ardarim
●20ポイント

Excelでは、縦(行の高さ)と横(列の幅)の単位が異なっています。

そのために、縦と横とでピクセルの大きさに対する左の数字の大きさが異なります。


行の高さは、ポイント単位で指定します。

列幅の単位は、標準スタイルの 1 文字分の幅に相当します。プロポーショナル フォントでは、数字の 0 の幅が列幅の単位になります。(ちょっと分かりにくい単位ですが、[ツール]-[オプション]-[全般]で設定している標準フォントをセルに設定した場合の、半角0が入る個数=列幅と思ってください)


ちなみにピクセルからポイントへの変換ですが、擬似的に以下の計算で算出できます。

pt = Application.InchesToPoints(px / dpi)

pt は 求めたいポイント数、px は ピクセル数、dpi はディスプレイの解像度です(本当は使っているディスプレイによって異なりますが、計算上擬似的に96を使う場合が多いです)。

◎質問者からの返答

解答ありがとうございます。

なかなかややこしいですね。


3 ● Mook
●20ポイント

他の部分は llusall さんが解答されているので、ピクセルに関する処理だけ。


まず、AddTextBox の引数はpt(ポイント)が単位となっています。

1ポイントの定義は

      1in(インチ)=72pt

なので、pt から px への変換は、72で割って画面解像度(dpi:1インチあたりのドット数(ピクセル数))をかけたものになります。


画面解像度を取得する関数は

      Application.DefaultWebOptions.PixelsPerInch

がありますので、C3 のセルの大きさは px 単位では、

      dpi = Application.DefaultWebOptions.PixelsPerInch
      widthPix = Range("C3").Width / 72 * dpi
      heightPix = Range("C3").Height / 72 * dpi

のようになります。


VBA には PointsToScreenPixelsX, PointsToScreenPixelsY といったプロパティもありますが、

どうもこれでは EXCEL の表示上のピクセルと一致しませんでした。


セルの大きさについての Q&A は参考になるかと思います。

◎質問者からの返答

解答ありがとうございます。


4 ● Mook
●20ポイント

sansai58 さんの知識がどの程度かわからなかりませんでしたが、ピクセルに関する情報はあまり重要ではなかったようですね。

もう少し基本的な部分の説明をした方が今後の理解に役立つかと思いましたので、データ型に関して解答します。


VBA では数値を扱うための数値型として、いくつかの型があります。ちょっと乱暴ですが、

といった特徴があります(他にも通貨型や10進型があります)。

また、数値型以外にも、文字列型、日付型、オブジェクト型などがあり、変数(あるいは関数の引数)で指定できるものは、これらの属性を持っています。


それぞれのデータ型を使うメリット、デメリットはコンピュータの内部処理にまで言及するので今回は割愛しますが、興味があれば

http://www.asahi-net.or.jp/~ef2o-inue/vba_k/sub04_050_06.html

http://msdn2.microsoft.com/ja-JP/library/47zceaw7.aspx

http://web.sfc.keio.ac.jp/~tsaito/ITWS/Lec02.html

などをご参照ください。


今回のは、数値が Double であることを、明示的にするもので VBE で 10.0 と入力すると勝手に 10# となると思います。これが影響を及ぼす例として、下記を実行してみてください。

Debug.Print 10000 * 10

「オーバーフローが発生しました。」というエラーがでるでしょう。

これは、数値(ただし-32,768?32,767)のデフォルトのデータ型である Integerがあつかえるデータ範囲を超えたためにエラーとなります。

Debug.Print 10000# * 10#

とすると、答えがイミディエイト ウィンドウに表示されます。


コンピュータは人間のように融通が利かないので、不便ですが人間がデータ型を考えながら指示する必要があります。

◎質問者からの返答

なるほど、Integer、Long、、Single、Doubleは知っていましたが、♯ガあるとないの違いが良く分かりました。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ