Excel VBA質問箱 IV

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

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


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

【27416】ピボットテーブルとのリンクについて hisao 05/8/8(月) 19:04 質問[未読]
【27427】Re:ピボットテーブルとのリンクについて りん 05/8/9(火) 8:00 発言[未読]
【27429】Re:ピボットテーブルとのリンクについて hisao 05/8/9(火) 9:22 質問[未読]
【27430】Re:ピボットテーブルとのリンクについて りん 05/8/9(火) 9:55 発言[未読]
【27441】Re:ピボットテーブルとのリンクについて hisao 05/8/9(火) 14:10 お礼[未読]

【27416】ピボットテーブルとのリンクについて
質問  hisao E-MAIL  - 05/8/8(月) 19:04 -

引用なし
パスワード
   お世話になります。
ピボットテーブルのA列と1行目に名前を付けて、
そのINDEXから或るテーブルAに数値を入れていきます。
今まで 何も支障なかったのですが
突然 ピボットテーブルを更新出来なくなりました。
つまり ファイルを開いて1回目は実行出来るのですが
同じマクロをもう1度実行すると
ピボットテーブルのあるシートをクリアーする所でエラーが出ます。
そこで手入力でピボットテーブルをクリアーすると例の”ご迷惑おかけします”の表示が出て終了してしまいます。
又 関連づけられた テーブルAの任意のセルをクリアーしようとすると、
今度はフリーズしてしまいます。
テーブルAは40列*200行程度のテーブルで殆どのセルにピボットテーブルとの間にINDEXとMATCH関数が入っています。
業務に使っていたのが急にダメになったので困っています。
動きからしてメモリーの問題のようですが、どの様に対処すれば宜しいでしょうか?お教え下さい。

【27427】Re:ピボットテーブルとのリンクについて
発言  りん E-MAIL  - 05/8/9(火) 8:00 -

引用なし
パスワード
   hisao さん、おはようございます。

>突然 ピボットテーブルを更新出来なくなりました。
>つまり ファイルを開いて1回目は実行出来るのですが
>同じマクロをもう1度実行すると
>ピボットテーブルのあるシートをクリアーする所でエラーが出ます。
 データを入力→保存→いったん閉じて開きなおす→ピボット更新

 という流れでは作業できるという事でしょうか?

【27429】Re:ピボットテーブルとのリンクについて
質問  hisao E-MAIL  - 05/8/9(火) 9:22 -

引用なし
パスワード
   ▼りん さん:
早速有り難う御座います。
そう言う事です。
ピボット更新が1回だけ出来ます。閉じて開き直して1回は出来ます。
もう1回更新しようとするとエラー→保存出来ない状態になります。
これはピボットのあるシートのcells.clearが出来ないばかりでなく
このピボットからのindexで作っているテーブルの或るセルをクリアーしても新しい数字を入力してもエラー終了します(問題のマクロ実行後だと)
ところばこのセルは=month(menu!K9)と入っているだけなのです。
そこでmenuシートのrange("k9")を手入力でクリアーしてみますと
やはりマクロ実行後ではエラー終了しました。
そこでmenu!K9を事前にクリアー、マクロのこのシートとの関係も削除して
マクロを実行したのですが、それでも2回目実行時は ピボットのcells.clearの所でエラー終了します。
長くなって恐縮ですが問題のマクロは次のような物を連続実行します。
上のような事情でs_支払残高設定()を削除しても 2回目実行の際に
s_支払集計2()のcells.clearで
エラーしてフリーズになります。手動でこのピボットをクリアーしようとしてもフリーズします。どうかお助け下さい。

Sub s_支払残高設定()
Sheets("支払残高").Range("e1").Formula = "=month(menu!k9)"
Sheets("支払残高").Select
Range("h1:Al1").Select
  Selection.FormulaR1C1 = "=IF(RC[-3]=12,1,RC[-3]+1)"
End Sub

Sub s_仕入集計2()
Dim l As Integer
Sheets("仕入台帳").Select
  l = Range("A65536").End(xlUp).Row
Range("A2:X" & l).Select
Selection.Name = "仕入台帳"
Sheets("仕入集計").Activate
  Sheets("仕入集計").Cells.Clear
  ActiveSheet.PivotTableWizard SourceType:=xlDatabase, SourceData:="仕入台帳", _
    TableDestination:="R1C1", TableName:="ピボットテーブル1"
  ActiveSheet.PivotTables("ピボットテーブル1").AddFields RowFields:="コード", _
    ColumnFields:="支払月"
  With ActiveSheet.PivotTables("ピボットテーブル1").PivotFields("税込金額")
    .Orientation = xlDataField
    .Name = "合計 : 税込金額"
    .Function = xlSum
   On Error Resume Next
   With ActiveSheet.PivotTables("ピボットテーブル1").PivotFields("コード")
    .PivotItems("1000").Visible = False
 End With
  
  End With
ActiveSheet.PivotTables("ピボットテーブル1").PivotSelect "", xlDataAndLabel
Selection.Name = "買2"
Selection.Rows("2:2").Select
Selection.Name = "買行2"
ActiveSheet.PivotTables("ピボットテーブル1").PivotSelect "", xlDataAndLabel
Selection.Columns("a:a").Select
Selection.Name = "買列2"

End Sub
Sub s_支払集計2()
Dim myrow As Integer
Sheets("支払台帳").Select
  myrow = Range("A65536").End(xlUp).Row
Range("A2:G" & myrow).Select
Selection.Name = "支払台帳"
Sheets("支払集計").Activate
Sheets("支払集計").Cells.Clear
  ActiveSheet.PivotTableWizard SourceType:=xlDatabase, SourceData:="支払台帳", _
    TableDestination:="R1C1", TableName:="ピボットテーブル2"
  ActiveSheet.PivotTables("ピボットテーブル2").AddFields RowFields:="コード", _
    ColumnFields:="月"
  With ActiveSheet.PivotTables("ピボットテーブル2").PivotFields("支払額")
    .Orientation = xlDataField
    .Name = "合計 : 支払額"
    .Function = xlSum
  End With
ActiveSheet.PivotTables("ピボットテーブル2").PivotSelect "", xlDataAndLabel
Selection.Name = "支払2"
Selection.Rows("2:2").Select
Selection.Name = "支払行2"
ActiveSheet.PivotTables("ピボットテーブル2").PivotSelect "", xlDataAndLabel
Selection.Columns("a:a").Select
Selection.Name = "支払列2"
End Sub

Sub s_syuukei()
Dim r As Integer
Sheets("支払残高").Select
r = Range("A20000").End(xlUp).Row
If r > 2 Then
Range("e3:an" & r).ClearContents
Range( _
    "e3:e" & r & ",h3:h" & r & ",k3:k" & r & ",n3:n" & r & ",q3:q" & r & ",t3:t" & r & ",w3:w" & r & ",z3:z" & r & ",ac3:ac" & r & ",af3:af" & r & ",ai3:ai" & r & ",al3:al" & r).Select
Selection.FormulaR1C1 = _
    "=IF(ISERROR(INDEX(買2,MATCH(RC1,買列2,0),MATCH(R1C,買行2,0))),0,INDEX(買2,MATCH(RC1,買列2,0),MATCH(R1C,買行2,0)))"
Range( _
    "f3:f" & r & ",i3:i" & r & ",l3:l" & r & ",o3:o" & r & ",r3:r" & r & ",u3:u" & r & ",x3:x" & r & ",aa3:aa" & r & ",ad3:ad" & r & ",ag3:ag" & r & ",aj3:aj" & r & ",am3:am" & r).Select
Selection.FormulaR1C1 = _
    "=IF(ISERROR(INDEX(支払2,MATCH(RC1,支払列2,0),MATCH(R1C[-1],支払行2,0))),0,INDEX(支払2,MATCH(RC1,支払列2,0),MATCH(R1C[-1],支払行2,0)))"
Range( _
    "g3:g" & r & ",j3:j" & r & ",m3:m" & r & ",p3:p" & r & ",s3:s" & r & ",v3:v" & r & ",y3:y" & r & ",ab3:ab" & r & ",ae3:ae" & r & ",ah3:ah" & r & ",ak3:ak" & r & ",an3:an" & r).Select
Selection.FormulaR1C1 = "=if(iserror(RC[-3]+RC[-2]-RC[-1]),"""",RC[-3]+RC[-2]-RC[-1])"
Else
MsgBox "集計データがありません"
End If
End Sub


>hisao さん、おはようございます。
>
>>突然 ピボットテーブルを更新出来なくなりました。
>>つまり ファイルを開いて1回目は実行出来るのですが
>>同じマクロをもう1度実行すると
>>ピボットテーブルのあるシートをクリアーする所でエラーが出ます。
> データを入力→保存→いったん閉じて開きなおす→ピボット更新

>
> という流れでは作業できるという事でしょうか?

【27430】Re:ピボットテーブルとのリンクについて
発言  りん E-MAIL  - 05/8/9(火) 9:55 -

引用なし
パスワード
   hisao さん、おはようございます。

>  ActiveSheet.PivotTableWizard SourceType:=xlDatabase, SourceData:="仕入台帳", _
>    TableDestination:="R1C1", TableName:="ピボットテーブル1"

>  ActiveSheet.PivotTableWizard SourceType:=xlDatabase, SourceData:="支払台帳", _
>    TableDestination:="R1C1", TableName:="ピボットテーブル2"

>Selection.FormulaR1C1 = _
>    "=IF(ISERROR(INDEX(買2,MATCH(RC1,買列2,0),MATCH(R1C,買行2,0))),0,INDEX(買2,MATCH(RC1,買列2,0),MATCH(R1C,買行2,0)))"

マクロで、ピボットテーブルのデータの更新ではなくを再作成およびセルに数式を挿入しているようなので、

 ピボットテーブルの範囲(買2等)を参照している数式(の範囲)を消去
 念のため 名前(Namesコレクションオブジェクト) を削除
 ピボットテーブルを削除

その後でピボットを更新してみてはいかがでしょうか?

【27441】Re:ピボットテーブルとのリンクについて
お礼  hisao E-MAIL  - 05/8/9(火) 14:10 -

引用なし
パスワード
   ▼りん さん:
有り難う御座いました。
早速試してみます。

>hisao さん、おはようございます。
>
>>  ActiveSheet.PivotTableWizard SourceType:=xlDatabase, SourceData:="仕入台帳", _
>>    TableDestination:="R1C1", TableName:="ピボットテーブル1"
>
>>  ActiveSheet.PivotTableWizard SourceType:=xlDatabase, SourceData:="支払台帳", _
>>    TableDestination:="R1C1", TableName:="ピボットテーブル2"
>
>>Selection.FormulaR1C1 = _
>>    "=IF(ISERROR(INDEX(買2,MATCH(RC1,買列2,0),MATCH(R1C,買行2,0))),0,INDEX(買2,MATCH(RC1,買列2,0),MATCH(R1C,買行2,0)))"
>
>マクロで、ピボットテーブルのデータの更新ではなくを再作成およびセルに数式を挿入しているようなので、
>
> ピボットテーブルの範囲(買2等)を参照している数式(の範囲)を消去
> 念のため 名前(Namesコレクションオブジェクト) を削除
> ピボットテーブルを削除
>
>その後でピボットを更新してみてはいかがでしょうか?

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