|    | 
     ▼目指せマクロの達人 さん: 
 
>subを走らせたところ早速エラーが出ました。「実行時エラー"91": オブジェクト変数またはWithブロック変数が設定されていません」です。 
rabbitさん、 お忙しいようなので、ぼくに分かることでヒントだけ 
 
>    With ActiveChart.SeriesCollection(1).Points(k + 1).DataLabel 
 
のところで 「Withブロック変数が設定されていません」とのエラーになる 
理由は簡単で、「ActiveChart」がないから、グラフが選択されていないから 
です。 
グラフが選択されていれば「ActiveChart」が存在するので、そこでエラーに 
なることがありません。 
しかし、グラフを選択した状態でプログラムを実行すると、今度は直前の 
 
>    theta = Cells(k + 2, 4).Value  
 
の部分でエラーになると思います。 
これはなぜかというと、グラフを選択した状態で「アクティブ」なのは 
グラフのほうで、ワークシートではありません。 
> Cells(k + 2, 4).Value 
はセルの前にSheet が省略されていますので、いま「アクティブな」シート 
が補われます。グラフを選択しているとき「アクティブなのは埋め込みグラ 
フ」なので、そこのところは なんと 
 
    theta = ActiveChart.Cells(k + 2, 4).Value 
 
と解釈されます!  グラフに セルというものは存在しませんから、こんどは 
こちらでえらーが発生するという塩梅です(-_-) 
応急処置として、 
始めに 埋め込みグラフを選択しておいて、 
  ActiveSheet.ChartObjects(1).Select 
セルの前にシートを指定するようにコードを補えば、 
    theta = ActiveSheet.Cells(k + 2, 4).Value 
その部分は動くでしょうけど、本来的ではないですね。 
本来、対象グラフを ActiveSheet.ChartObjects(1) のように指定し、 
セル範囲を記述するときはシートを指定するのを怠らなければ、 
グラフを毎回選択する必要はないのです。 
 
それと、DataLabel ははじめての時は HasDataLabelプロパティ 
が Falseになっているので、いきなり ラベルテキストをセットしようと 
すると そこでもエラーが発生すると思います。 
 
私なら、グラフの系列1 のために変数を用意してそれを利用します。 
  Dim k As Long 
  Dim theta As Double 
  Dim Ser As Series  '系列1 用変数 
     
  Set Ser = ActiveSheet.ChartObjects(1).Chart.SeriesCollection(1) 
  Ser.HasDataLabels = True 
  For k = 1 To Ser.Points.Count '36 
    theta = ActiveSheet.Cells(k + 1, 4).Value 
    With Ser.Points(k).DataLabel 
      Select Case theta 
        Case Is <= 90 
          .Text = "→" 
          .Orientation = theta 
        Case Is <= 270 
          .Text = "←" 
          .Orientation = theta - 180 
        Case Else 
          .Text = "→" 
          .Orientation = theta - 360 
      End Select 
    End With 
  Next 
 | 
     
    
   |