Excel VBA質問箱 IV

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

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


9156 / 13644 ツリー ←次へ | 前へ→

【28719】ChartTypeプロパティについて ビール腹子 05/9/13(火) 15:37 質問[未読]
【28720】Re:ChartTypeプロパティについて MOON 05/9/13(火) 16:01 回答[未読]
【28721】Re:ChartTypeプロパティについて ビール腹子 05/9/13(火) 16:19 発言[未読]
【28724】Re:ChartTypeプロパティについて だるま 05/9/13(火) 16:54 発言[未読]
【28728】Re:ChartTypeプロパティについて ビール腹子 05/9/13(火) 17:51 質問[未読]
【28732】Re:ChartTypeプロパティについて りん 05/9/13(火) 18:38 回答[未読]
【28742】Re:ChartTypeプロパティについて ビール腹子 05/9/13(火) 21:52 質問[未読]
【28743】Re:ChartTypeプロパティについて りん 05/9/13(火) 21:55 発言[未読]
【28747】Re:ChartTypeプロパティについて ビール腹子 05/9/13(火) 22:21 お礼[未読]
【28748】Re:ChartTypeプロパティについて りん 05/9/13(火) 22:23 発言[未読]
【28767】Re:ChartTypeプロパティについて ビール腹子 05/9/14(水) 10:43 お礼[未読]
【28769】Re:ChartTypeプロパティについて ビール腹子 05/9/14(水) 11:35 質問[未読]
【28786】Re:ChartTypeプロパティについて りん 05/9/14(水) 18:29 発言[未読]
【28812】Re:ChartTypeプロパティについて ビール腹子 05/9/15(木) 10:35 質問[未読]
【28851】Re:ChartTypeプロパティについて りん 05/9/16(金) 10:29 発言[未読]
【28855】Re:ChartTypeプロパティについて だるま 05/9/16(金) 14:24 回答[未読]
【29042】Re:ChartTypeプロパティについて ビール腹子 05/9/22(木) 10:11 お礼[未読]

【28719】ChartTypeプロパティについて
質問  ビール腹子  - 05/9/13(火) 15:37 -

引用なし
パスワード
   いつもたくさん勉強させていただいてます。
さっそくですが、皆さんの知恵を貸してください。

今等高線のグラフを作っているのですが、
Chart.Add
activechart.select
ActiveChart.ChartType = xlSurface
と普通にマクロの記録から読んで記述したにもかかわらず、
エクセル上に作ったコマンドボタンを押して作動させると。。。
【アプリケーション定義またはオブジェクト定義のエラーです】と出てしまいます。
記録の時には写らない、何か特別なことを記述しなければ
VBAでは動かないのでしょうか??

レスのほうを何卒よろしくお願いします。

【28720】Re:ChartTypeプロパティについて
回答  MOON  - 05/9/13(火) 16:01 -

引用なし
パスワード
   ▼ビール腹子 さん:
とりあえず、

>Chart.Add

の部分を

Charts.Add

にしてみたらどうでしょうか?

【28721】Re:ChartTypeプロパティについて
発言  ビール腹子  - 05/9/13(火) 16:19 -

引用なし
パスワード
   さっそくありがとうございます。
>
>Charts.Add
>
>にしてみたらどうでしょうか?

すいません。
記入するときに書き忘れました。
とりあえず、私の記述のほうではちゃんと「s」はついてます。

【28724】Re:ChartTypeプロパティについて
発言  だるま WEB  - 05/9/13(火) 16:54 -

引用なし
パスワード
   エラーになるプロシージャ全体と、どの行でエラーになるのかを提示されては。^d^

【28728】Re:ChartTypeプロパティについて
質問  ビール腹子  - 05/9/13(火) 17:51 -

引用なし
パスワード
   ご返答ありがとうございます。

>エラーになるプロシージャ全体と、どの行でエラーになるのかを提示されては。^d^
ではお言葉に甘えて、プロシージャ全体を提示してみます。

Private Sub commandbutton1_click()
Dim Row_No As Integer
Dim Col_No As Integer
Dim RowPos As Integer
Dim i As Integer
Dim m As Integer
Dim chtobj As ChartObject

Row_No = 339
Col_No = 2
Application.ScreenUpdating = False

Do  '      'グラフを作るためのloop--------1.

Do      '編集を探すためのloop--------2.
If Cells(Row_No, 1).Value <> "編集" Then
  Row_No = Row_No + 1
End If
If Cells(Row_No, 1).Value = "YЁd(・`∀・)b S!!" Then
  Application.StatusBar = Cells(RowPos - 4, 1).Value
  Application.ScreenUpdating = True
  With Application
    .StatusBar = "処理が終わりました"
    .StatusBar = False
  End With
  Exit Sub
End If
Loop Until Cells(Row_No, 1).Value = "編集" '--------2.

RowPos = Row_No + 1
Row_No = RowPos + 1
i = 1
Do       '行(Row_No)の空白セルを見に行くloop--------3.
  If Cells(Row_No, 2) <> "" Then
    Row_No = Row_No + 1
    i = i + 1
  End If
Loop Until Cells(Row_No, Col_No) = "" '--------3.

Row_No = Row_No - 1
i = i - 1
Col_No = 2
m = 1
Do       '列(Col_No)の空白セルを見に行くloop--------4.
If Cells(RowPos, Col_No) <> "" Then
  Col_No = Col_No + 1
  m = m + 1
Else
  Exit Do
End If
Loop Until Cells(Row_No, Col_No) = "" '--------4.
If m = 1 Then
  m = m
Else
  m = m - 1
End If
Col_No = Col_No - 1

  Cells(RowPos, 20).Select
  ActiveCell.FormulaR1C1 = ""
  ActiveCell.FormulaR1C1 = "=INT(RC[-19])"
  Selection.AutoFill Destination:=Range(Cells(RowPos, 20), Cells(RowPos + i, 20))
  
  Range(Cells(RowPos, 20), Cells(RowPos + i, 20)).Select
  Selection.AutoFill Destination:=Range(Cells(RowPos, 20), Cells(RowPos + i, 20 + m))
  Cells(RowPos, 20).ClearContents
  'Range(Cells(RowPos, 20), Cells(RowPos + i, 20 + m)).Select
  
If i = 2 Then 'Charts.Add
  Set chtobj = ActiveSheet.ChartObjects.Add(Cells(RowPos, 7).Left, Cells(RowPos, 7).Top, 200, 100)
  chtobj.Select
  With ActiveChart
    .ChartType = xlXYScatterSmooth
    .SetSourceData Source:=Sheets("Sheet1").Range(Cells(RowPos, 20), Cells(RowPos + i, 20 + m))
    .Location Where:=xlLocationAsObject, Name:="Sheet1"
    .HasTitle = True
    .ChartTitle.Text = Cells(RowPos - 4, 1).Value
    .HasLegend = False
  End With
  
ElseIf i >= 3 Then
  Set chtobj = ActiveSheet.ChartObjects.Add(Cells(RowPos, 7).Left, Cells(RowPos, 7).Top, 200, 100)
  chtobj.Select
  With ActiveChart
    .ChartType = xlSurface ’----ここでエラーが出ますミ(ノ;_ _)ノ =3
    .SetSourceData Source:=Sheets("Sheet1").Range(Cells(RowPos, 20), Cells(RowPos + i, 20 + m))
    .Location Where:=xlLocationAsObject, Name:="Sheet1"
    .HasTitle = True
    .ChartTitle.Text = Cells(RowPos - 4, 1).Value
    .HasLegend = False
  End With

End If
      
Loop     '--------1.

End Sub

【28732】Re:ChartTypeプロパティについて
回答  りん E-MAIL  - 05/9/13(火) 18:38 -

引用なし
パスワード
   ビール腹子 さん、こんばんわ。
>  With ActiveChart
    .SetSourceData Source:=Sheets("Sheet1").Range(Cells(RowPos, 20), Cells(RowPos + i, 20 + m))
    .ChartType = xlSurface ’----ここでエラーが出ますミ(ノ;_ _)ノ =3
>    .Location Where:=xlLocationAsObject, Name:="Sheet1"
>    .HasTitle = True
>    .ChartTitle.Text = Cells(RowPos - 4, 1).Value
>    .HasLegend = False
>  End With
等高線のグラフは作成元のデータを指定しないと、普通に手動で作成してもエラーになります(2つ以上のデータ系列が必要)。
↓動作確認様に必要な部分だけ取り出してあります。
Private Sub commandbutton1_click()
  Dim chtobj As ChartObject
  Dim Sht1 As Worksheet
  Set Sht1 = ActiveSheet ' = Sheet1?
  '適当に数値を入れました
  RowPos = 10: m = 3: i = 3
  With Sht1
   Set chtobj = .ChartObjects.Add(.Cells(RowPos, 7).Left, .Cells(RowPos, 7).Top, 200, 100)
  End With
  With chtobj.Chart
    .SetSourceData Source:=Sht1.Range(Sht1.Cells(RowPos, 20), Sht1.Cells(RowPos + i, 20 + m))
    .ChartType = xlSurface '----ここでエラーが出ますミ(ノ;_ _)ノ =3
    .HasTitle = True
    .ChartTitle.Text = Sht1.Cells(RowPos - 4, 1).Value
    .HasLegend = False
  End With
  Set Sht1 = Nothing
End Sub

 順番変えたら動きました。
 あと、ActiveSheetを使用(Rangeとかの前を省略するのもActiveSheet)していますが、Sheet1がActiveSheetでない可能性がないとはいえないので、エラー回避のためにSetして参照するようにしてあります。

【28742】Re:ChartTypeプロパティについて
質問  ビール腹子  - 05/9/13(火) 21:52 -

引用なし
パスワード
   りん さん、こんばんわ。そして、わかりやすい解説ありがとうございました!!
りんさんの言うとおり、記述を書いたら、すんなり動きました〜ヽ(*´喜`*)ノ☆
あとですね、もう1つ問題が出てきたんです。
今commandbutton1_clickイベントで動作するようにしてるのですが、
コマンドボタンをやめて、マクロの実行から『グラフ作成』とでも題してここから実行させたいのですが、
.ChartTitle.Text = Sht1.Cells(RowPos - 4, 1).Value
のところで【cellメソッドは失敗しました。global】とエラーが出ます。
調べたところ、chartをactiveにしているときにセルを参照することに怒られているとのことなのですが・・・。
セルを参照せずにここのタイトルを取る方法とはあるのでしょうか?

おやすみどころ、申し訳ありませんがよろしくお願いします。

【28743】Re:ChartTypeプロパティについて
発言  りん E-MAIL  - 05/9/13(火) 21:55 -

引用なし
パスワード
   ビール腹子 さん、こんばんわ。

>今commandbutton1_clickイベントで動作するようにしてるのですが、
>コマンドボタンをやめて、マクロの実行から『グラフ作成』とでも題してここから実行させたいのですが、
>.ChartTitle.Text = Sht1.Cells(RowPos - 4, 1).Value
>のところで【cellメソッドは失敗しました。global】とエラーが出ます。
>調べたところ、chartをactiveにしているときにセルを参照することに怒られているとのことなのですが・・・。
>セルを参照せずにここのタイトルを取る方法とはあるのでしょうか?

 ChartObjectをせっかくオブジェクト変数にSetしてあるのに、Activeにする必要は無いと思いますよ。前回の例を参考にしてみてください。
 それでも駄目なら、sht1、RowPosの内容を確認してみましょう。

【28747】Re:ChartTypeプロパティについて
お礼  ビール腹子  - 05/9/13(火) 22:21 -

引用なし
パスワード
   りんさん。夜分のレスありがとうございました。

無事動くようになりました!!
とっても助かりました。
またよろしくお願いいたします。

おやすみなさい(人-ω-)。o.゜。*・★

【28748】Re:ChartTypeプロパティについて
発言  りん E-MAIL  - 05/9/13(火) 22:23 -

引用なし
パスワード
   ビール腹子 さん、こんばんわ。

>.ChartTitle.Text = Sht1.Cells(RowPos - 4, 1).Value
>のところで【cellメソッドは失敗しました。global】とエラーが出ます。
>調べたところ、chartをactiveにしているときにセルを参照することに怒られているとのことなのですが・・・。
>セルを参照せずにここのタイトルを取る方法とはあるのでしょうか?

Private Sub commandbutton1_click()
  グラフ作成
End Sub

Sub グラフ作成()
  Dim Row_No As Integer
  Dim Col_No As Integer
  Dim RowPos As Integer
  Dim i As Integer
  Dim m As Integer
  Dim chtobj As ChartObject
  '
  Row_No = 339
  Col_No = 2
  Application.ScreenUpdating = False
  '
  Do '      'グラフを作るためのloop--------1.
 
   Do      '編集を探すためのloop--------2.
     If Cells(Row_No, 1).Value <> "編集" Then Row_No = Row_No + 1
     If Cells(Row_No, 1).Value = "YЁd(・`∀・)b S!!" Then
      Application.StatusBar = Cells(RowPos - 4, 1).Value
      Application.ScreenUpdating = True
      '一瞬で表示が変わるので見えないと思うけど
      With Application
        .StatusBar = "処理が終わりました"
        .StatusBar = False
      End With
      Exit Sub
     End If
   Loop Until Cells(Row_No, 1).Value = "編集" '--------2.
   '
   RowPos = Row_No + 1
   Row_No = RowPos + 1
   i = 1
   Do       '行(Row_No)の空白セルを見に行くloop--------3.
     If Cells(Row_No, 2) <> "" Then
       Row_No = Row_No + 1
       i = i + 1
     End If
   Loop Until Cells(Row_No, Col_No) = "" '--------3.
   
   Row_No = Row_No - 1
   i = i - 1
   Col_No = 2
   m = 1
   Do       '列(Col_No)の空白セルを見に行くloop--------4.
     If Cells(RowPos, Col_No) <> "" Then
       Col_No = Col_No + 1
       m = m + 1
     Else
       Exit Do
     End If
   Loop Until Cells(Row_No, Col_No) = "" '--------4.
   If m = 1 Then
     m = m
   Else
     m = m - 1
   End If
   Col_No = Col_No - 1
   '
   With Cells(RowPos, 20)
     .FormulaR1C1 = "=INT(RC[-19])"
     .AutoFill Destination:=Range(.Offset(0, 0), .Offset(i, 0))
     Range(.Offset(0, 0), .Offset(i, 0)).AutoFill _
         Destination:=Range(.Offset(0, 0), .Offset(i, m))
     .ClearContents
   End With
   '
   If i > 1 Then
     Set chtobj = ActiveSheet.ChartObjects.Add(Cells(RowPos, 7).Left, Cells(RowPos, 7).Top, 200, 100)
     With chtobj.Chart
      .SetSourceData Source:=Range(Cells(RowPos, 20), Cells(RowPos + i, 20 + m))
      Select Case i
        Case 2:  .ChartType = xlXYScatterSmooth
        Case Else: .ChartType = xlSurface '3以上
      End Select
      .HasTitle = True
      .ChartTitle.Text = Cells(RowPos - 4, 1).Value
      .HasLegend = False
     End With
   End If
  Loop     '--------1.
End Sub

実働部分をみなおしました。うまく動くといいですが。
ボタンからも、直接実行も可能です。

【28767】Re:ChartTypeプロパティについて
お礼  ビール腹子  - 05/9/14(水) 10:43 -

引用なし
パスワード
   りんさん、おはようございます。
プログラムを書き換えてみたところ、全体がスッキリもしたし、
すんなり動くようになりました!!

また思い悩んだときは投稿してみます。
ありがとうございました〜≦(._.)≧

【28769】Re:ChartTypeプロパティについて
質問  ビール腹子  - 05/9/14(水) 11:35 -

引用なし
パスワード
   また厚い壁にぶち当たってしまいました。

グラフは問題なく作れるようになりました!!
みなさんのおかげです!!
でも、5000行まで見に行ってグラフを作っているのですが、
Set chtobj = ActiveSheet.ChartObjects.Add(Cells(RowPos, Col_No + 2).Left, Cells(RowPos, Col_No).Top, 350, 150)
と場所を指定をしているにも関わらず、上のほうはちゃんと基にしている表の横にできるのですが、下のほうに行くに連れてどんどんグラフの場所が表とずれて出てきます。
これって、しょうがないことなのでしょうか??

どなたか、教えていただけませんか?

【28786】Re:ChartTypeプロパティについて
発言  りん E-MAIL  - 05/9/14(水) 18:29 -

引用なし
パスワード
   ビール腹子 さん、こんばんわ。

>Set chtobj = ActiveSheet.ChartObjects.Add(Cells(RowPos, Col_No + 2).Left, Cells(RowPos, Col_No).Top, 350, 150)
>と場所を指定をしているにも関わらず、上のほうはちゃんと基にしている表の横にできるのですが、下のほうに行くに連れてどんどんグラフの場所が表とずれて出てきます。
>これって、しょうがないことなのでしょうか??
>
>どなたか、教えていただけませんか?

グラフを追加する前にセルに移動してみてください。
<<略>>
    Application.Goto Cells(RowPos, 7),True
>     Set chtobj = ActiveSheet.ChartObjects.Add(Cells(RowPos, 7).Left, Cells(RowPos, 7).Top, 200, 100)
>     With chtobj.Chart
>      .SetSourceData Source:=Range(Cells(RowPos, 20), Cells(RowPos + i, 20 + m))
<<略>>

【28812】Re:ChartTypeプロパティについて
質問  ビール腹子  - 05/9/15(木) 10:35 -

引用なし
パスワード
   りんさん、ご返答ありがとうございます。
りんさんの記述を引用してみましたが、できる場所は変わらずでした(;_q)

【28851】Re:ChartTypeプロパティについて
発言  りん E-MAIL  - 05/9/16(金) 10:29 -

引用なし
パスワード
   ▼ビール腹子 さん:
>りんさん、ご返答ありがとうございます。
>りんさんの記述を引用してみましたが、できる場所は変わらずでした(;_q)

位置がずれるという意味がよくわからないので、とりあえずログをとってみましょう。
新しいブックにこれを記述して、グラフ作成後のシートを表示してから実行してみてください。
Sub test()
  Dim co As ChartObject
  Dim ws(1 To 2) As Worksheet
  Set ws(1) = ActiveWorkbook.ActiveSheet 'グラフのあるシート
  Set ws(2) = Workbooks.Add.Worksheets(1) 'ログ表示用
  '
  For Each co In ws(1).ChartObjects
   RR& = RR& + 1
   With co
     ws(2).Cells(RR&, 1).Value = .Name
     ws(2).Cells(RR&, 2).Value = .Left
     With .TopLeftCell
      ws(2).Cells(RR&, 3).Value = .Address(False, False)
      ws(2).Cells(RR&, 4).Value = .Left
     End With
     ws(2).Cells(RR&, 5).FormulaR1C1 = "=RC[-3]-RC[-1]"
   End With
  Next
  '
  ws(2).Parent.Saved = True
  If RR& = 0 Then
   MsgBox "シート上に埋め込みグラフ無し", vbExclamation
   ws(2).Parent.Close
  End If
  Erase ws
End Sub

【28855】Re:ChartTypeプロパティについて
回答  だるま WEB  - 05/9/16(金) 14:24 -

引用なし
パスワード
   >と場所を指定をしているにも関わらず、上のほうはちゃんと基にしている表の横にでき
>るのですが、下のほうに行くに連れてどんどんグラフの場所が表とずれて出てきます。

私のところでは、画面のズームが75%の状態ではズレが発生しました。
もしズームを変えているのなら、一旦100%にしてからグラフを作成し後で元のズームに
戻されてはいかがですか。^d^

【29042】Re:ChartTypeプロパティについて
お礼  ビール腹子  - 05/9/22(木) 10:11 -

引用なし
パスワード
   りんさん、だるまさん、ご返答ありがとうございました。
返事が遅くなり申し訳ありません。

いろいろ参考にして、できるようになりましたことをご報告いたします。
ありがとうございました。

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