A列~O列にデータがあって、G列に名前、O列に点数が入力されています。列数は変化しませんが、行数が変化します。
 可変する行数で、名前別の平均値をマクロで出すにはどうすればよいですか?
 ネット検索の結果、以下のマクロで合計は出るのですが、平均値が出せません。
 CreatePivotTable(TableDestination:=Range("A3"))のA3の意味も教えていただけないでしょうか。
 よろしくお願いします。

 Sub Macro1()

Dim pvt As PivotTable
Dim rngData As Range

Set rngData = ActiveSheet.Range("A1").CurrentRegion
Sheets.Add
Set pvt = _
ActiveWorkbook.PivotCaches.Add( _
SourceType:=xlDatabase, _
SourceData:=rngData). _
CreatePivotTable(TableDestination:=Range("A3"))
With pvt
.PivotFields("名前").Orientation = xlRowField
.PivotFields("点数").Orientation = xlDataField

End With

 

このQ&Aに関連する最新のQ&A

A 回答 (3件)

>(2)で進めたいので、(2)のみで結構です。

御教示お願いします。

おっとゴメンナサイね。思いつきでチョコちょこっと書き足したところが誤記だったようです。

誤:
pvt.pivotfields(1).function = xlaverage

訂正:
pvt.datafields(1).function = xlaverage

失礼しました。
    • good
    • 0
この回答へのお礼

ありがとうございました。
バッチリ作動しました。
本当にありがとうございました。

お礼日時:2014/12/19 21:46

こちらとしてもすっきり解決さっさと終わりたいところですが、ご質問は?



>試行錯誤で最初の記述になりました。
>これでよいものかどうか?

いま動いてるのでしたら、それでいいですけど? 何がどのように上手く動かないのですか?
補足のご質問でいま何が聞きたいのかも、いま現在の最新の状況も、いずれも不明瞭で、もうしわけありませんが「回答」できません。

この回答への補足

御迷惑をお掛けします。

(1)
.......
With pvt
.PivotFields("名前").Orientation = xlRowField
.PivotFields("点数").Orientation = xlDataField
pvt.PivotFields("合計 / 点数").Function = xlAverage
pvt.PivotFields("合計 / 点数").Caption = "平均点数"
End With

の場合、
   
    実行時エラー1004
     PivotTableクラスのPivotFieldsプロパティを取得できません。

    エラー部→ pvt.PivotFields("合計 / 点数").Caption = "平均点数"


(2)
.......
With pvt
.PivotFields("名前").Orientation = xlRowField
.PivotFields("点数").Orientation = xlDataField
pvt.pivotfields(1).function = xlaverage

End With 
End Sub

の場合、
    実行時エラー1004
    PivotFieldsクラスのFunctionプロパティを設定できません。

    エラー部→ pvt.PivotFields(1).Function = xlAverage

となります。
(2)で進めたいので、(2)のみで結構です。御教示お願いします。

補足日時:2014/12/18 21:43
    • good
    • 0

>With pvt


>.PivotFields("名前").Orientation = xlRowField
>.PivotFields("点数").Orientation = xlDataField
>End With


この部分で、作成したピボットテーブルレポートの具体的な中身を操作しています。
ご相談のマクロでわざわざ消して掲示された範囲で他に何か違う事をしているかもしれないので、回答のマクロそのままでは動かない可能性があることに留意してください。



ケース1:
ふつーピボットテーブルレポートで、点数をデータに配置すると「"合計 / 点数"」という名前が自動的に付きます。
これを(マクロで・手動で)「変更していない」場合は

pvt.pivotfields("合計 / 点数").function = xlaverage
pvt.pivotfields("合計 / 点数").caption = "平均点数"

のように設定すればOKです。



ケース2:
作成したピボットテーブルレポートのデータ領域に「点数」だけしか配置していない場合
pvt.pivotfields(1).function = xlaverage
のように指定する事もできます。





>A3の意味も教えて

これは割と見た目通りです。マクロでは新しいシートを挿入し、そこに目的のピボットテーブルレポートを作成しています
そのレポートをA3から配置するという意味です。


#補足
実際のピボットテーブルの作成では、レポートフィルタ(ページフィールド)がA1から配置されますが、レポート本体はA3に配置される扱いになります。
そこを無視して無理にA1から配置する事も可能は可能ですが、あまり行いません。

この回答への補足

御回答感謝致します。

 ・・・・・・・
With pvt
.PivotFields("名前").Orientation = xlRowField
.PivotFields("点数").Orientation = xlDataField
pvt.PivotFields("合計 / 点数").Function = xlAverage

End With
End Sub

で作動しましたが、教えていただいた以下で、
・・・・・・・
With pvt
.PivotFields("名前").Orientation = xlRowField
.PivotFields("点数").Orientation = xlDataField
pvt.pivotfields("合計 / 点数").function = xlaverage
pvt.pivotfields("合計 / 点数").caption = "平均点数"
End With
End Sub

しばらく作動していたのですが、別のパソコンでは作動しなくなり、試行錯誤で最初の記述になりました。
これでよいものかどうか?
個人的には、ケース2で作動させたいのですが、上手く行きません。(以下です)

 ・・・・・・・
With pvt
.PivotFields("名前").Orientation = xlRowField
.PivotFields("点数").Orientation = xlDataField
pvt.pivotfields(1).function = xlaverage

End With 
End Sub

御教示頂けると幸いです。

補足日時:2014/12/18 19:18
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QEXCEL2007 VBAでピボットのフィルタ指定

EXCEL 2007 VBAでピボットテーブルを生成しようとしております。

レポートフィルタで初期表示するデータフィールド「メーカー」の値も
指定できればと思っております。

「メーカー」には今回データで「A」「B」「C」「D」「E」とあったとして
「メーカー」 ... 「A」と「C」だけで表示指定したいとして、
下記操作で記録マクロを取ってみました。

1. レポートフィルタ「メーカー」を追加
2. フィルタ条件で「(すべて)」のチェック外して、全て消す。
3. 「メーカー」 ... 「A」と「C」を指定

結果は希望通りなのですが、
記録マクロを確認すると下記のように「A」と「C」で指定できておりません。

これだとメーカー「F」のデータが追加された際、
希望通りでないと思うのですが、良い方法をどなたかご存じないでしょうか?

ActiveSheet.PivotTables("数量予測").PivotFields("メーカー").CurrentPage = "(All)"
With ActiveSheet.PivotTables("数量予測").PivotFields("メーカー")
.PivotItems("B").Visible = False
.PivotItems("D").Visible = False
.PivotItems("E").Visible = False
End With

EXCEL 2007 VBAでピボットテーブルを生成しようとしております。

レポートフィルタで初期表示するデータフィールド「メーカー」の値も
指定できればと思っております。

「メーカー」には今回データで「A」「B」「C」「D」「E」とあったとして
「メーカー」 ... 「A」と「C」だけで表示指定したいとして、
下記操作で記録マクロを取ってみました。

1. レポートフィルタ「メーカー」を追加
2. フィルタ条件で「(すべて)」のチェック外して、全て消す。
3. 「メーカー」 ... 「A」と「C」を指定

結果は希望通...続きを読む

Aベストアンサー

Ver2007でClearAllFiltersメソッドが追加されました。
繰り返して使う場合も想定して、ClearAllFiltersで一旦全表示にします。
その後、表示したいアイテムを指定して、それ以外(Case Else)は非表示、
という処理で良いかと思います。

Sub try()
  Dim pf As PivotField
  Dim p As PivotItem

  Set pf = ActiveSheet.PivotTables("数量予測").PivotFields("メーカー")
  pf.Orientation = xlPageField
  pf.ClearAllFilters
  For Each p In pf.PivotItems
    Select Case p.Value
    Case "A", "C" '表示アイテム名をカンマ区切りで指定
    Case Else
      p.Visible = False
    End Select
  Next
End Sub

Ver2007以降でないと動作しません。
2003でも使う可能性があるなら以下のようにPageFieldを再配置。
但し、再配置前に更新する必要があります。

Sub try_2()
  Dim pf As PivotField
  Dim p As PivotItem

  Set pf = ActiveSheet.PivotTables("数量予測").PivotFields("メーカー")
  pf.Orientation = xlHidden
  pf.Parent.PivotCache.Refresh
  pf.Orientation = xlPageField
  For Each p In pf.PivotItems
    Select Case p.Value
    Case "A", "C" '表示アイテム名をカンマ区切りで指定
    Case Else
      p.Visible = False
    End Select
  Next
End Sub

Ver2007でClearAllFiltersメソッドが追加されました。
繰り返して使う場合も想定して、ClearAllFiltersで一旦全表示にします。
その後、表示したいアイテムを指定して、それ以外(Case Else)は非表示、
という処理で良いかと思います。

Sub try()
  Dim pf As PivotField
  Dim p As PivotItem

  Set pf = ActiveSheet.PivotTables("数量予測").PivotFields("メーカー")
  pf.Orientation = xlPageField
  pf.ClearAllFilters
  For Each p In pf.PivotItems
    Select Case p.Value
   ...続きを読む

QEXCEL VBAマクロ作成で、他のEXCELからデータを取り込みたい

メインプログラム(EXCEL VBA)より、
他のフォルダーにあるEXCELの項目の内容を取り込みたいです。
たとえば他のフォルダーのEXCELのRange("A2:A3").ValueをメインプログラムのRange("C2:C3").Valueにセットしたい時です。

・コマンドボタン押したら、どこのEXCELから取り込むかのポップアップ(?)は、表示はできてます。
・作業者が選んだパスとブックもMsgBoxで表示できてるので、もらう相手の場所も取得できてます。

・となると次はOPEN,INPUTですか?
テキストデータの取り込みですと、Inputでそのバッファを定義してるのですが、なんか違うような。。。

よろしくお願いします!

Aベストアンサー

私がやる方法です。

Dim writeSheet As Worksheet ' 自分自身の書き出し先シート
Set writeSheet = ThisWorkbook.Worksheets(1) ' Sheet1 を参照

Dim readBook As Workbook ' 相手ブック
Set readBook = Workbooks.Open(filename) ' 相手ブックを開いて参照
Dim readSheet As WorkSheet ' 相手シート
Set readSheet = readBook.Worksheets("sheetName") ' 相手シートを参照
' または Set readSheet = readBook.Worksheets(sheetIndex)

' 例えば
writeSheet.Cells(1, 1).Value = readSheet.Cells(2, 2).Value ' 相手シートの B2 の値を自分自身の A1 に書き込む

readBook.Close False ' 相手ブックを閉じる
Set readSheet = Nothing
Set readBook = Nothing

私がやる方法です。

Dim writeSheet As Worksheet ' 自分自身の書き出し先シート
Set writeSheet = ThisWorkbook.Worksheets(1) ' Sheet1 を参照

Dim readBook As Workbook ' 相手ブック
Set readBook = Workbooks.Open(filename) ' 相手ブックを開いて参照
Dim readSheet As WorkSheet ' 相手シート
Set readSheet = readBook.Worksheets("sheetName") ' 相手シートを参照
' または Set readSheet = readBook.Worksheets(sheetIndex)

' 例えば
writeSheet.Cells(1, 1).Value = readSheet.Ce...続きを読む

Qマクロでピボットテーブルを作成するには?

現在、仕事の関係でエクセルを多用しており、
仕事を楽にするためマクロを勉強しています。

インターネットを駆使して、下記のコードを作ってみたのですが、
【】の範囲で「参照が正しくありません」とエラーが出てしまいます。
どこがおかしいかご教授いただけますでしょうか?

自動記録でベースを作った後、範囲の指定を
VBA上で行ったつもりです。
データの集計は「A」シートのA~G列まで、行は不定なので、
「A」シートの一番下までのデータを集計するようにしたいです。
縦に「要素」、内容に「金額」を集計するよう、
ピボットを記録しています。

Sub ピボットを行う()
'
Range("A1").Select
Range(Selection, Selection.End(xlDown)).Select
Range(Selection, Selection.End(xlToRight)).Select

【 ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:= _
"A!Selection.Address").CreatePivotTable TableDestination:="", TableName:= _
"ピボットテーブル1"】
ActiveSheet.PivotTableWizard TableDestination:=ActiveSheet.Cells(3, 1)
ActiveSheet.Cells(3, 1).Select
ActiveSheet.PivotTables("ピボットテーブル1").SmallGrid = False
ActiveSheet.PivotTables("ピボットテーブル1").AddFields RowFields:="要素"
With ActiveSheet.PivotTables("ピボットテーブル1").PivotFields("金額")
.Orientation = xlDataField
.Caption = "合計 : 金額"
.Function = xlSum
End With
End Sub

よろしくお願いいたします。

現在、仕事の関係でエクセルを多用しており、
仕事を楽にするためマクロを勉強しています。

インターネットを駆使して、下記のコードを作ってみたのですが、
【】の範囲で「参照が正しくありません」とエラーが出てしまいます。
どこがおかしいかご教授いただけますでしょうか?

自動記録でベースを作った後、範囲の指定を
VBA上で行ったつもりです。
データの集計は「A」シートのA~G列まで、行は不定なので、
「A」シートの一番下までのデータを集計するようにしたいです。
縦に「要素」、内容に「...続きを読む

Aベストアンサー

こんにちは。
>(SourceType:=xlDatabase, SourceData:="A!Selection.Address")
ここを
(SourceType:=xlDatabase, SourceData:= Selection.Address(external:=True))
と変更すればできます。

ついでに、SelectやActivateは選択状況に依存し、不安定です。
ActiveWorkbookは仕方ないのかもしれませんが

Sub sample()
  Dim r As Range

  With ActiveWorkbook
    With .Sheets("A")
      Set r = .Range("G1", .Range("A1").End(xlDown))
    End With
    With .PivotCaches.Add(SourceType:=xlDatabase, SourceData:=r.Address(external:=True))
      With .CreatePivotTable(TableDestination:="")
        .AddFields RowFields:="要素"
        With .PivotFields("金額")
          .Orientation = xlDataField
          .Caption = "合計 : 金額"
          .Function = xlSum
        End With
      End With
    End With
  End With
  Set r = Nothing
End Sub

などとしたほうが良いかも^ ^
QNo.2097393も参考にしてみてください。

こんにちは。
>(SourceType:=xlDatabase, SourceData:="A!Selection.Address")
ここを
(SourceType:=xlDatabase, SourceData:= Selection.Address(external:=True))
と変更すればできます。

ついでに、SelectやActivateは選択状況に依存し、不安定です。
ActiveWorkbookは仕方ないのかもしれませんが

Sub sample()
  Dim r As Range

  With ActiveWorkbook
    With .Sheets("A")
      Set r = .Range("G1", .Range("A1").End(xlDown))
    End With
    With .PivotCa...続きを読む

QExel VBA 別ブックから該当データを検索し、必要なデータを取得する方法について

部品表というブックがあります
A列に商品名、B列に商品番号が入力してあります。C列のコードは未入力です。
A列     B列     C列      
商品名  商品番号  コード
モータ  U-1325-L  
ホルダ  R-134256

また、コード一覧表という別のブックには、A列に商品番号と、B列にコードが、何千件も入力されています。

やりたいことは
部品表のC列のコード欄に、コード一覧表ブックから商品番号と一致するコードを貼り付けしたいのです。

部品表は、何百種類もありますので、関数ではなく、マクロで処理を希望します。

自分では、部品表の商品番号をコピーして、コード一覧表で検索し、検索結果の右隣のセル(B列のコード)の値を部品表のC列に貼り付ければよいかと思い、書いてみたんですが…

Sub 別ブックから貼り付ける()
  Dim 検索する As Long
Windows("部品表.xls").Activate
検索する = cells(i,2).Value
Windows("コード一覧表.xls").Activate
ActiveWindow.SmallScroll Down:=-3
Selection.AutoFilter Field:=3, Criteria1:="=検索する", Operator:= xlAnd

と、してみたものの、検索しても、その検索結果の隣のセルのコードをどうやって取得すればいいのかが、わかりませんでした。

基本事項は本で学びましたが、呪文のようなコードはよく理解できません。懸命にネットで検索して、訳して理解する努力をしてはいますが。

どうぞよろしくお願いします。

部品表というブックがあります
A列に商品名、B列に商品番号が入力してあります。C列のコードは未入力です。
A列     B列     C列      
商品名  商品番号  コード
モータ  U-1325-L  
ホルダ  R-134256

また、コード一覧表という別のブックには、A列に商品番号と、B列にコードが、何千件も入力されています。

やりたいことは
部品表のC列のコード欄に、コード一覧表ブックから商品番号と一致するコードを貼り付けしたいのです。

部品表は、何百種類もありますので、関数...続きを読む

Aベストアンサー

こんにちは。
とりあえず実用性も踏まえました。
メインの動作はワークシート関数のVLOOKUPをVBA上で使用していますので理解はしやすいかと思います。
また、質問文から察するに「部品表.xls」と「コード一覧表.xls」の両方を開いて処理されていますが「コード一覧表.xls」はプログラム内で開いて閉じているので実行するときは「コード一覧表.xls」は閉じて置いてください。
Option Explicit
Sub Sample()
 Application.ScreenUpdating = False
 Dim I As Long
 Dim xlBook
 Set xlBook = Workbooks.Open("C:\★★\コード一覧表.xls") '★要変更★
 I = 2
 Do While Range("A" & I).Value <> ""
  ThisWorkbook.Worksheets("Sheet1").Range("C" & I).Value = Application.VLookup(ThisWorkbook.Worksheets("Sheet1").Range("B" & I).Value, xlBook.Worksheets("Sheet1").Range("A2:B65535"), 2, 0)
  I = I + 1
 Loop
 xlBook.Close
 Application.ScreenUpdating = True
 MsgBox ("完了")
End Sub

こんにちは。
とりあえず実用性も踏まえました。
メインの動作はワークシート関数のVLOOKUPをVBA上で使用していますので理解はしやすいかと思います。
また、質問文から察するに「部品表.xls」と「コード一覧表.xls」の両方を開いて処理されていますが「コード一覧表.xls」はプログラム内で開いて閉じているので実行するときは「コード一覧表.xls」は閉じて置いてください。
Option Explicit
Sub Sample()
 Application.ScreenUpdating = False
 Dim I As Long
 Dim xlBook
 Set xlBook = Workbooks....続きを読む

QEXCEL VBA で現在開いているブックのファイル名を取得する方法

EXCEL2003 VBAで業務を簡素化するために、現在開いているブックのファイル名を取得する方法が分かりません。
作業手順をマクロを使って処理していますが、オリジナルのワークブックをファイル名を変えて保存し、以後、このワークブックを読み込んで使用しています。
このときのVBAは、オリジナルのファイル名を使っているため、ファイル名を変更するとエラーになり、以後の業務に使用できません。
常にファイル名を取得出来るVBAをどなたか、教えて下さい。

Aベストアンサー

>現在開いているブックのファイル名
 ちょっと曖昧な表現かなぁという気もいたしますが、VBAが書いてあるブックのブック名は
ThisWorkbook.Name
で、現在 "アクティブにして" 操作対象になっているブックの名前は
ActiveWorkbook.Name
ですね。

 しかし、
>VBAは、オリジナルのファイル名を使っているため、ファイル名を変更するとエラーになり
というような文脈からすると、
ThisWorkbook.Name
の方ですかね。

QExcel > ピボットテーブル「(空白)」非表示

Excel 2003 で、ピボットテーブルを利用した際、元データにて未入力のセルは、ピボットテーブルでは「(空白)」と表示されてしまいます。

これを、任意の文字列や、空白のまま表示(「(空白)」を非表示)にする方法はありますか?

空白セルそのものを非表示する方法は、ピボットタイトル行の▼で「(空白)」をチェックオフすれば消えますが、これでは関係する行の他列も非表示になってしまいます。

ただ「(空白)」ではく、空白のまま表示したいだけなのですが、その方法が分かりません。

宜しくお願い致します。

Aベストアンサー

ピボットテーブルの行や列フィールドの「アイテム」(個々の「あ」や「い」,「A」「B」「1・2・3」,「(空白)」も同じ)は,作成したピボットテーブルの中で「(アイテムの)キャッシュ」として保持されています。
実際今回の「(空白)」だけでなく,たとえば列Bフィールドのアイテム「1」1セルを「1個」と書き換えてみると,レポート上のアイテム1が全部1個と表記されます。
レポートで行列アイテムを直接書き換えることで,キャッシュの中で「元データの1 = アイテム表記は1個」というデータを保持し,以後それを使って表示してくれるためです。


#余談ですが,たとえば「四半期」で日付をグループ化すると,エクセルでは1月から3月が第1四半期として集計されます。
これを日本の四月からの会計年度に合わせて「1-3月」は第4四半期に,そして「4-6月」を第1四半期として集計させたいような場合にも,この方法を利用することができます。

QExcel、マクロで、ピボットテーブルでの範囲のコーディングの仕方について

マクロで、ピボットテーブルでの範囲のコーディングの仕方について、どなたかどうぞ教えてください。

列はM列までで固定です。
行が毎回異なります。
どのようにしたら、毎回異なる範囲を、「SourceData:=」に反映させることが出来ますか?
マクロ初心者ですが、なんとか作業効率をUPさせたいと思っています。
どうぞよろしくお願い致します。

尚、今のマクロは絶対参照になっています。
自動作成されたVBAは以下の通りです。

ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:= _
"A1:M5372").CreatePivotTable TableDestination:="", TableName:= _
"ピボットテーブル2", DefaultVersion:=xlPivotTableVersion10
ActiveSheet.PivotTableWizard TableDestination:=ActiveSheet.Cells(3, 1)
ActiveSheet.Cells(3, 1).Select

マクロで、ピボットテーブルでの範囲のコーディングの仕方について、どなたかどうぞ教えてください。

列はM列までで固定です。
行が毎回異なります。
どのようにしたら、毎回異なる範囲を、「SourceData:=」に反映させることが出来ますか?
マクロ初心者ですが、なんとか作業効率をUPさせたいと思っています。
どうぞよろしくお願い致します。

尚、今のマクロは絶対参照になっています。
自動作成されたVBAは以下の通りです。

ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, Source...続きを読む

Aベストアンサー

こんにちは。

Dim rng As Range 'データ範囲用Range型変数を準備
'A列を基準にする場合は↓。場合によっては Set rng = Range("a1").CurrentRegion でも可。
Set rng = Range("A1", Range("A65536").End(xlUp).Offset(, 12))
With ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:=rng.Address(external:=True))
With .CreatePivotTable(TableDestination:="")
.AddFields RowFields:=rng.Cells(1).Value, ColumnFields:=rng.Cells(2).Value
.PivotFields(rng.Cells(3).Value).Orientation = xlDataField
End With
End With
Set rng = Nothing

な感じで、まずデータ範囲を変数にセットすれば良いです。
上記はActivesheetが対象になりますが、必要に応じてSheetから指定してあげる事もできます。
また、一般機能の[名前の定義]で可変範囲に名前をつける、という方法もあります。
=OFFSET($A$1,,,COUNTA($A:$A),13)

こんにちは。

Dim rng As Range 'データ範囲用Range型変数を準備
'A列を基準にする場合は↓。場合によっては Set rng = Range("a1").CurrentRegion でも可。
Set rng = Range("A1", Range("A65536").End(xlUp).Offset(, 12))
With ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:=rng.Address(external:=True))
With .CreatePivotTable(TableDestination:="")
.AddFields RowFields:=rng.Cells(1).Value, ColumnFields:=rng.Cells(2).Value
.PivotFields(rng.Ce...続きを読む

Qエクセル:マクロ「Application.CutCopyMode = False」って?

エクセルのマクロを記録していると

「Application.CutCopyMode = False」

というものがよく出てきますが、これは何でしょう?
どういう意味のものかわかりません。
削除しても差し支えないのもでしょうか?

Aベストアンサー

「Application.CutCopyMode = False」の前で
セルのコピー、または切り取りを行っていると思います。
これは、その操作(セルのコピー、または切り取り)を無効にしているだけです。
------------
Range("A1").Select
Selection.Copy ← これを無効にしている
Range("A2").Select
ActiveSheet.Paste
Application.CutCopyMode = False
------------
上記の場合であれば、「Application.CutCopyMode = False」を削除しても問題ありませんが、
以下の場合、貼り付け処理でエラーになります。
------------
Range("A1").Select
Selection.Copy
Range("A2").Select
Application.CutCopyMode = False
ActiveSheet.Paste ← ココでエラー
------------
ご自分で、セルをコピーしてみると分かると思いますが、コピーした範囲が点線で点滅されます。
「Application.CutCopyMode = False」をすると、
その点滅がなくなります。

「Application.CutCopyMode = False」の前で
セルのコピー、または切り取りを行っていると思います。
これは、その操作(セルのコピー、または切り取り)を無効にしているだけです。
------------
Range("A1").Select
Selection.Copy ← これを無効にしている
Range("A2").Select
ActiveSheet.Paste
Application.CutCopyMode = False
------------
上記の場合であれば、「Application.CutCopyMode = False」を削除しても問題ありませんが、
以下の場合、貼り付け処理でエラーになります。
------------
...続きを読む

Qピボットの集計方法「合計」初期設定、他

エクセルのピボットテーブルを作成するとき、

データアイテムの集計方法がいちいち「個数」になってしまうのですが、最初から「合計」に設定する方法はないでしょうか?

(2)また列フィールドの選択肢が沢山ある時、まとめて列フィールドに表示させる事はできないでしょうか?一つ一つリストから移動しないといけないでしょうか?

(3)さらに行フィールドに項目を選ぶと、全てに「集計」行が出来て、一つ一つ「表示しない」にしないと消せないのですが、最初からあるいはまとめて「集計」行を表示させない方法はないでしょうか?

よろしくお願い致します。

Aベストアンサー

[No.2へのお礼]へのコメント、

》 文字列が入ってないか検索方法がない限り…

あります。

式 =CELL("type",A1) が「l」(Label の「L」の小文字)を返せば、セル A1 で表示されているデータは文字列であることを示します。「v」(value の「v」)なら、数値です。「b」(blank の「b」)なら空白です。

QSub ***( ) と Private Sub ***( ) の違い

初歩的な質問で申し訳ありませんが・・・

自分でコードを書いていても、イベントが発生したりした時の処理で、コードのウィンドウで上のドロップダウンリストで選択できる時の処理などは自動的に[Private Sub Command1_Click( )]などと出てくるのでそのまま使っています。自分で別途プロシージャーを作成する時は[Sub ****( )]としています。
ですがその違いを理解しないまま、自分で作成する時は[Private Sub]ではなくて[Sub]を使っています。

Sub ***( ) と Private Sub ***( ) の違いは何なんでしょうか?
どなたか説明頂けませんか?
よろしくお願いします。

Aベストアンサー

「Sub」の部分にカーソルを置いて[F1]を押せばヘルプが起動します。
「指定項目」のところに「Public」と「Private」の説明がありますよ。
省略して「Sub hogehoge()」とした場合は「Public」とみなされます。

Publicは「すべてのモジュールから呼び出せるプロシージャ」ということになります。
Privateとすると「同じモジュールの中からしか呼び出せないプロシージャ」となります。

もしExcelをお持ちでしたらExcelのVBEで標準モジュールを追加し、「Sub Test1()」と「Private Sub Test2()」を作成してみてください。
そしてExcelの[ツール]-[マクロ]-[マクロ(Alt+F8)]でマクロ実行のダイアログを表示させてみるとわかります。
ここには実行できるプロシージャの一覧が表示されますが、Test1は表示されているけれどTest2は表示されません。
Test1はPublicで、Test2はPrivateだからです。


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング