Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


1579 / 13645 ツリー ←次へ | 前へ→

【73313】セルの下の罫線と上の罫線 ブーチー 12/12/19(水) 20:42 質問[未読]
【73315】Re:セルの下の罫線と上の罫線 UO3 12/12/20(木) 5:41 発言[未読]
【73318】Re:セルの下の罫線と上の罫線 ブーチー 12/12/20(木) 8:45 お礼[未読]
【73320】Re:セルの下の罫線と上の罫線 UO3 12/12/20(木) 9:26 発言[未読]
【73321】Re:セルの下の罫線と上の罫線 ブーチー 12/12/20(木) 10:44 お礼[未読]
【73316】Re:セルの下の罫線と上の罫線 ichinose 12/12/20(木) 5:48 発言[未読]
【73319】Re:セルの下の罫線と上の罫線 ブーチー 12/12/20(木) 8:48 お礼[未読]
【73329】Re:セルの下の罫線と上の罫線 ichinose 12/12/21(金) 7:02 発言[未読]
【73331】Re:セルの下の罫線と上の罫線 ブーチー 12/12/21(金) 10:00 お礼[未読]
【73347】Re:セルの下の罫線と上の罫線 ichinose 12/12/22(土) 7:13 発言[未読]

【73313】セルの下の罫線と上の罫線
質問  ブーチー  - 12/12/19(水) 20:42 -

引用なし
パスワード
   ちょっと教えてください。

セルA1の下側の罫線と、セルA2の上側の罫線は、同じ罫線でしょうか?
それとも、それぞれ別の罫線として存在しているのでしょうか?

【73315】Re:セルの下の罫線と上の罫線
発言  UO3  - 12/12/20(木) 5:41 -

引用なし
パスワード
   ▼ブーチー さん:

おはようございます
2つの方法で確認できるかと思います。

まず、あるセルの上に太い罫線をセットしましょう。
で、その下のセルに細い罫線をセットしましょう。
これらが、別々の罫線なのか、同じ場所にあるものなのか。

1.上のセルを選択した状態で以下のコードを実行してみましょう。
 それぞれ、別のものなら、細い罫線と太い罫線、異なる値が表示されるはずですし
 同じものなら、後でセットしたもので上書きされているはずですから、後でセットした値になるはずですね。

Sub Test()
  Dim c As Range
  Set c = Selection
  MsgBox c.Borders(xlEdgeBottom).LineStyle & vbLf & c.Offset(1).Borders(xlEdgeTop).LineStyle
End Sub

2.罫線をセットした状態で上のセルを選択して書式で、セルの下側の罫線を【なし】にしましょう。
 別々のものなら下のセルの上側の罫線は残るはずですし、同じものなら、消えるはずですね。


>ちょっと教えてください。
>
>セルA1の下側の罫線と、セルA2の上側の罫線は、同じ罫線でしょうか?
>それとも、それぞれ別の罫線として存在しているのでしょうか?

【73316】Re:セルの下の罫線と上の罫線
発言  ichinose  - 12/12/20(木) 5:48 -

引用なし
パスワード
   おはようございます
>ちょっと教えてください。
>
>セルA1の下側の罫線と、セルA2の上側の罫線は、同じ罫線でしょうか?
>それとも、それぞれ別の罫線として存在しているのでしょうか?
新規ブックの標準モジュールで以下のコードの結果を調べてみると・・・・、

Sub test1()
  Dim bdr1 As Border
  Dim bdr2 As Border
  Range("a:a").Delete
  With Range("a1")
    Set bdr1 = .Borders(xlEdgeBottom)
    With bdr1
     .LineStyle = xlContinuous
     .Weight = xlThick
     .ColorIndex = 3
    End With
  End With
  MsgBox "セルA1の下段罫線を設定しました" & vbCrLf & "セルA1の下段罫線(Borders(xlEdgeBottom)と" & _
      "セルA2の上段罫線(Borders(xlEdgeTop) を比較します"
  Set bdr2 = Range("a2").Borders(xlEdgeTop)
  MsgBox "LineStyleプロパティ" & vbCrLf & _
      "セルA1の下段罫線=" & bdr1.LineStyle & vbCrLf & _
      "セルA2の上段罫線=" & bdr2.LineStyle & vbCrLf & vbCrLf & _
      "Weightプロパティ" & vbCrLf & _
      "セルA1の下段罫線=" & bdr1.Weight & vbCrLf & _
      "セルA2の上段罫線=" & bdr2.Weight & vbCrLf & vbCrLf & _
      "ColorIndexプロパティ" & vbCrLf & _
      "セルA1の下段罫線=" & bdr1.ColorIndex & vbCrLf & _
      "セルA2の上段罫線=" & bdr2.ColorIndex & vbCrLf & vbCrLf & _
      "と同じです"
  MsgBox "ただ、この罫線を扱うオブジェクトが違います" & vbCrLf & _
      "セルA1の下段罫線オブジェクト Is セルA2の上段罫線オブジェクト =" & (bdr1 Is bdr2)
End Sub


罫線は同じですね、それを扱うオブジェクトが違うだけですね

【73318】Re:セルの下の罫線と上の罫線
お礼  ブーチー  - 12/12/20(木) 8:45 -

引用なし
パスワード
   ▼UO3 さん回答ありがとうございます。

実はこの質問をしたきっかけは、前々から感じていた次のような現象が起きるからです。


このように上のセルと下のセルの上下、左右に太い罫線が引かれている時に、
この2つのセルの間に行を追加すると
____
|________|
|________|


上のセルの下は細い罫線、下のセルの上は太い罫線になることがあります。
____
|。。。。|
|________|
|________|

だから、2つの罫線が存在するのかなと思いました。

教えていただいた方法を試すと、同じ罫線ということになりますが、そうすると、どうしてこのような現象が起きるのでしょうか?

【73319】Re:セルの下の罫線と上の罫線
お礼  ブーチー  - 12/12/20(木) 8:48 -

引用なし
パスワード
   ▼ichinose さん

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

実はこの質問をしたきっかけは、前々から感じていた次のような現象が起きるからです。


このように上のセルと下のセルの上下、左右に太い罫線が引かれている時に、
この2つのセルの間に行を追加すると
____
|________|
|________|


上のセルの下は細い罫線、下のセルの上は太い罫線になることがあります。
____
|。。。。|
|________|
|________|

だから、2つの罫線が存在するのかなと思いました。

>罫線は同じですね、それを扱うオブジェクトが違うだけですね

扱うオブジェクトが違うとは、どういう意味になるのでしょうか?
もうすこし、詳しく説明が出来るのであれば、教えてください。
よろしくお願いします。

【73320】Re:セルの下の罫線と上の罫線
発言  UO3  - 12/12/20(木) 9:26 -

引用なし
パスワード
   ▼ブーチー さん:

おはようございます
エクセルのバージョン(そのブックが作られたバージョン)はいくつでしょう。
もう昔のことで、xl4.0,5.0,95,97 のどのバージョンだったか記憶があやふやなんですが、

たとえば上のセルの下側の罫線を消したときに、下のセルの上側の罫線が残っていたように記憶しています。
つまり、この時は【別物】として存在していたと記憶。
97でセル結合が登場したと書いてありましたから、95以前のセル書式の扱いと
97以降のそれに違いがあるのかもしれません。

でも、少なくとも 2003以降であれば、同じものだと認識いただいてOKだと思います。

【73321】Re:セルの下の罫線と上の罫線
お礼  ブーチー  - 12/12/20(木) 10:44 -

引用なし
パスワード
   ▼UO3 さん 回答ありがとうございます。

今、使っているのは、Ver2003になりますが、ファイルそのものは、それ以前に作られたものかもしれません。

エクセルを操作する時は、行や列の挿入で、しばしば罫線が消えることがあり気になるのですが、マクロ上は、同一のものとして扱って問題ないということで、解決としたいと思います。

【73329】Re:セルの下の罫線と上の罫線
発言  ichinose  - 12/12/21(金) 7:02 -

引用なし
パスワード
   おはようございます。


>>罫線は同じですね、それを扱うオブジェクトが違うだけですね
>扱うオブジェクトが違うとは、どういう意味になるのでしょうか?
>もうすこし、詳しく説明が出来るのであれば、教えてください。

前回投稿の

> MsgBox "ただ、この罫線を扱うオブジェクトが違います" & vbCrLf & _
>       "セルA1の下段罫線オブジェクト Is セルA2の上段罫線オブジェクト =" > & (bdr1 Is bdr2

このコードの結果を言っているのですが、Falseと表示されませんでしたか?

私も最初混同していたんですが、

Rangeオブジェクト = セル ではない

Borderオブジェクト = 罫線 ではない

同じ罫線を扱っていても、窓口(Borderオブジェクト)が違うという
ことが有り得る ということなんです。

今回のばあい、セルA1の Borders(xlEdgeBottom)
セルA2のBorders(xlEdgeTop)、
見たとおり、オブジェクトが違いますが、同じ罫線を扱っている
ということです。

↑は、オブジェクトの記述が違うので何となく、違うオブジェクトだと
認識できると思いますが、もっとわかりにくい事例もあります。


新規ブックの標準モジュールに

Sub test2()
   Dim bdr1 As Border
   Dim bdr2 As Border
   Range("a:a").Delete
   With Range("a1")
    With .Borders(xlEdgeBottom)
      .LineStyle = xlContinuous
      .Weight = xlThick
      .ColorIndex = 3
    End With
    Set bdr1 = .Borders(xlEdgeBottom)
    Set bdr2 = .Borders(xlEdgeBottom)
   End With
   MsgBox "セルA1の下段罫線のオブジェクトbdr1 と 同じくセルA1の下段罫線のオブジェクトbdr2" & vbCrLf & _
      "を比較します"
   MsgBox "LineStyleプロパティ" & vbCrLf & _
      "bdr1=" & bdr1.LineStyle & vbCrLf & _
      "bdr2=" & bdr2.LineStyle & vbCrLf & vbCrLf & _
      "Weightプロパティ" & vbCrLf & _
      "bdr1=" & bdr1.Weight & vbCrLf & _
      "bdr2=" & bdr2.Weight & vbCrLf & vbCrLf & _
      "ColorIndexプロパティ" & vbCrLf & _
      "bdr1=" & bdr1.ColorIndex & vbCrLf & _
      "vdr2=" & bdr2.ColorIndex & vbCrLf & vbCrLf & _
      "と同じですが、"
   MsgBox "bdr1 is bdr2 = " & (bdr1 Is bdr2) & vbCrLf & _
      "違うという結果が表示されます"

End Sub

test2の結果とコードを照らし合わせてみてください

以前、目安箱でこんな投稿をしました。

www.vbalab.net/vbaqa/c-board.cgi?cmd=ntr;tree=164;id=FAQ

これでも疑問が解決しなかったら、ピンポイントで追加質問をしてください

【73331】Re:セルの下の罫線と上の罫線
お礼  ブーチー  - 12/12/21(金) 10:00 -

引用なし
パスワード
   ▼ichinose さん 回答ありがとうございます。

目安箱をみることで、おっしゃっていることは大変良く分かりました。

そこで、またあることを思いつき試してみました。(excel2003にて)

_______
|______| ← 1.実線で囲まれたセル
         ← 2.左右が線なしのセル
。。。。。。。。
|______| ← 3.上側が点線のセル


このような場合に、2の行を削除するとこうなります。
_______
|______|
|______|


この時に、1のセルの下側は実線、2のセルの上側は実線と判定されると思います。
そして、また、1と3の間に行を追加すると、次のようになり、点線は存在していることになります。
_______
|______| ← 1.実線で囲まれたセル
         ← 2.この行を追加した
。。。。。。。。
|______| ← 3.上側が点線のセル

これがちょっと不思議に思えたのですが、まあ、こういうものだと思えば、現状は不都合はないので良しとしたいと思います。

【73347】Re:セルの下の罫線と上の罫線
発言  ichinose  - 12/12/22(土) 7:13 -

引用なし
パスワード
   おはようございます。


>この時に、1のセルの下側は実線、2のセルの上側は実線と判定されると思います。
>そして、また、1と3の間に行を追加すると、次のようになり、点線は存在していることになります。
>_______
>|______| ← 1.実線で囲まれたセル
>         ← 2.この行を追加した
>。。。。。。。。
>|______| ← 3.上側が点線のセル
>
>これがちょっと不思議に思えたのですが、まあ、こういうものだと思えば、現状は不都合はないので良しとしたいと思います。

現象確認しました。不思議か必然か?

ただ、真中の行を削除して、点線が隠れた時点では、Borderオブジェクトで点線を取得することは出来ませんね

内部情報として存在しても、データとしては、取得できないのでしょうね!!

新しい発見がありました。 ブーチーさんがよく研究しておられたおかげです
私も感謝です。

1579 / 13645 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free