FC2ブログ

Excelじゆうちょう

Excelのお絵描きツール『りっぷ2(りっぷつぅ)』のサポートページ、まずは「はじめに」をご覧ください。 [NewEntry] [Admin]

記事更新カレンダー

09 « 2018-10 « 11
- 1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31 - - -

やたらに多いカテゴリ

比較的新しい記事

新しいコメント

ありがたいブログ拍手

拍手コメント一覧(拍手はしない)

さみしいトラックバック

申し訳ないプロフィール

申し訳ない

管理人  [ 申し訳ない ]

pxivもやってます
リンクの一番上からのぞきに来てください
※閲覧にはユーザー登録が必要です

RSSってなんぞ?

広告は消せないらしい

FC2Ad

        --------       スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

        2011-11-22       新Excel、カラーインデックスの怪

新旧Excelのカラーパレットについて、今回はちょっと寄り道してバグ報告です。

新Excelのカラーパレットからカラーインデックスを取得すると、カラーインデックスにない色でも近い色の値が返ってきます。
よって、違う色でも同じカラーインデックスになってしまう場合があります。
ここまでは新Excelの仕様です。

↓旧カラーパレットには同じ色が複数ある↓
新Excelで旧カラーパレット

では、この新Excel上で作成した旧Excelのカラーパレットのブックを、旧Excelの形式で保存するとどうなるのでしょうか?
カラーパレットには互換性がありませんから、いくつかの色で色情報が失われてしまうのは間違いありません。
常識的に考えると、上の画像で入力されているカラーインデックスの色になるはずです。
でないと、この値が返ってくる意味がありません。

↓アクティブセルの文章は前回の名残(無視願います)↓
旧Excelで新カラーパレット

うむむ、どうも違うなあ。
47とか、56なんてひどいものです。
RGB値をカラーインデックスへ変換する方法が、新旧Excelで違うのかもしれません。

きっと、新Excelでカラーインデックスを使うこと自体がサポート外なのでしょうけれども、こうやって明確に返ってきた結果が異なるのはバグ認定です。
スポンサーサイト

        2011-11-01       OFFSET関数の「参照」

今月はExcel月刊(私が決めた、今決めた)

ずっとちゃんとしたExcel記事を書いてこなかったので、今月は積極的に更新していこうと思います。
(ですが、以前ほどの更新ペースはもうできません)

しょっぱなは最近発見したバグのお話です。

もしかしたら、知ってる人は知ってるかもしれません。
対象はワークシート関数のOFFSET関数、ここの入力時に表示されるヒントの誤植です。
単なる誤植ですから計算結果に影響はありません、ほんの少しの違和感を感じるだけです。

↓第1引数が「参照」↓
OFFSET入力2007

正しくはヘルプの通りです。

↓第1引数は「基準」↓
OFFSETヘルプ2007

これに気が付いたのはExcel2007でした。
他のExcelのバージョンではどうでしょう?

↓Excel2010ではそのまま↓
OFFSET入力2010

↓ヘルプは大丈夫↓
OFFSETヘルプ2010

↓Excel2003は問題ない↓
OFFSET入力2003

↓念のためヘルプも↓
OFFSET入力2003

どうやら、Excel2007の大幅なバージョンアップで間違ったまま、今の今まで修正されずじまいだったようです。
そこまでマイナーな関数ではないので誰かは気づきそうなものなんですけど、私を含め、たいていの人は見つけても報告しないでしょうから放置されてしまったのかもしれません。

        2010-11-27       Excelが関連付けできない

以前、『 右クリックから開けない 』の記事で、プログラムの選択にExcelが表示されないというバグを紹介しました。

このたび新しいノートPCとExcel2010を購入し、Excel2003とExcel2007と併せてインストールしました。
さて、同じ現象は発生するのでしょうか?

別の現象が発生しました。

プログラムの選択に、Excel2007を起動するアイコンしか表示されませんでした。
Excel2003とExcel2010を個別に起動してそこから直接開いてやれば大丈夫なんですが、それだとあまりにもめんどくさいです。
どうしたものかということで、とりあえずレジストリを確認してみましょう。
確か、以前の原因はプログラムから開く際に参照するExcel本体のアドレスが更新されず、無効なアドレスとなっていたというものでした。

[コンピュータ]
 ┗[HKEY_CLASSES_ROOT]
   ┗[applications]
     ┗[EXCEL.EXE]
       ┗[shell]
         ┗[open]
           ┗[command]←犯人はこいつ、ここが無効なアドレスでした

レジストリ エディタを起動してビックリしました。

[EXCEL.EXE]がないんです。

どうして? 特別何もしてないのに? OSがWindows7になったから?
原因はわかりません、とにかく[EXCEL.EXE]がなかったんです。
仕方ないから、[EXCEL.EXE]配下のレジストリを自分で追加しました。
アドレスはExcel2010の実行ファイルのアドレスにしました。
すると表示されるようになりました、合計ふたつ。
Excel2007とExcel2010が右クリックから開き分けることができるようになりました。

Excel2003がおいてけぼりになってしまいました。

Excel2007は別にいいから、少なくともExcel2003とExcel2010を開き分けるようにしたいものです。
そこで、こんな風にしてみました。

Excel2003を起動して、メニューから[ヘルプ(H)]の[アプリケーションの自動修復(R)]をクリックします。

↓ここ↓
ヘルプメニュー

↓[開始]をクリック↓
アプリケーションの自動修復

すると、さっきまでExcel2007が起動していたプログラムから開くのアイコンから、Excel2003が起動するようになりました。
ところが、Excel2010のアイコンがなくなってしまいました。
もしやと思ってもう一度レジストリ エディタを開いてみると、[EXCEL.EXE]がなくなってしまってるではありませんか。
仕方ないので、再度[EXCEL.EXE]配下のレジストリを自分で追加しました。
アドレスはExcel2010の実行ファイルのアドレスにしました。
すると表示されるようになりました、合計ふたつ。
Excel2003とExcel2010が右クリックから開き分けることができるようになりました。

Excel2007はおいてけぼりですけど、諦めました。

        2010-03-20       Excelのバグ、発見

前回のExcel2007のバグに次いで、Excel2003でもバグを発見しました。
しかもこのバグ、Excel2007でもExcel2000でも発生します。
どうやら、代々修正されずに受け継がれてきた伝統的なバグのようです。

内容はというと、これまたセル幅の関連で、 変更したはずの列幅が元に戻ってしまう 現象をいろいろ調べてるうちに偶然発見しました。

RowHeightプロパティ、ColumnWidthプロパティでの戻り値がおかしい!

まずはヘルプを見てみましょう、本来の機能がまとめられています。



【RowHeightプロパティ】
関連項目関連項目関連項目関連項目対象セル範囲内のすべての行の高さをポイント単位で返します。
指定されたセル範囲のすべての行の高さが同じでない時、Null値を返します。
値の取得および設定が可能です。
バリアント型(Variant)の値を使用します。

■解説
1行のセル範囲を対象とした時は、Heightプロパティの値とRowHeightプロパティの値は同じになります。
ただし、Heightプロパティは、対象セル範囲全体の高さを返すという点でRowHeightプロパティと異なります。
それ以外に、RowHeightプロパティとHeightプロパティには次のような違いがあります。
Heightプロパティは、値の取得のみ可能です。
複数行のセル範囲を対象とした時、RowHeightプロパティは、
指定した行の高さがすべて同じでない時、Null値を返します。
Heightプロパティでは、すべての行の高さの合計を返します。

【ColumnWidthプロパティ】
関連項目関連項目関連項目関連項目指定された対象セル範囲内のすべての列の幅を設定します。
値の取得および設定が可能です。
バリアント型(Variant)の値を使用します。

■解説
列幅の単位は、標準スタイルの1文字分の幅に相当します。
プロポーショナルフォントでは、数字の0の幅が列幅の単位になります。
列幅をポイント単位で取得するには、Widthプロパティを使ってください。
対象セル範囲内のすべての列が同じ幅の時は、その値を返します。
対象セル範囲内の各列の幅が異なる時は、Null値を返します。




黄色の文字の部分が問題の個所です。
今回の現象では、ある条件がそろった時、対象の行または列の幅がすべて同じでなくても対象の上端行の高さまたは左端列の列幅が返ります。

再現方法は以下の通りです。

(1)、新規のExcelファイルを用意します。
   XLSでもXLSXでも、Excelのバージョンは問いません。

(2)、任意の行または列の幅を変更します。
   ここで他の操作をしてはいけません、バグにならない可能性があります。(※)

(3)、RowHeightプロパティまたはColumnWidthプロパティで行または列の幅を取得すると、数値が返ります。
   ここで得られる値は、対象の上端行のポイント数または左端列の文字幅となります。

(※)
可能性があるというのは、影響を及ぼす操作を特定できていないからです。
少なくとも、セルに文字を入力すると影響を及ぼす可能性があります。
しかも、入力するセルによってもバグの発生に影響があります。
また、一度Null値が返ると(正しい動作)、その後はバグが発生しなくなります。

以下のマクロで確認できます。
(行も列もだいたい同じですので、例はColumnWidthプロパティだけです)


'【コードウインドウ】
Private Sub test1()
Range(Cells(2, 2), Cells(5, 5)).Select
Debug.Print "選択範囲の列幅"
Debug.Print Selection.ColumnWidth '標準の幅は、8.38
  Selection(3).ColumnWidth = 1 '列3の幅を、1にする
  Debug.Print "選択範囲の列幅"
  Debug.Print Selection.ColumnWidth 'Nullにならない
Selection(1, 1) = "入力(1,1)"
Debug.Print "選択範囲の列幅(1,1)"
Debug.Print Selection.ColumnWidth 'Nullにならない
  Selection(2, 1) = "入力(2,1)"
  Debug.Print "選択範囲の列幅(2,1)"
  Debug.Print Selection.ColumnWidth 'Nullにならない
Selection(2, 2) = "入力(2,2)"
Debug.Print "選択範囲の列幅(2,2)"
Debug.Print Selection.ColumnWidth 'Nullになる
  Selection(3, 2) = "入力(3,2)"
  Debug.Print "選択範囲の列幅(3,2)"
  Debug.Print Selection.ColumnWidth 'Nullになる
Selection(3, 3) = "入力(3,3)"
Debug.Print "選択範囲の列幅(3,3)"
Debug.Print Selection.ColumnWidth 'Nullになる
  Selection(4, 3) = "入力(4,3)"
  Debug.Print "選択範囲の列幅(4,3)"
  Debug.Print Selection.ColumnWidth 'Nullになる
MsgBox "いったん中断"
Selection.Clear
Debug.Print "選択範囲の列幅"
Debug.Print Selection.ColumnWidth 'Nullになる
End Sub

【イミディエイトウインドウ】
選択範囲の列幅
 8.38
選択範囲の列幅
 8.38
選択範囲の列幅(1,1)
 8.38
選択範囲の列幅(2,1)
 8.38
選択範囲の列幅(2,2)
 8.38
選択範囲の列幅(3,2)
 8.38
選択範囲の列幅(3,3)
Null
選択範囲の列幅(4,3)
Null
選択範囲の列幅
Null


↓セルに入力したのはこんな感じ↓
ColumnWidthテスト1


'【コードウインドウ】
Private Sub test2()
Range(Cells(2, 2), Cells(5, 5)).Select
Debug.Print "選択範囲の列幅"
Debug.Print Selection.ColumnWidth '標準の幅は、8.38
  Selection(3).ColumnWidth = 1 '列3の幅を、1にする
  Debug.Print "選択範囲の列幅"
  Debug.Print Selection.ColumnWidth 'Nullにならない
Selection(1, 3) = "入力(1,3)"
Debug.Print "選択範囲の列幅(1,3)"
Debug.Print Selection.ColumnWidth 'Nullにならない
  Selection(2, 3) = "入力(2,3)"
  Debug.Print "選択範囲の列幅(2,3)"
  Debug.Print Selection.ColumnWidth 'Nullにならない
Selection(2, 2) = "入力(2,2)"
Debug.Print "選択範囲の列幅(2,2)"
Debug.Print Selection.ColumnWidth 'Nullになる
  Selection(3, 2) = "入力(3,2)"
  Debug.Print "選択範囲の列幅(3,2)"
  Debug.Print Selection.ColumnWidth 'Nullになる
MsgBox "いったん中断"
Selection.Clear
Debug.Print "選択範囲の列幅"
Debug.Print Selection.ColumnWidth 'Nullになる
End Sub

【イミディエイトウインドウ】
選択範囲の列幅
 8.38
選択範囲の列幅
 8.38
選択範囲の列幅(1,3)
 8.38
選択範囲の列幅(2,3)
Null
選択範囲の列幅(2,2)
Null
選択範囲の列幅(3,2)
Null
選択範囲の列幅
Null


↓セルに入力したのはこんな感じ↓
ColumnWidthテスト2

test1とtest2で、セルに入力する文字によって結果が若干変わりました。
これが行のRowHeightプロパティでも、結果は若干変わってきます。
そのさじ加減がよくわかりません。
ここには示していませんが、自分でいくつかテストした感触だと、RowHeightプロパティの方がNull値への修正力が強いように思います。

気になる人は調べてみてください。

        2010-03-15       Excel2007のバグ、発見

Excel2003で作成してきたりっぷ2(りっぷつぅ)をExcel2007のファイル形式にして動かしてみたところ、Excel2007自体のバグを発見しました。

変更したはずの列幅が元に戻ってしまう!

エラーも強制終了もありません、何事もなかったかのように列幅の変更が無効化されてしまいます。
再現方法は以下の通りです。

(1)、新規のXLSMファイルを用意します。
   Excel2003以前のXLSファイルでは、バグは発生しません。

(2)、すべての列幅を一括で変更します。
   特定の列幅の変更では、バグは発生しません。

(3)、すべての列を再表示します。
   特定の列幅の再表示では、バグは発生しません。

(4)、列幅が規定値に戻ってしまいます。

以下のマクロで確認できます。


'【コードウインドウ】
Private Sub test1()
Cells.ColumnWidth = 8 / 13 '列幅を8ピクセルにする
MsgBox "いったん中断"
Columns.Hidden = False '列をすべて再表示(列幅が元に戻る)
End Sub


列を指定して幅を変更したり非表示にしたりすると、それはもうみっともないです。


'【コードウインドウ】
Private Sub test2() '3列目だけ8ピクセルになる
Cells.ColumnWidth = 8 / 13 '列幅を8ピクセルにする
MsgBox "いったん中断"
Columns(3).ColumnWidth = 1 '3列目の幅を13ピクセルにする
MsgBox "いったん中断"
Columns.Hidden = False '列をすべて再表示
End Sub

Private Sub test3() '6列目だけ8ピクセルになる
Cells.ColumnWidth = 8 / 13 '列幅を8ピクセルにする
MsgBox "いったん中断"
Columns(6).Hidden = True '6列目の幅を非表示にする
MsgBox "いったん中断"
Columns.Hidden = False '列をすべて再表示
End Sub

Private Sub test4() '3列目が13ピクセル、4~5列目が8ピクセルになる
Columns(3).ColumnWidth = 1 '4列目の幅を13ピクセルにする
MsgBox "いったん中断"
Columns(6).Hidden = True '6列目の幅を非表示にする
MsgBox "いったん中断"
Cells.ColumnWidth = 8 / 13 '列幅を8ピクセルにする
MsgBox "いったん中断"
Columns.Hidden = False '列をすべて再表示
End Sub

Private Sub test5() '3列目と6列目だけ8ピクセルになる
Columns.Hidden = True '列をすべて非表示
MsgBox "いったん中断"
Columns(3).ColumnWidth = 1 '3列目の幅を13ピクセルにする
MsgBox "いったん中断"
Columns(6).ColumnWidth = 1 '6列目の幅を13ピクセルにする
MsgBox "いったん中断"
Columns.Hidden = False '列をすべて再表示
End Sub


↓上からtest2、test3、test4、test5の結果↓
Excel2007、バグ

これはあくまでExcel2007以降のファイル形式でのバグです、Excel2007でXLSファイルを開いても再現できません。
その点で言うと、XLSXファイルでもXLSBファイルでも再現はできます。(XLSXファイルはマクロを保存できませんが、実行は可能)

原因はわかりません。

というわけで、りっぷ2(りっぷつぅ)では処理の順番を入れ替えることで対応しています。

古い記事  | HOME | 

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。