7

Excel で散布図を生成するために使用するコードを、Win 7 / Excel 2010 から OS X / Excel 2011 に移植しています。Mac では、データ ポイントが影付きで表示されます。私は影が欲しくありません。それを取り除く方法がわかりません。

このワークシートを使用すると (マクロを有効にしたワークシートをダウンロードしたくない場合は、セル A1:B6 に乱数が入っているだけです)、次のコードは正常に実行されますが、影付きのデータ ポイントが生成されます。

Sub plotNoShadow()

  Dim x As Range
  Dim y As Range

  Dim cht As ChartObject

  Set x = ActiveSheet.Range("A1:A6") 'haphazard numbers
  Set y = ActiveSheet.Range("B1:B6")

  Set cht = ActiveSheet.ChartObjects.Add(Left:=150, Top:=50, Width:=200, Height:=160)
  With cht.Chart
    .ChartType = xlXYScatter
    .SeriesCollection.NewSeries
    With .SeriesCollection(1)
        .XValues = x
        .Values = y
        .Format.Shadow.Visible = msoFalse 'This seems to parse, but have no effect
    End With
    .SetElement (msoElementLegendNone)
    .SetElement (msoElementPrimaryValueGridLinesNone)
  End With      
End Sub

誰でも私に説明できますか:

  1. このコードを変更して影を削除する方法、および

  2. このコードはどのように実行されますが、SeriesCollection(1).Format.Shadow.Visible を msoFalse に設定すると、明らかな効果がなくても実行できるのでしょうか?

以下のコメント スレッドによると、マクロ出力のスクリーン キャプが左側にあり、影がオンになってからオフになっている点が中央にあり、影がオンになっている点が右側にあります。わかりやすくするために、マクロを編集して凡例とグリッド線を削除しました。マクロ出力には、「シャドウ オン」状態よりもシャドウが少ないように見えますが、「シャドウ オフ」状態よりもシャドウが多くなっています。

影の存在の 3 つの状態を説明するためのスクリーン キャプチャ

4

6 に答える 6

6

わずかな 3D 効果を生成する Excel の既定のグラフ スタイルのいくつかには、前述のように小さなドロップ シャドウもあります。

私の Excel (Windows 7) では、既定のグラフ スタイルは 2 であるため、影や 3D 効果は表示されません。Mac では、デフォルトのチャート スタイルが異なっているのではないかと思います。

これを修正するには、コードでチャート スタイルを設定します。

With cht.Chart
  .ChartType = xlXYScatter
  .ChartStyle = 2
  .....

Excel では、ChartStyle 設定には、マーカーの外観を含む、グラフの外観のすべての側面を変更する機能があります。MarkStyle が設定するのは、マーカーの形状だけです。ChartStyle が変更されると、Marker のその他の外観の側面はすべてオーバーライドされます。

編集

上記のコメントは基本的には真実ですが、影を遮断する方法を見つけました。Excel に関する多くのことと同様に、これは思ったほど簡単ではありません。影の可視性プロパティを設定しても、コードで行った場合は (何らかの理由で) 効果がないため、影のタイプを「影なし」に設定する必要があります。

Sub plotNoShadow()

  Dim x As Range
  Dim y As Range

  Dim cht As ChartObject

  Set x = ActiveSheet.Range("A1:A6") 'haphazard numbers
  Set y = ActiveSheet.Range("B1:B6")

  Set cht = ActiveSheet.ChartObjects.Add(Left:=150, Top:=50, Width:=200, Height:=160)
  With cht.Chart
    .ChartType = xlXYScatter
    .ChartStyle = 26 'Something 3D with a default shadow. This line can be left out.
    .SeriesCollection.NewSeries
    With .SeriesCollection(1)
        .XValues = x
        .Values = y
        .Format.Shadow.Type = msoShadow30 'This is the code for an inner shadow
    End With
  .SetElement (msoElementLegendNone)
  .SetElement (msoElementPrimaryValueGridLinesNone)
  End With

End Sub

もう一度編集

実際にmsoShadow30は、「内部シャドウ」スタイルであり、マーカー スタイルによっては奇妙に見える場合があります。 msoShadow41私が見つけることができた「No Shadow」に最も近いものです。これは実際には以下の影のコードですが、デフォルトでは薄すぎて見えません。表示された場合は、いつでも色を変更して非表示にすることができます。

または、透明度を 1 (完全に透明) に設定することもできます。

.Format.Shadow.Transparency = 1.0 'Fully transparent
于 2012-04-16T20:42:36.690 に答える
2

あなたが見ている影は、実際には影ではありません。つまり、マーカーが影なしで見えるデフォルトの方法です。

残念ながら、それについて多くを行うことはできません。以下のスナップショットを見れば、私の言いたいことがわかるでしょう。

スナップショット:

ここに画像の説明を入力

別:

ただし、マーカーのサイズを調整して、その影響を最小限に抑えることができます。このコードを試してください。

Sub plotNoShadow()

  Dim x As Range
  Dim y As Range

  Dim cht As ChartObject

  Set x = ActiveSheet.Range("A1:A6") 'haphazard numbers
  Set y = ActiveSheet.Range("B1:B6")

  Set cht = ActiveSheet.ChartObjects.Add(Left:=150, Top:=50, Width:=200, Height:=160)
  With cht.Chart
    .ChartType = xlXYScatter
    .SeriesCollection.NewSeries
    With .SeriesCollection(1)
        .MarkerStyle = 2
        .MarkerSize = 7
        .XValues = x
        .Values = y
        .Format.Shadow.Visible = msoFalse 'This seems to parse, but have no effect
    End With
  End With

End Sub
于 2012-04-16T18:16:43.417 に答える
2

Mac Excel チャートにおけるこの余計な書式設定は、私の多くのプログラムを Mac に変換する際の大きな障害となっています。幸いなことに、次のことを発見しました。

ActiveChart.ChartStyle = 2

これは、シャドウ、グラデーション、グローのないデフォルトのフォーマットを適用します。チャート内のすべての系列の詳細をすべて再フォーマットする必要はありません。

于 2014-04-27T18:26:19.407 に答える
1

データ系列をクリックし、データ系列のフォーマットに移動します。[シャドウ]オプションでは、[シャドウ]ボックスがオフになっている可能性があります。確認してください。これにより、下の編集コントロールがアクティブになります。次に、「透明度」を100%に設定します。また、「色」を白に設定することもできます。

于 2012-07-13T22:23:11.550 に答える
0

チャートの凡例を介して影を消すことができます:

cht.Chart.Legend.LegendEntries(1).LegendKey.Shadow = False

于 2012-04-25T03:36:07.053 に答える