[[20080806211410]] 『ボタンでフォントサイズの変更』(こう) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『ボタンでフォントサイズの変更』(こう)

フォームのボタンを利用し、指定したセルのフォントサイズを変更したいと思っています。実際に使うフォントサイズは11ptと9ptの2種類で、1つのボタンで実現したいので、押すたびに「11pt→9pt→11pt→9pt…」と変わるのが希望です。スピンボタンの本来の使用目的から外れると思いますが、スピンボタンでも可能であれば、その方法も教えていただけますでしょうか。よろしくお願いいたします。


 セルの元々のフォントサイズが9か11なら、

 Sub ボタン_Click()
    With ActiveCell.Font
       .Size = .Size Xor 2
       End With
 End Sub

 こんなコードで済みますけどねえ!!

 一例としてです。

 ichinose@グーグルマップすごいねえ東京見物できる

ichinose様

変更できました。早速にありがとうございました。

(こう)


 便乗質問ですみませんが、
 ichinoseさんのご提示のXorって演算子を始めて知ったのですが、
 どのような理屈になっているのかご教示いただけませんでしょうか。m(_ _)m
例えば、セルA1からA5に以下のようになっているとします。
	 [A]
 [ 1]	4
 [ 2]	6
 [ 3]	8
 [ 4]	10
 [ 5]	12
 そこで、以下のコードをボタンに登録し、各セルでコードを実行すると、下のような数値の変化になります。
Sub Test鮎()
With ActiveCell
   .Value = .Value Xor 2
End With
End Sub
	 [A]	
 [ 1]	4	⇔	6
 [ 2]	6	⇔	4
 [ 3]	8	⇔	10
 [ 4]	10	⇔	8
 [ 5]	12	⇔	14
 のように変化します。

 ヘルプを見て、「2 つの式の排他的論理和を求めます」って書いてあるのですが、
 いまいち理解できません。
 よろしくお願いします。
 追記:Xor 3にすると、余計に??です_/ ̄|○ il||li

 (川野鮎太郎)

 各数値を2進数に変換します。
  2→  10

  4→ 100
  6→ 110
  8→1000
 10→1010
 12→1100
 足りない桁は「0」とみなして各桁同士でヘルプに書いてある変換をしてみてください。

 例
  4 Xor 2

  100 4
  010 2
 ――
  110 6

  6 Xor 2

  110 6
  010 2
 ――
  100 4

 (独覚)


 独覚さん、ありがとうございます。
 なるほど、2進数にして考えるんですね。
 110+010=100 ?あれ、120じゃないのか・・・。
 2進数は、0と1しかないから、2は、0になって100?(^_^A;
 ちょうど2進数の授業のとき学校を休んでいたんだろうなぁ・・♪〜〜( ̄ε ̄;;)

 (川野鮎太郎)

 通常なら
  0110 (6)
  0010 (2)
 -----
  1000 (8)

 ですが排他的論理和につき
  0110 (6)
  0010 (2)
 -----
  0100 (4)

 > 110+010=100
 えーと足し算ではなくあくまでも「XOR」という計算です。
 (繰り上がりのない2進数の足し算と考えると確かに判りやすい面もあるんですが)

 ヘルプにも有りますが

 0 XOR 0 → 0
 0 XOR 1 → 1
 1 XOR 0 → 1
 1 XOR 1 → 0

 を各桁に適用です。
 (独覚)


 名無しさんも独覚さんもありがとうございます。
 排他的論理和って言葉が出たり、2進数、8進数やらをネットで調べてたら、
 頭が痛くなってきました(^_^A;
 >繰り上がりのない2進数の足し算と考えると確かに判りやすい面もあるんですが
 私には、↑で理解したほうが良いみたいです(T▽T)アハハ!
 とにもかくにも、貴重な時間をありがとうございました。
 名無しさんへ、折角の投稿はHNのご記入をお願いします。

 (川野鮎太郎)

 本当は、質問者さんから追記質問があると思っていたんですが・・・。

 因みにフォントサイズ  11と72の切り替えは、

 Sub main()
    With ActiveCell.Font
       .Size = .Size Xor (72 Xor 11)
       End With
 End Sub

 こんなコードです。

 こんな手法は、まだメモリーが少ない時代(48KBでプログラムを動かさなければならない頃)、
 沢山の情報をBit単位で抱えてた頃の低級言語プログラマ(アセンブラとか)なら、
 似たようなことは考えられていたのではないでしょうか
 決してわかりやすいコードではないですよね!!

 実務では

 Sub main()
    With ActiveCell.Font
       if .Size =11 then  .Size=72 else .size=11
       End With
 End Sub

 きっと私は↑こうします(ですから、一例と申し上げたのですが・・・)。
 たま〜に普段なら、しないようなコード(デバッグしてもらいたいようなコードもある)
 もこの手の掲示板では投稿することがあります。

 ichinose


皆様、ありがとうございました。

詳しくないので疑問を持たず、最初に教えていただいた方法で十分希望通りになった次第です。
少しずつ勉強していきたいと思いますので、また何かありましたらよろしくお願いいたします。

(こう)


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.