|目次 | 太刀魚のウキ釣り | TIDEforWIN付釣果記録用紙 | セルとVBA間データ受渡し | アニメーションGIF | sitemap.xml表示 | htaccess設定 | 掲示板 |
作成日:2014年12月07日、更新日:2015年 1月 1日 作成:太刀魚EXCELのセルとVBA間のデータ受け渡しについての考察を行い、例としてオートシェィプで月を描画します。
目次
VBAで普通一般に紹介されているコーディング例は、下記の様になっています。そして、これだけで説明が終わっています。 この様な書き方では、例えば、A列の列追加や列削除および1行の行追加や行削除を行うと、VBAで読み書きするセル位置が変わらない為、 多くの場合、不具合を生じます。従って、一般的にVBAコーディング後のEXCELのセルのレイアウトの変更はできないことになります。(レイアウトを変えるとコーディングも変更しなければならなくなります。)
一般に紹介されているコーディング例
'B8セルの内容を読み出す Dim B8セルの内容 As Variant B8セルの内容 = Range("B8").Value B8セルの内容 = Cells(8,2).Value '範囲B3:B4にオートシェィプ三日月(Type:=msoShapeMoon)を書く Dim L As Variant, T As Variant, H As Variant With ActiveSheet.Range("B3:B4") L = .Left T = .Top H = .Height End With Dim 月 As Object Set 月 = ActiveSheet.Shapes.AddShape(Type:=msoShapeMoon, Left:=L, Top:=T, Width:=H, Height:=H)
下記のコーディング例は、セルやセルの範囲を名前で定義してVBAから指定しています。 この書き方では、A列の列追加や列削除および1行の行追加や行削除を行うと、読み書きするセル位置が自動的に変わってくれる為、 VBAコーディング後のEXCELのセルのレイアウトの変更も可能となります。(レイアウト変更してもコーディングを変更しなくてよい) また名前の定義を再設定することにより、自由にセル位置を指定できます。 これは、VBAを知らない人でもレイアウトを変更できることを意味します。
名前の管理 | 名前の一覧 |
---|---|
![]() |
![]() |
名前で定義したコーディング例
'"月齢"という名前で定義したB8セルの内容を読み出す Dim d月齢 As Variant d月齢 = Range("月齢").Value '"月描写セル"という名前で定義した範囲B3:B4にオートシェィプ三日月(Type:=msoShapeMoon)を書く Dim L As Variant, T As Variant, H As Variant With ActiveSheet.Range("月描写セル") L = .Left T = .Top H = .Height End With Dim 月 As Object Set 月 = ActiveSheet.Shapes.AddShape(Type:=msoShapeMoon, Left:=L, Top:=T, Width:=H, Height:=H)
名前で定義したコーディングの実例を紹介します。VBA月齢図.xls(40KB)をダウンロードして、下図のように月を描画するセル3行と4行の高さを大きくしておきます。
VBA月齢図.xlsのsheet1 | VBA月齢図.xlsの説明 |
---|---|
![]() |
「月描写」ボタンを押すと、B2:B3の高さいっぱいに月が暦Wiki/月の満ち欠け - 国立天文台暦計算室のように表示されます。 このシートでは、A列の列追加や列削除および1行の行追加や行削除を行っても正しく機能します。 この黄色と黒色のオートシェイプ図形による月の満ち欠けの表示は、実際に「TIDEforWIN付釣果記録用紙」で使用しています。 |
VBA月齢図.xls(39KB)をダウンロードして頂いて内容を見て頂く方が良いのですが、 気の短い方や検索エンジンの為にコーディング内容を以下に示します。 尚、日曜プログラマなので、コーディングのレベルが低いのは、ご容赦ください。
「月描写」ボタンが押された場合の処理内容を示します。
sheet1の内容
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) Sub btn月描写_Click() Dim d月齢 As Double Dim s月描写セル As String ' Dim Nameセル名 As Name ' For Each Nameセル名 In ActiveWorkbook.Names ' Debug.Print "btn月描写_Click 名前"; Nameセル名.Name; " "; Nameセル名.Value ' Next ' ワークシートの「月描写」という名前で定義されたセル範囲の文字列を読出す s月描写セル = Range("月描写セル").Name.Value Dim type月 As 月の図形 type月 = gfunc月描写初期化(s月描写セル) Application.Calculation = xlCalculationManual For d月齢 = 0 To c朔望月 Step 0.1 ' Application.ScreenUpdating = False Range("月齢").Value = d月齢 ' ワークシートの「月齢」という名前で定義されたセルに書込む Call gsub月描写(d月齢, type月) ' Application.ScreenUpdating = True DoEvents Sleep 10 Next d月齢 Application.Calculation = xlCalculationAutomatic Call gsub月描写領域解放(type月) End Sub
c朔望月などの定数は、下記の標準モジュールで定義しています。
汎用性のある処理内容をsheet1に記載せずに標準モジュールに記載しました。
標準モジュールの内容
Option Explicit '定数 Public Const π As Double = 3.14159265358979 ' π = Atn(1) * 4 ' π = 3.14159265358979323846 Public Const cDEG→RAD変換係数 As Double = π / 180 ' = 2 * π / 360 Public Const cRAD→DEG変換係数 As Double = 180 / π ' = 360 / 2 * π Public Const c朔望月 As Double = 29.530589 ' 月の満ち欠けの周期 Public Const c半月に含む日数 As Double = 0.4 ' 半月にする範囲 Public Const c月と地球の公転軌道面の角度 As Single = 25.1333 ' 実際は、5.1333 = 5度8分(地球の公転軌道面とは、黄道面のこと) ' 26を超える数値を入れ図形を大きくするとボロがでる。 Type 月の図形 月の背面 As Object 月の前面 As Object 月の半月 As Object 左上X座標 As Single 左上Y座標 As Single 月の直径 As Single End Type
Public Function gfunc月描写初期化(ByVal sRange As String) As 月の図形 Dim セル位置Left As Single, セル位置Top As Single, セル高さ As Single Dim 戻値 As 月の図形 On Error Resume Next ActiveSheet.Shapes("月背面").Delete ActiveSheet.Shapes("月前面").Delete ActiveSheet.Shapes("月半月").Delete On Error GoTo 0 On Error GoTo gfunc月描写初期化エラー With ActiveSheet.Range(sRange) セル位置Left = .Left セル位置Top = .Top セル高さ = .Height End With ' オートシェイプのTypeのmsoShapeMoon(三日月)が半月にならない為、msoShapeChordで半月を描画する ' 定数の「c半月に含む日数」は、この範囲に入ると三日月を半月にする為のものである With 戻値 Set .月の背面 = ActiveSheet.Shapes.AddShape(Type:=msoShapeOval, Left:=セル位置Left, Top:=セル位置Top, Width:=セル高さ, Height:=セル高さ) .月の背面.Visible = msoFalse ' 一旦、非表示にする .月の背面.Name = "月背面" ' 図形を消す為に名前を設定しておく .月の背面.Line.Visible = msoFalse ' 枠を無にする Set .月の前面 = ActiveSheet.Shapes.AddShape(Type:=msoShapeMoon, Left:=セル位置Left, Top:=セル位置Top, Width:=セル高さ, Height:=セル高さ) .月の前面.Visible = msoFalse .月の前面.Name = "月前面" .月の前面.Line.Visible = msoFalse Set .月の半月 = ActiveSheet.Shapes.AddShape(Type:=msoShapeChord, Left:=セル位置Left, Top:=セル位置Top, Width:=セル高さ, Height:=セル高さ) .月の半月.Visible = msoFalse .月の半月.Name = "月半月" .月の半月.Line.Visible = msoFalse .月の半月.Fill.ForeColor.SchemeColor = 5 ' 半月の色を5(黄色)にする .月の半月.Adjustments.Item(1) = 90 ' 90に調整して図形を半月にする .左上X座標 = セル位置Left .左上Y座標 = セル位置Top .月の直径 = セル高さ End With gfunc月描写初期化 = 戻値 Exit Function gfunc月描写初期化エラー: Debug.Print "gfunc月描写初期化エラー"; Err End Function Public Sub gsub月描写領域解放(ByRef 月object As 月の図形) With 月object Set .月の背面 = Nothing Set .月の前面 = Nothing Set .月の半月 = Nothing End With End Sub
Public Sub gsub月描写(ByVal d月齢 As Double, ByRef type月 As 月の図形) Dim 三日月色 As Long Dim 回転軸傾角deg As Single ' 謝辞 下記のWebページのおかげで、月描写が出来た。 ' http://acompass.net/top0/?EXCEL/Shape の「5.オブジェクトのプロパティー構成の調べ方」 ' http://members2.jcom.home.ne.jp/mp2-mera/rabi/blog17.htm の「IncrementRotationの使い方」 On Error GoTo gsub月描写エラー With type月 If d月齢 < c朔望月 / 2 Then ' 0~7.5日を-5.1~0, 7.5~15日を0~5.1に変換 回転軸傾角deg = c月と地球の公転軌道面の角度 * (d月齢 - c朔望月 / 4) / (c朔望月 / 4) Else ' 15~22.5日を5.1~0, 22.5~29.5日を0~-5.1に変換 回転軸傾角deg = c月と地球の公転軌道面の角度 * (c朔望月 / 4 - (d月齢 - c朔望月 / 2)) / (c朔望月 / 4) End If Select Case d月齢 Case Is < c朔望月 / 4 - c半月に含む日数 ' = 新月 - 0日~約7.5日未満 Call sub前面三日月描画(d月齢, type月, 三日月色:=5, 三日月傾角deg:=180# - 回転軸傾角deg) ' 5:黄色 Case c朔望月 / 4 + c半月に含む日数 To c朔望月 / 2 ' - 約7.5日~約15日未満 Call sub前面三日月描画(d月齢, type月, 三日月色:=0, 三日月傾角deg:=-回転軸傾角deg) ' 0:黒 Case c朔望月 / 2 To c朔望月 * 3 / 4 - c半月に含む日数 ' - 約 15日~約22日未満 Call sub前面三日月描画(d月齢, type月, 三日月色:=0, 三日月傾角deg:=180# - 回転軸傾角deg) ' 0:黒 Case Is > c朔望月 * 3 / 4 + c半月に含む日数 ' - 約 22日~約29日未満 Call sub前面三日月描画(d月齢, type月, 三日月色:=5, 三日月傾角deg:=-回転軸傾角deg) ' 5:黄色 Case c朔望月 / 4 - c半月に含む日数 To c朔望月 / 4 + c半月に含む日数, c朔望月 * 3 / 4 - c半月に含む日数 To c朔望月 * 3 / 4 + c半月に含む日数 ' 上弦(半月)- 約7.5日前後 , 下弦(半月)- 約22日前後 ' オートシェィプの三日月は、半月にならない為、半月のみを作成 .月の背面.Fill.ForeColor.SchemeColor = 0 ' 0:黒 If d月齢 < c朔望月 / 2 Then If Not .月の半月.HorizontalFlip Then .月の半月.Flip msoFlipHorizontal ' 輝面が反転していなければ、輝面を反転 End If .月の半月.ZOrder msoBringToFront ' 最前面に移動する。 .月の背面.Visible = msoTrue .月の前面.Visible = msoFalse .月の半月.Visible = msoTrue End Select End With Exit Sub gsub月描写エラー: Debug.Print "gsub月描写エラー"; Err End Sub Private Sub sub前面三日月描画(ByVal d月齢 As Double, ByRef type月 As 月の図形, ByVal 三日月色 As Long, ByVal 三日月傾角deg As Single) Dim 回転軸傾角deg As Single, cosθ As Single, 前面三日月幅 As Single On Error GoTo sub前面三日月描画エラー type月.月の半月.Visible = msoFalse ' 半月を非表示にする ' 0~ 7.5日を 0~1, 7.5~15 日を1~0 に変換 ' 15~22.5日を 0~1, 22.5~29.5日を1~0 に変換 cosθ = Cos(d月齢 / c朔望月 * 2 * π) ' 輝面率 = ( 1 + cosθ) / 2 の cosθがオートシェィプ三日月の幅 cosθ = cosθ / 0.85 ' 三日月の幅は、0.85程度までしか変形(半月化)できない Select Case d月齢 Case c朔望月 / 4 To c朔望月 * 3 / 4 前面三日月幅 = 1# + cosθ Case Else 前面三日月幅 = 1# - cosθ End Select With type月.月の背面 If 三日月色 = 0 Then .Fill.ForeColor.SchemeColor = 5 ' 黄色 Else .Fill.ForeColor.SchemeColor = 0 ' 黒 End If .Visible = msoTrue ' 月の背面を表示する End With With type月.月の前面 ' 月の前面を描写 .Fill.ForeColor.SchemeColor = 三日月色 .Rotation = 0 ' 回転させる前に三日月の形状を初期状態に戻す .Left = type月.左上X座標 .Top = type月.左上Y座標 .Width = type月.月の直径 .Height = type月.月の直径 .Rotation = 三日月傾角deg ' 回転させる .Flip msoFlipHorizontal(鏡像)を使用すると位置がずれる .Width = type月.月の直径 / 2 ' 回転させた後に三日月の幅を1/2にする .Adjustments.Item(1) = 前面三日月幅 ' 黄色の菱形ポイントで、三日月幅を 0~1に変形 .ZOrder msoBringToFront ' 最前面に移動する。 .Visible = msoTrue ' 月の前面を表示する End With Debug.Print d月齢, 三日月傾角deg, 前面三日月幅 Exit Sub sub前面三日月描画エラー: Debug.Print "sub前面三日月描画エラー"; Err End Sub
月の輝いている黄色部分を満月の写真にしたコーディングの実例を紹介します。
背景に写真を使うことによって、実際の動画(APOD: November 8, 1999 - Lunation)に近い状態が表現できます。
満月の写真は、満月の写真:フリー写真素材集のmoon02.JPGから頂きました。ありがとうございました。
月の満ち欠け | 説明 | ||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
![]() |
VBA月齢背景写真.xls(91KB)をダウンロードして、実行すれば、左図の様になります。
気の短い方や検索エンジンの為にコーディング内容を以下に示します。
|
前項4とは、標準モジュールだけが異なりますので、標準モジュールの内容だけを下記に示します。
標準モジュールの内容
Option Explicit
'定数
Public Const π As Double = 3.14159265358979 ' π = Atn(1) * 4 ' π = 3.14159265358979323846
Public Const cDEG→RAD変換係数 As Double = π / 180 ' = 2 * π / 360
Public Const cRAD→DEG変換係数 As Double = 180 / π ' = 360 / 2 * π
Public Const c朔望月 As Double = 29.530589 ' 月の満ち欠けの周期
Public Const c半月に含む日数 As Double = 0.4 ' 半月にする範囲
Public Const c月と地球の公転軌道面の角度 As Single = 25.1333 ' 実際は、5.1333 = 5度8分(地球の公転軌道面とは、黄道面のこと)
' 26を超える数値を入れ図形を大きくするとボロがでる。
Type 月の図形
月の画像 As Object
月の楕円 As Object
月の前面 As Object
月の半月 As Object
左上X座標 As Single
左上Y座標 As Single
月の直径 As Single
End Type
Public Function gfunc月描写初期化(ByVal sRange As String) As 月の図形 Dim セル位置Left As Single, セル位置Top As Single, セル高さ As Single Dim 戻値 As 月の図形 On Error Resume Next ActiveSheet.Shapes("月画像").Delete ActiveSheet.Shapes("月楕円").Delete ActiveSheet.Shapes("月前面").Delete ActiveSheet.Shapes("月半月").Delete On Error GoTo 0 On Error GoTo gsub月描写初期化エラー With ActiveSheet.Range(sRange) セル位置Left = .Left セル位置Top = .Top セル高さ = .Height End With ' オートシェイプのTypeのmsoShapeMoon(三日月)が半月にならない為、msoShapeChordで半月を描画する ' 定数の「c半月に含む日数」は、この範囲に入ると三日月を半月にする為のものである With 戻値 Set .月の画像 = ActiveSheet.Shapes.AddShape(Type:=msoShapeOval, Left:=セル位置Left, Top:=セル位置Top, Width:=セル高さ, Height:=セル高さ) .月の画像.Name = "月画像" ' 図形を消す為に名前を設定しておく .月の画像.Line.Visible = msoFalse ' 枠を無にする ' 満月の写真は、満月の写真:フリー写真素材集(http://free-photo-material.com/n002/)のmoon02.JPGから頂いた。 .月の画像.Fill.UserPicture ActiveWorkbook.Path & "\moon02.JPG" ' 月の画像を表示する .月の画像.Visible = msoFalse ' 一旦、非表示にする Set .月の楕円 = ActiveSheet.Shapes.AddShape(Type:=msoShapeOval, Left:=セル位置Left, Top:=セル位置Top, Width:=セル高さ, Height:=セル高さ) .月の楕円.Visible = msoFalse .月の楕円.Name = "月楕円" .月の楕円.Fill.ForeColor.SchemeColor = 0 ' 楕円の色を0(黒)にする .月の楕円.Line.Visible = msoFalse Set .月の前面 = ActiveSheet.Shapes.AddShape(Type:=msoShapeMoon, Left:=セル位置Left, Top:=セル位置Top, Width:=セル高さ, Height:=セル高さ) .月の前面.Visible = msoFalse .月の前面.Name = "月前面" .月の前面.Fill.ForeColor.SchemeColor = 0 ' 三日月の色を0(黒)にする .月の前面.Line.Visible = msoFalse Set .月の半月 = ActiveSheet.Shapes.AddShape(Type:=msoShapeChord, Left:=セル位置Left, Top:=セル位置Top, Width:=セル高さ, Height:=セル高さ) .月の半月.Visible = msoFalse .月の半月.Name = "月半月" .月の半月.Line.Visible = msoFalse .月の半月.Fill.ForeColor.SchemeColor = 0 ' 半月の色を0(黒)にする .月の半月.Adjustments.Item(1) = 90 ' 90に調整して図形を半月にする .左上X座標 = セル位置Left .左上Y座標 = セル位置Top .月の直径 = セル高さ End With gfunc月描写初期化 = 戻値 Exit Function gsub月描写初期化エラー: Debug.Print "gsub月描写初期化エラー"; Err End Function Public Sub gsub月描写領域解放(ByRef 月object As 月の図形) With 月object Set .月の画像 = Nothing Set .月の楕円 = Nothing Set .月の前面 = Nothing Set .月の半月 = Nothing End With End Sub
Public Sub gsub月描写(ByVal d月齢 As Double, ByRef type月 As 月の図形) Dim 三日月色 As Long Dim 回転軸傾角deg As Single ' 謝辞 下記のWebページのおかげで、月描写が出来た。 ' http://acompass.net/top0/?EXCEL/Shape の「5.オブジェクトのプロパティー構成の調べ方」 ' http://members2.jcom.home.ne.jp/mp2-mera/rabi/blog17.htm の「IncrementRotationの使い方」 On Error GoTo gsub月描写エラー With type月 If d月齢 < c朔望月 / 2 Then ' 0~7.5日を-5.1~0, 7.5~15日を0~5.1に変換 回転軸傾角deg = c月と地球の公転軌道面の角度 * (d月齢 - c朔望月 / 4) / (c朔望月 / 4) Else ' 15~22.5日を5.1~0, 22.5~29.5日を0~-5.1に変換 回転軸傾角deg = c月と地球の公転軌道面の角度 * (c朔望月 / 4 - (d月齢 - c朔望月 / 2)) / (c朔望月 / 4) End If Select Case d月齢 Case Is < c朔望月 / 4 - c半月に含む日数 ' = 新月 - 0日~約7.5日未満 Call sub前面楕円描画(d月齢, type月, 傾角deg:=180# - 回転軸傾角deg) .月の半月.Rotation = -回転軸傾角deg .月の半月.Visible = msoTrue Case c朔望月 / 4 + c半月に含む日数 To c朔望月 / 2 ' - 約7.5日~約15日未満 .月の半月.Visible = msoFalse ' 半月を非表示にする Call sub前面三日月描画(d月齢, type月, 傾角deg:=-回転軸傾角deg) ' 0:黒 Case c朔望月 / 2 To c朔望月 * 3 / 4 - c半月に含む日数 ' - 約 15日~約22日未満 .月の半月.Visible = msoFalse ' 半月を非表示にする Call sub前面三日月描画(d月齢, type月, 傾角deg:=180# - 回転軸傾角deg) ' 0:黒 Case Is > c朔望月 * 3 / 4 + c半月に含む日数 ' - 約 22日~約29日未満 Call sub前面楕円描画(d月齢, type月, 傾角deg:=-回転軸傾角deg) ' 0:黄色 If Not .月の半月.HorizontalFlip Then .月の半月.Flip msoFlipHorizontal ' 輝面が反転していなければ、輝面を反転 .月の半月.Rotation = -回転軸傾角deg .月の半月.Visible = msoTrue Case c朔望月 / 4 - c半月に含む日数 To c朔望月 / 4 + c半月に含む日数, c朔望月 * 3 / 4 - c半月に含む日数 To c朔望月 * 3 / 4 + c半月に含む日数 ' 上弦(半月)- 約7.5日前後 , 下弦(半月)- 約22日前後 ' オートシェィプの三日月は、半月にならない為、半月のみを作成 If d月齢 > c朔望月 / 2 Then If Not .月の半月.HorizontalFlip Then .月の半月.Flip msoFlipHorizontal ' 輝面が反転していなければ、輝面を反転 End If .月の半月.ZOrder msoBringToFront ' 最前面に移動する。 .月の楕円.Visible = msoFalse .月の前面.Visible = msoFalse .月の半月.Visible = msoTrue End Select .月の画像.Visible = msoTrue ' 表示する End With Exit Sub gsub月描写エラー: Debug.Print "gsub月描写エラー"; Err End Sub Private Sub sub前面三日月描画(ByVal d月齢 As Double, ByRef type月 As 月の図形, ByVal 傾角deg As Single) Dim 回転軸傾角deg As Single, cosθ As Single, 前面三日月幅 As Single On Error GoTo sub前面三日月描画エラー type月.月の半月.Visible = msoFalse ' 半月を非表示にする ' 0~ 7.5日を 0~1, 7.5~15 日を1~0 に変換 ' 15~22.5日を 0~1, 22.5~29.5日を1~0 に変換 cosθ = Cos(d月齢 / c朔望月 * 2 * π) ' 輝面率 = ( 1 + cosθ) / 2 の cosθがオートシェィプ三日月の幅 cosθ = cosθ / 0.85 ' 三日月の幅は、0.85程度までしか変形(半月化)できない 前面三日月幅 = 1# + cosθ type月.月の楕円.Visible = msoFalse ' 月の楕円を非表示にする With type月.月の前面 ' 月の前面(三日月)を描写 .Rotation = 0 ' 回転させる前に三日月の形状を初期状態に戻す .Left = type月.左上X座標 .Top = type月.左上Y座標 .Width = type月.月の直径 .Height = type月.月の直径 .Rotation = 傾角deg ' 回転させる .Flip msoFlipHorizontal(鏡像)を使用すると位置がずれる .Width = type月.月の直径 / 2 ' 回転させた後に三日月の幅を1/2にする .Adjustments.Item(1) = 前面三日月幅 ' 黄色の菱形アンカーポイントで、三日月幅を 0~1に変形 .ZOrder msoBringToFront ' 最前面に移動する。 .Visible = msoTrue ' 月の前面を表示する End With Debug.Print d月齢, 傾角deg, 前面三日月幅 Exit Sub sub前面三日月描画エラー: Debug.Print "sub前面三日月描画エラー"; Err End Sub Private Sub sub前面楕円描画(ByVal d月齢 As Double, ByRef type月 As 月の図形, ByVal 傾角deg As Single) Dim 回転軸傾角deg As Single, cosθ As Single, 前面楕円幅 As Single On Error GoTo sub前面楕円描画エラー ' 0~ 7.5日を 0~1, 7.5~15 日を1~0 に変換 ' 15~22.5日を 0~1, 22.5~29.5日を1~0 に変換 cosθ = Cos(d月齢 / c朔望月 * 2 * π) ' 輝面率 = ( 1 + cosθ) / 2 の cosθがオートシェィプ楕円の幅 前面楕円幅 = cosθ * type月.月の直径 With type月.月の楕円 ' 月の楕円を描写 .Visible = msoTrue ' 月の楕円を表示する .Rotation = 0 ' 回転させる前に楕円の形状を初期状態に戻す .Left = type月.左上X座標 + type月.月の直径 / 2 - 前面楕円幅 / 2 ' 楕円を中央に寄せる .Top = type月.左上Y座標 .Width = type月.月の直径 .Height = type月.月の直径 .Width = 前面楕円幅 ' 回転させた後に楕円の幅を1/2にする .Rotation = 傾角deg ' 回転させる .Flip msoFlipHorizontal(鏡像)を使用すると位置がずれる .ZOrder msoBringToFront ' 最前面に移動する。 .Visible = msoTrue ' 月の楕円を表示する End With Debug.Print d月齢, 傾角deg, 前面楕円幅 Exit Sub sub前面楕円描画エラー: Debug.Print "sub前面楕円描画エラー"; Err End Sub
下記のWebページを参考にして、月描写が出来ました。有用なページ、有難うございました。
© 2014-2015 太刀魚 Released under the MIT license