• 締切済み

Excel Pivot 名前の定義の値をマクロで取得

こんにちは。いつも参考にさせていただいています。 マクロでPivotを自動更新する記述をしています。 データが入力されているシートに 名前の定義をして"データ"と名前をつけ、参照範囲を以下のとおり設定しました。 =OFFSET($A$1,0,0,COUNTA($A:$A),COUNTA($1:$1)) Pivotが表示されるシートのマクロに下記のように記述して、 自動的に更新ができることを確認できました。 Private Sub Worksheet_Activate() Range("A1").Select ActiveSheet.PivotTableWizard SourceType:=xlDatabase, SourceData:= _ "データ" End Sub マクロ自体は問題なく動くのですが、 目でも確認をとりたいため、MsgBoxを追加して、現在選択されているデータ範囲を表示させたいと考えています。 例) 「データ範囲は$A$1:$D$150に変更されました」 そこで、 MsgBox "データ範囲は" & データ & "に変更されました" という一文を上記に追加してみましたが、データの部分でセルの範囲を取得できませんでした。 "データ"としてもダメで、名前の定義で指定された範囲の値を取得する方法がわかりません。 マクロで可能な仕様なのかもわからないのですが、 どなたか解決法をご存知でしたら教えていただけないでしょうか。 よろしくお願いします。

みんなの回答

回答No.2

MsgBox "データ範囲は" & Sheets("Sheet1").Range("データ").Address & "に変更されました" Sheet1の部分は「データ」が含まれるシート名に変更して下さい。

  • hana-hana3
  • ベストアンサー率31% (4940/15541)
回答No.1

Range("データ").Address で、範囲が取得出来ます。

Karin2006Karin
質問者

お礼

hana-hana3さん、 早速ありがとうございます。 Range("データ").Addressを試してみましたが、どこにどのように記述すればよいのかいまいちわかりません。 MsgBox "データ範囲は" & Range("データ").Address & "に変更されました" としたところ、定義エラーになり、 Dim DataAddress As Range DataAddress = Range("データ").Address なども試してみましたがダメでした。 webで見つけた以下の名前の定義ではなくシート名を指定する方法ではできましたが、 上記でやるにはどうしたらいいのでしょうか。 MsgBox "データ範囲は" & Worksheets("シート名").UsedRange.Address & "に変更されました" すみませんがよろしくお願いします。

関連するQ&A

  • 名前定義で定義している値が、自動的に可変してしまう

    Excel の質問です。 名前の定義について、教えて下さい。 僕が仕様を理解していないのか、関数の記述が間違っているのでしょうか ■現象 シートクリック時に、定義している関数の値が可変してしまう ■データ ワークシート[Sheet1]上データ  |A     |B ------------------------------------ 1|りんご   | 2|みかん   | 3|バナナ   | 4|パイナップル| 5|もも    | A1 ~ A5 は、データを直接入力 ■名前の定義 (1).数式リボン> 名前の管理> 新規作成 (2).以下 名前: 最終行番号 範囲: Sheet1 参照範囲: =MAX(INDEX((Sheet1!A:A<>"")*ROW(Sheet1!A:A),0)) (3).D10 に、「=最終行番号」と入力 ■結果 ・入力直後、D10 は、5 となるが、どこかのセルをクリック後、名前の定義を見ると「A:A」になっていない。  ・異なる列範囲になっている  ・規則性不明 ■期待結果 ・上記の場合、どのセルをクリックしても、名前の定義で定義した範囲が「A:A」のままであって欲しい。 ■現象確認 Excel2010 ■その他 ・参照範囲で設定している記述が、参照ではないからでしょうか?(自己定義関数を、名前の定義で呼び出している感じで、間違った使い方をしているから?)

  • セル範囲に名前を定義する

    セル範囲に名前を定義して、計算式の中で使いたいのですが、 例えば、A列全体にAという名前、B列全体にBという名前を付けて、 =Counta(A)と記述すれば、A列にあるデータの個数が出てきます。 =Counta(B)と記述すれば、B列にあるデータの個数が出てきます。 一つの計算式にCounta関数が10個以上あって、AとBを書き換えるのが面倒なのですが、 特定のセルC1にAと入力したらCounta(A)、Bと入力したらCounta(B)になるようには出来ないでしょうか? =Count(C1)と入力してもダメでした。

  • Excel マクロ ピボットテーブル範囲選択

    マクロで、ピボットテーブルでの範囲のコーディングの仕方について、どなたかどうぞ教えてください。 列・行とも行が毎回異なります。 どのようにしたら、毎回異なる範囲を、「SourceData:=」に反映させることが出来ますか? マクロ初心者ですが、なんとか作業効率をUPさせたいと思っています。 どうぞよろしくお願い致します。 自動作成されたVBAは以下の通りです。 ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:= _ "Sheet1!R3C2:R1767C52").CreatePivotTable TableDestination:="", TableName:= _ "ピボットテーブル1" ActiveSheet.PivotTableWizard TableDestination:=ActiveSheet.Cells(3, 1) ActiveSheet.Cells(3, 1).Select ActiveSheet.PivotTables("ピボットテーブル1").SmallGrid = False

  • エクセルのマクロ

    こんにちは。 エクセルで各月の集計をピボットテーブルへ表示するマクロを作成しています。 実際にはマクロに関して”無”なのでエクセルのマニュアル本通りに作成中なのですが、マニュアル通りに入力しているにもかかわらず、エラーになってしまいます。 何がいけないのか全くわからずに困っています。 作成中のマクロを記載いたしますので、原因がわかるようでしたらどなたか教えてください…(/_;) Dim TUKI,CHANGE Range("A1").Select TUKI = ActiveCell.Value *1 Change = "'" & TUKI & "'!R8C2:R300C5" Range("A1").Select Selection.Copy Sheets("集計").Select Range("A1").Select ActiveSheet.Paste Application.CutCopyMode = False ActiveSheet.PivotTable("ピボットテーブル1").PivotSelect "データ", xlButton ActiveSheet.PivotTableWizard *2 SourceType:=xlDatabase,SourceData:=_ Change , TableDestination:="R5C1", TableName:="ピボットテーブル1" ActiveSheet.PivotTables("ピボットテーブル1").RefreshTable End Sub 上記の *1 Change = "'" & TUKI & "'!R8C2:R300C5" 入力するとエラー「ステートメントの最後」 *2 SourceType:=xlDatabase,SourceData:=_ の部分で:=にエラー「修正候補式」 マニュアル通り(のはず・・・)なのですが… 何処がいけないのでしょうか? 式だけの問題ではないようでしたらご回答頂きにくいのかもしれませんが、 宜しくお願いしますm(__)m

  • エクセルマクロで条件に当てはまるシートの名前

    何日も試行錯誤しましたが、わからないので教えてください。 あるファイルがあります。 そのファイルには数十枚のほぼ同じ形のデータが入ったワークシートがあります。 それぞれのワークシートには、ある範囲(例 A5:D10)にデータが入っていたりいなかったりです。 そこで、その範囲にデータが無ければ、別のブックの例えば「リスト」というシートに一覧にして、そのシートの名前を書き出したいのです。 それをマクロで記述するやりかたがどうやってもうまく行きません。 どうかお教えください。

  • Excel VBAで名前定義の記述について

    Excel2003ですが、データ部分の範囲が変わるため都度VBA で範囲を取得して名前定義を書き換えようと思っているのですが、範囲名は取得できますが、ダブルクオーテーションに囲まれてしまい、認識されません。手動で名前定義のダブルクオーテーションをはずすと認識されます。 下記コードでやっていますが、どのように記述すれば認識されるのでしょうか?教えてください Sub 名前定義() '***************************************************************************** '名前定義 Dim ソースデータ範囲 As Variant Dim 右下端 As Variant '名前→定義でソースデータ範囲を”DB”に定義 Range("A1").CurrentRegion.Select Selection.CurrentRegion.Select 右下端 = Selection.Item(Selection.Count).Address ソースデータ範囲 = データ! & "A1" & ":" & 右下端 Worksheets("データ").Activate ActiveWorkbook.Names.Add Name:="DB", RefersToR1C1:=ソースデータ範囲 End sub

  • エクセル VBAで範囲に名前を定義する

    Sub 範囲import設定() Sheets("Format").Select Range("A1").Select Selection.CurrentRegion.Select ActiveWorkbook.Names.Add Name:="import", RefersToR1C1:="=Format!R1C1:R26C7" End Sub 「マクロの記録」でCTRL + * で全データ範囲を選択して"import"という名前を定義したところ 上のようなコードになりました。全データ範囲は毎回違うのですが、ごらんのようにセル番号 で指定されてしまいます。そのつど異なる全データ範囲に名前を定義するにはどうすればいいのでしょうか。 よろしくお願いします。

  • 名前の定義を使ったリストを動的に

    Excel2003を使っています。 「=OFFSET(Sheet2!$B$2,,,COUNTA(Sheet1!$B:$B)-1)」という形で名前の定義を行います。 入力規則のリストにこの名前を指定することで、後でSheet2にデータを付け加えても修正する必要のない動的なリストを作ることができますよね。 それともう一つ、入力規則のリストに「=INDIRECT(A1)」と指定することで、A1セル内に書かれてある文字の名前を指定したことになり、リストとして扱えますよね。 この二つの組み合わせはできないのでしょうか? 「=OFFSET(Sheet2!$B$2,,,COUNTA(Sheet1!$B:$B)-1)」に「名前1」とつけたとし、Sheet1のA1セルに「名前1」と記入し、B1セルの入力規則に「=INDIRECT(A1)」を指定してもエラーとなってしまいます。 「=OFFSET(Sheet2!$B$2,,,COUNTA(Sheet1!$B:$B)-1)」という形でいくつか動的なリストを作り、Sheet1のA1セル内を書き換えることでB1セルのリストが動的に変わるということをしたいのですが上手くいきません。 「=OFFSET(Sheet2!$B$2,,,COUNTA(Sheet1!$B:$B)-1)」ではなく、「=Sheet2!$B$2:$B10」のように固定してしまえば上手くいくのですが、これだとデータを付け加えるたびに修正しないといけません。 二つを組み合わせてリストを使う方法はありませんか?

  • エクセルVBA 「名前の定義」について

    いつもお世話様です。エクセル2000での名前定義に関するVBA操作で疑問がありますのでよろしくお願い申し上げます。 (o。_。)oペコッ 以下のマクロで、あるエクセルのBOOKの名前の定義をすべて書き出してみました。 Sub Names_Check() Dim nm As Object Set sh = ActiveWorkbook.Worksheets.Add For Each nm In ActiveWorkbook.Names i = i + 1 sh.Cells(i, 1) = nm.Name sh.Cells(i, 2) = "'" & nm.RefersTo Next End Sub すると、なかにはセル範囲を参照していない名前の定義がけっこう見つかりました。 それらはよく見ると =○○○.xls!△△マクロ のようなマクロの名前を参照していました。 そんな名前の定義はつけた覚えが無いのですが、これは何でしょうか? なぜそのような名前の定義が出来てしまうのでしょうか? 次にセル範囲を参照していないこれらの名前定義を削除するため下記のマクロを書いてみたところ、「実行時エラー1004 その名前は正しくありません」というエラーがでてしまいます。 どう書いたら削除できるのでしょうか?(もちろん手動では削除できます。) Sub Del_NameRefQuestion() '不明な参照の名前定義削除 Dim nm As Object Dim mystr As String, ans As Integer For Each nm In ActiveWorkbook.Names If InStr(nm.RefersTo, "$") = False Then ans = MsgBox(nm.Name & "/" & nm.RefersTo, vbYesNo + vbQuestion, "削除しますか?") If ans = vbYes Then nm.Delete ’ここでエラー End If Next MsgBox "不明参照の名前定義削除完了", , " ( ̄ー ̄)v" End Sub

  • EXCELで定義した名前をVBAで参照する方法

    いつもお世話になってます。 挿入→名前→定義で「Syouhizei=0.05」と定義しているのですが、これをマクロで使うときは、具体的にどう記述したらいいのでしょうか。 たとえば「Msgbox Syouhizei」では何も表示されません(>_<) EXCEL2000です。