web-dev-qa-db-ja.com

AddChart2 VBAマクロの数値は何を表していますか?

私はExcel2013を使用して、グラフ(私の場合は列クラスターグラフ)を挿入する際のマクロを記録しました。コードの表示オプションでは、次のようなコード行が表示されます。

ActiveSheet.Shapes.Addchart2(286,xl3DColumnClustered).Select

286という数字が何を表しているのか理解できないので、助けてください。 Addchart2の構文は次のとおりです。

expression.AddChart2(Style,XlChartType,Left,Top,Width,Height,NewLayout)

「286」を「285」に変更すると、チャートは青い背景で表示されます。数が100の場合はエラーが出ます。

数字が何を表しているのか教えてもらえますか?

13
OneBaseNotch

ChartTypeのみを指定することもでき、アプリケーションはデフォルトのスタイルを使用します。

Set oShp = ActiveSheet.Shapes.AddChart2(XlChartType:=xl3DColumnClustered)
oShp.Chart.SetSourceData Source:=RngDta

この図は、すべてのChartType(StockHLCとStockVOHLCを除く)のデフォルトのChartStyleを示しています。

enter image description here

11
EEM

さて、私はかつて同じ状況にありました、そしてそれらは基本的にチャートスタイルです。正確な番号を付けようとしましたが、ここで行ったように、録音がスタイル番号を知るためのはるかに簡単な方法であることに気付きました。

質問に答えるには、マクロを記録して、マクロに実装するスタイルを確認します。

0
Anarach

これはあなたの質問に直接答えることはありませんが、何が起こっているのかを理解するのに役立ちます。

これは私の側の純粋な推測ですが、文書化されていないビットフィールドだと思います。ご存知かもしれませんが、ビットフィールドは数値を使用する方法にすぎません。したがって、8ビット(またはフラグ)のバイト変数があります。したがって、1バイトに最大8つの値を格納できます。

例:「DaysOpen」ビット1〜7というフィールドがあり、ストアがその曜日に開いていることを意味します。 (8番目のビットは無視します。)したがって、ストアがオープンM-Fの場合、バイナリ01111100になります。

次に、その数値を10進数に変換すると、124であることがわかります。

その変数はバリアントであるため、バイトからロングまでの任意の変数である可能性があります。つまり、最大64の異なるフラグを格納できます。

補足として(興味がある場合)、次のようなビットフィールドを使用できます。

Option Explicit

Public Enum DayFlags
    'Notice these are power of 2.
    dfSunday = 1
    dfMonday = 2
    dfTuesday = 4
    dfWednesday = 8
    dfThursday = 16
    dfFriday = 32
    dfSaturday = 64
End Enum

Sub Example()
    Dim openHours As DayFlags
    'Set the flags:
    openHours = dfMonday Or dfTuesday Or dfThursday
    'See the binary?
    MsgBox Right$("00000000" & Excel.WorksheetFunction.Dec2Bin(openHours), 8)
    'Notice the order is right to left. This is call endianness.
    'You can check for a specific flag like this:
    MsgBox IsOpenOnDay(openHours, dfMonday) & vbNewLine & IsOpenOnDay(openHours, dfFriday)
    'You can add a flag like this:
    openHours = openHours Or dfFriday
    MsgBox IsOpenOnDay(openHours, dfMonday) & vbNewLine & IsOpenOnDay(openHours, dfFriday)
    'You can remove a flag like this:
    openHours = openHours Xor dfFriday
    MsgBox IsOpenOnDay(openHours, dfMonday) & vbNewLine & IsOpenOnDay(openHours, dfFriday)
End Sub

Private Function IsOpenOnDay(ByVal openHours As DayFlags, ByVal day As DayFlags) As Boolean
    IsOpenOnDay = ((openHours And day) = day)
End Function
0
Pillgram