Excel2007でマクロを使って特定の行の特定の列を選択する方法

このQ&Aのポイント
  • Excel2007でマクロを使って特定の行の特定の列を選択する方法について教えてください。
  • 質問者は、テーブル1の特定の行の特定の列を選択したいと考えています。試しに行を固定してコードを実行したところ、エラーが発生しました。
  • 質問者は、[#This Row]という指定方法についても疑問を持っています。どのように使用するのか教えてください。
回答を見る
  • ベストアンサー

Excel2007です。下記のように、テーブル1があります。

Excel2007です。下記のように、テーブル1があります。 列0 列1 列2 列3 列4 行1  1  2   3   8 行2  3  4   6   4 行3  2  2   4   2 列0~列4は、テーブルの見出しです。(列0と書いてあるところが、A1セルです。) マクロで、行1・行2・行3のいずれかの行の列1~列3のセルを選択したいのです。 行1・行2・行3のいずれを選択するかは、動的に与えようと思います。 どのようにすれば、それができるかが質問です。 列は、構造化参照します。[列1]とか[列3]というのを使って指定したいと思います。 試しに、行を固定([行2])して、以下のコードを実行させようとしたら、エラーが出ます。 Sub Macro1() Range("A3").Select Range("テーブル1[[#This Row],[列1]:[列3]]").Select End Sub エラーは「実行時エラー'1004' 'Rangeメソッドは失敗しました:'_Global'オブジェクト」 [#This Row]というのはどのような使い方をするものなのでしょうか。

質問者が選んだベストアンサー

  • ベストアンサー
  • myRange
  • ベストアンサー率71% (339/472)
回答No.2

テーブルを使ったことはないの何ですが、 ヘルプなどをチラッと眺めてみると [#ThisRow]はVBAでいうところのActiveCellとは違うようです。   試しに、セルに[#ThisRow]を使った参照式を入力してみてください。 (例えば、【行2】と【列3】の交点の値(6)を取得する参照式) 当方の言わんとしていることが分かると思います。   ------------------------------------------------ 【結論】 [#ThisRow]は手動で参照式を入力するセルの行のことなので それを表す方法のないVBAでは使用できない ------------------------------------------------   それを踏まえて、、、 >データの行を選択するのは、見出し名を使うやり方はできないんでしょうか   見出し名を使うとしたら部分的使用になるでしょう 例えば、   >Range("テーブル1[[#This Row],[列1]:[列3]]").Select   Intersect(ActiveCell.EntireRow, Range("テーブル1[[列1]:[列3]]")).Select       ●あくまでもこれはヘルプなどからの当方の理解ですので参考程度ということで。。。 以上です。  

kkk1002
質問者

お礼

ご回答ありがとうございます。

その他の回答 (1)

  • hallo-2007
  • ベストアンサー率41% (888/2115)
回答No.1

>[#This Row]というのはどのような使い方をするものなのでしょうか エクセルのVBAでは使いませんね。 ActiveCell.Row のことでしょうかね。 テーブル1とはシート名でしょうか であれば Sheets("テーブル1").Range("B" & ActiveCell.Row & ",D" & ActiveCell.Row).Select とか Range("B" & ActiveCell.Row & ",D" & ActiveCell.Row).Select だけでも? http://excelvba.pc-users.net/fol2/2_1.html 等が参考になるかと思います。

kkk1002
質問者

補足

ご回答ありがとうございます。 >テーブル1とはシート名でしょうか デザインリボンのプロパティのテーブル名に「テーブル1」と表示されているので、 テーブル1はテーブルのはずですが。 Range("テーブル1[[#Headers],[列1]:[列3]]").Select このようなコードなら、問題なく、見出し部分(列1・列2・列3)が選択されるんです。 見出し部分ではなくて、データの行を選択するのは、見出し名を使うやり方ではできないんでしょうか。

関連するQ&A

  • ピボットテーブルの範囲を選択する事はできますか?

    ピボットテーブルの範囲を選択する事はできますか? ピボットテーブルをクリックして、 CTRL+Aを押すと、 現在アクティなピボットテーブル全体を選択できます。 この動きをマクロの記録で取ってみたのですが Sub Macro1() Range("A3:B9").Select Range("B8").Activate End Sub しか記録されてませんでした。 やりたいことは、該当のピボットテーブル全体を選択し、 その範囲に名前を付けたいのですが まずピボットテーブルの範囲を選択するマクロ(VBA)を作成したいです。 ピボットテーブル名を指定して範囲を選択することはできないのでしょうか? Cells(Rows.Count, "A").End(xlUp).Row など最終行、最終列を取得していくしかないのでしょうか?

  • エクセルVBAセルの選択、挿入でズレた時に自動修正

    エクセルのVBAで、セルA1を選択します Sub Macro1() Range("A1").Select End Sub 別の作業でA列に1行挿入すると 自動的にセルB1を選択してくれないと困るのですが、どうすれば良いのですか?

  • 表をテーブルに変換するマクロ(Excel2007)

    お世話になります。カテゴリ違いでしたらご指摘ください。 Excel2007で範囲A1:D8にテーブル書式を設定するマクロを作成し、作業中のブックに保存しました。 Sub テーブル書式() ' ' テーブル書式 Macro ' ' ActiveSheet.ListObjects.Add(xlSrcRange, Range("$A$1:$D$8"), , xlYes).Name = _ "テーブル1" Range("テーブル1[#All]").Select ActiveSheet.ListObjects("テーブル1").TableStyle = "TableStyleMedium21" End Sub このマクロを別シートで実行しようとすると「実行時エラー‘1004’RangeクラスのSelectメソッドが失敗しました。」と表示されます。 表を書式付きのテーブルに変換するとき自動的にテーブル名がつけられ、それが既に記述されているテーブル名と異なるため発生するエラーかと思うのですが、VBAの知識が乏しくどのように修正すればいいのか分からず困っております。 ブック内のどのシートでもMedium21の書式付きテーブルに変換できるようにするにはどうすればよいか教えてください。 補足要求などあればご指摘ください。 よろしくお願いいたします。

  • 【Excelマクロ】 行全体を選択したい

    下記マクロはデータが入っている最終行の次のセル(A列)を選択するマクロです。 但し、A列はデータが入っていないこともあるため、必ずデータが入っているB列をキーにしています。 NT = Cells(Rows.Count, "B").End(xlUp).Row + 1 Range("A" & NT).Select B125までデータが入っていた場合A126にカーソルが置かれますが、本当は126行全体を選択したいのです。 「Range("A" & NT).Select」部分をどのようなマクロに変更したらよろしいでしょうか?

  • Excel2003でのVBA

    WindowsXPでExcel2003を使っています。 Excelにある表をマクロを使って編集したいと思ったのですが、セルの選択の設定で教えてほしい事があります。 まず、横A列~F列、縦1行~6行までの表があります。 A1セルは、空白。 B1セル~F1セルには、1~5の数字が入っています。(見出しなので全て入ってます。) A2セル~A6セルには、a~eのアルファベットが入っています。(見出しなので全て入ってます。) 表の中のデータは、ところどころにしか入っていなくて、全て埋まっていません。 また、横A列~F列というのは固定なのですが、縦1行~6行までという行数は変動します。 この表で、A2セルからF6セルまでを選択したいのですが、行が変動するのでA6とかF6とかでは指定できません。 Range("A2").Select Selection.End(xlDown).Select これで、A2セル~一番下の行(ここではA6セル)まで選択した後、F列まで(列の数は固定です。)選択するにはどうしたらよいのでしょうか? 右下のセルは、空白なので困っています。 Range(Selection, Selection.Next).Select こんなものを考えましたが、これでは一つ右隣しか選択できません。 これを少しいじればいいのではないかと思うのですが、全然違う方法でもかまいません。 どなたか教えていただけないでしょうか? 宜しくお願いします。

  • EXCEL2000 ピボットテーブルをマクロで作成

    以下の項目があります。 ID,レースID,芝0・ダ1,平地0・障害1,距離,騎手名,調教師名,人気,単勝オッズ,着順,開催 ピボットテーブルで、騎手別の着順数をSheet2のA1に出力しようと、マクロの自動記録で以下を作りましたが、「コピーまたは移動先のセルの内容を置き換えますか」とエラーになります。 データ数は、増えていくので、可変になるようにお願いします。 Sub Macro3() ' ' Macro3 Macro ' マクロ記録日 : 2013/5/6 ユーザー名 : ' Range("A1").Select Range(Selection, Selection.End(xlDown)).Select Range(Selection, Selection.End(xlToRight)).Select ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:= _ "Sheet1!R1C1:R3785C11").CreatePivotTable TableDestination:=Range("A1"), _ TableName:="ピボットテーブル1" ActiveSheet.PivotTables("ピボットテーブル1").SmallGrid = False ActiveSheet.PivotTables("ピボットテーブル1").AddFields RowFields:="騎手名", _ ColumnFields:="着順" With ActiveSheet.PivotTables("ピボットテーブル1").PivotFields("着順") .Orientation = xlDataField .Caption = "データの個数 : 着順" .Function = xlCount End With End Sub

  • フィルタを解除してA1セルを選択<マクロ>

    EXCEL2002を使用しています。 以下のようなマクロで、フィルタを解除してA1のセルを選択するようにしたいと思いました。 Sub Macro1() ActiveSheet.ShowAllData Range("A1").Select End Sub フィルタがかかっている状態で実行すれば問題ないのですが、かかっていない状態で実行するとエラーになっていまいます。 フィルタがかかっていない状態の場合は単にA1を選択するようにしたいのですが、どのようにしたらよいでしょうか? よろしくお願いします。

  • 途中に空白行や列があるデータ範囲

    エクセル2003です。 セルA1からセルC50までデータがあり 10行目と20行目は全て空白、 セルC39が空白で セルE55、F57、G55にはデータがある の状態で以下の構文ですと Sub 範囲コピー1() Range("B3").Select Range(Selection, ActiveCell.SpecialCells(xlLastCell)).Select Selection.Copy End Sub 途中に空白行や列、空白セルがあり さらに離れた所E55、F57、G55に データが有るのにもかかわらず セルB3からセルG57までを選択してクリップボードにコピー してくれます。 ですが問題がありまして 上記のシートにて A45~F50を選択してDeleteをし、 さらにセルのF55、G55もDeleteして データ範囲を セルA1~E44とセルE55のみにしてからから 上記構文を実行すると セルB3からセルE55を選択してクリップボードにコピー してほしいのに、 データ削除前と同様の セルB3からセルG57を選択してクリップボードにコピー されてしまいます。 これはエクセルの手操作 Ctrl+Shift+End でも同じようになりますので当然の結果(※1)と思っています。 (※1→なにか別な方法はありますか?) 上記の使用方法はあまりないのですが 構文を使う時点での最大行数や最大列数は常に不明で 途中空白が有る場合無い場合、 上記のようにシート上でデータ操作をした直後であっても データ削除部分は加味しデータのある範囲だけの取得の対応 が可能な構文を1種類で作成したいのですが どういう方法があるでしょうか? ちなみに Sub 範囲コピー2() Range("B3").Select Range(Cells(Rows.Count, 1).End(xlUp).Row).Select Range(Cells(1, Columns.Count).End(xlToLeft).Column).Select Selection.Copy End Sub これですと 実行時エラー1004 Rangeメソッドは失敗しましたGlobalオブジェクト となります。 ヘルプをクリックしても何も表示されません。 WEB検索するとこのエラーの質問は結構多いのですが 事例が相違する為よく理解できません。 もしかしてRangeなのに 取得できる値が一つの番号でセルを指定できないからでしょうか? エラーになる構文だと最初のRangeは行番号、次のRangeは列番号、 ですので。 で、 Sub 範囲コピー3() Dim 最終行 Dim 最終列 Range("B3").Select 最終行 = Cells(Rows.Count, 1).End(xlUp).Row 最終列 = Cells(1, Columns.Count).End(xlToLeft).Column Cells(最終行, 最終列).Select Selection.Copy End Sub これならエラーにはなりませんが 事例だとセルC50だけが単独選択されて範囲として 取得をしてくれません。 また 1, Columns.Count ですので最終列の列番号の取得が1行目の最終列から左に検索し データのある所の列番号を返すので 3→C列 となってしまい D,E,F列を見つけてくれません。 かといって 55, Columns.Count では データが55行まで無い場合には対応が出来ませんのでこれも駄目です。 途中に空白が無い場合や離れたセルが無い場合でも使いたいので UsedRangeは使用したくない(よくわかってない事もあって)です。 よろしくお願いします。

  • エクセルのマクロ 選択したセルを指定した範囲へ値貼

    お世話になります。 自動記録したものをどのように修正したら、実行時に選択しているセルの値を、3行下、1つ左のセルから8行目までに貼り付けることができるよう書き変えられますでしょうか。 初心者で何に手を付けて良いのか分からず。どなたかご教示いただけませんでしょうか。どうぞよろしくお願い致します。 Sub 選択したセルを指定した範囲へ値貼り付け() ' ' Macro1 Macro ' ' Range("I9").Select Selection.Copy Range("H12:H19").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False End Sub

  • Excel2013,macroのcopy

    Excel2013でマクロ実行するのですが、最後のstepの「条件付き書式」のcopyが上手く行きません。どなたかご教授お願いします。 A~J列x約4000行(1行~5行まではTytle行)のsheetです。 A列は日付で、過去からの日付となって居ます。 このsheetを見易くする為にA6行に 「条件付き書式」 =mod(month(A6),2)=0 を設定し、下記のmacro式でA6~J4000にCOPYするのですが、結果は上手く行きません。 ※1:偶数月行のA列のみ正確に書式設定されるが、全列(A~J)にならない。 ※2:奇数月のところどころ(列)に書式が設定される。 の不具合が生じます。 考えられる原因は何でしょうか?、ご教授願えませんでしょうか?。 与えたmacro Range("A6").Select Selection.FormatConditions.Add Type:=xlExpression, Formula1:= _ "=MOD(MONTH(A6),2)=0" Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority With Selection.FormatConditions(1).Interior .PatternColorIndex = xlAutomatic .Color = 11200714 .TintAndShade = 0 End With Selection.FormatConditions(1).StopIfTrue = True Selection.Copy Range(Selection, Selection.End(xlDown)).Select Range(Selection, Selection.End(xlToRight)).Select Range(Selection, Selection.End(xlToRight)).Select Range(Selection, Selection.End(xlToRight)).Select Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _ SkipBlanks:=False, Transpose:=False Range("A6").Select End Sub

専門家に質問してみよう