• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:VBA セル参照のパスを汎用性を持たせたい)

VBA セル参照の汎用性を高める方法

このQ&Aのポイント
  • VBAを使用してエクセルのセルを参照する際、パスの汎用性を持たせる方法について質問です。
  • 統合元のワークブック名を汎用性をもたせたいと考えています。現在は特定のブック名でしかマクロが使えません。
  • さらに、参照する範囲も可変にする方法についても教えてください。

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

  • ベストアンサー
  • xls88
  • ベストアンサー率56% (669/1189)
回答No.1

アクティブなブックの名前は 変数(Wb)に、ActiveWorkbookのNameを取得します。 データ範囲の最下行は 変数(rn)に、Sheets("チェックシート")のCells(Rows.Count, 9)からEnd(xlUp)してRowを取得します。 下記のような感じでどうでしょうか。 Dim wb As String Dim rn As Long wb = ActiveWorkbook.Name rn = Sheets("チェックシート").Cells(Rows.Count, 9).End(xlUp).Row With Worksheets("チェックシート")   .Range("J1").Consolidate _     Sources:="[" & wb & "]チェックシート!R1C3:R" & rn & "C9", _     Function:=xlSum, _     TopRow:=True, LeftColumn:=True, _     CreateLinks:=False End With

mnhc33
質問者

お礼

xls88様早速のご回答ありがとうございます。 みごとにできました。本当に嬉しいです。 マクロの記録では限界があるので、少しずつ変数の宣言も覚えていこうと思います。 ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • Excelのマクロ(データ統合)で質問です。

    データ → 統合をマクロで行いたいと思い、マクロ化したのですが… Selection.Consolidate Sources:= _ "aa4: ab53", Function:=xlMax, TopRow:= _ False, LeftColumn:=True, CreateLinks:=False 「参照が正しくありません」 と出てしまいます。 "aa4: ab53"の部分を絶対番地で指定するにはどうすれば宵のでしょうか?

  • VBAセル参照のパスのブック名に汎用性を持たせたい

    皆様どうぞ宜しくお願いいたします。マクロ初心者です。 Excel 2003で作業をしております。 今回の仕事で必要なので、大変困っております。 BOOK1とBOOK2を開き、BOOK1のAシートのセル参照をBOOK2でもBOOK2でのセル参照として活かす為、BOOK1のAシートの=をすべて#に置換した後、BOOK2にAシートをコピーし、逆に#を=に戻しました。 ここから後なのですが、BOOK名が特定されてしまうため、汎用性が効きません。 どのようにすればよいのかお教えください。 どうぞ宜しくお願いいたします。 下記マクロコード Cells.Replace What:="=", Replacement:="#", LookAt:=xlPart, SearchOrder _ :=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False Sheets("店頭").Select Sheets("店頭").Copy Before:=Workbooks("ここの部分です.xls").Sheets(3) Cells.Replace What:="#", Replacement:="=", LookAt:=xlPart, SearchOrder _ :=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False End Sub

  • VBAで統合ができない・・・。

    エクセルのマクロの記録で作ったコードですが、実行すると「開けません」と出ます。 どこがいけないのでしょうか? Sub Macro2() Selection.Consolidate Sources:=Array( _ "'C:\Documents and Settings\abcd\My Documents\2011\新規[対象2010.12.xls]店別集計'!R3C4:R69C10" _ , _ "'C:\Documents and Settings\abcd\My Documents\2011\新規\[対象2011.01.xls]店別集計'!R3C4:R69C10" _ ), Function:=xlSum, TopRow:=False, LeftColumn:=False, CreateLinks:= _ False End Sub

  • エクセルVBA URLの記述をセル参照に

    VBA初心者です。WEBクエリの作業をマクロで記録したものを編集しています。 そこで、コードのURL部分をセル参照にしたいのですが、コンパイルエラーが出るため記述が間違っているようです。もともとが間違っているのかどうかもわからず、その点につきまして、ご教授をお願い申し上げます。 Connection:="URL;http://www.○○○○" ↓編集 (URLを入れているセルは、Sheet1のA1、データを返すのはSheet2のA1) Connection:="ActiveWorkbook.WorkSheets("Sheet1").Range("A1")" "Sheet1"部分が選択された状態でエラーとなります。 以下は、ソースです。 Sub test1() With ActiveSheet.QueryTables.Add(Connection:= _ "URL;http://www.○○○○", Destination:=Range _ ("$A$1")) .Name = "151" .FieldNames = True .RowNumbers = False .FillAdjacentFormulas = False .PreserveFormatting = True .RefreshOnFileOpen = False .BackgroundQuery = True .RefreshStyle = xlInsertDeleteCells .SavePassword = False .SaveData = True .AdjustColumnWidth = True .RefreshPeriod = 0 .WebSelectionType = xlSpecifiedTables .WebFormatting = xlWebFormattingNone .WebTables = "22" .WebPreFormattedTextToColumns = True .WebConsecutiveDelimitersAsOne = True .WebSingleBlockTextImport = False .WebDisableDateRecognition = False .WebDisableRedirections = False .Refresh BackgroundQuery:=False End With End Sub

  • [VBA]グラフの要素が参照しているセル範囲の取得

    エクセル上で既に作成してあるグラフの、要素ごとの式から参照先の部分を取り出して、そこを置換することで参照先を変更したグラフを多量に複製したり、 必要な部分だけのグラフを複製したりといった作業を考えているのですが、その参照先がうまく取り出せずに難儀しています (SeriesCollection.fomulaはだいたいこんな感じになることが多くなっています =SERIES('Sheet1'!$B$14,('Sheet1'!$C$13:$E$13,'Sheet1'!$G$13:$J$13,'Sheet1'!$R$13:$V$13),('Sheet1'!$C$14:$E$14,'Sheet1'!$G$14:$J$14,'Sheet1'!$R$14:$V$14),1) 初めは”,”で分割して”=SERIES(”や”(”を消せばよいだろうと簡単に考えていたのですが、シート名に混じっている”(”を消してしまいエラーすることも多く、困っています セルの参照先を見るときのDirectDependents.Addressのようにグラフの参照先簡単に取り出すことはできないでしょうか もしくは、上記の式からセルの参照だけをうまく取り出すにはどういった文を作ればよいでしょうか

  • Excel2007 参照先セルが結合済み

    よろしくお願いいたします。 現在は 参照先がR1C1~R3C1を結合したセルの場合、 参照元(表示セル)の数式は"=[参照先シート]!R1C1:R3C1"となります。 自分の記憶ですと、結合セルを参照した場合、 一番左上のセルのみを参照し 参照元(表示セル)の数式が"=[参照先シート]!R1C1"となる こともあったかと思います。 もしこれら2つを使い分ける方法があれば、 教えていただけたら幸いです。

  • ExcelVBAでデータの値を集計する(長文です)

    ExcelのVBAについて教えて下さい。  A    B   C   D   E F  G 1 4月 5月 6月 ・・・ 2みかん 30 3りんご 55 4ぶどう 45 1つのbookにシートが20ほどあり全て同じ表で出来ています。シートは増える可能性があります。 それぞれのシートのセルB2やB3の合計を集計シートのB2やB3に出したいです。 Sub テスト() with Worksheet("集計") .Range("B2:R25").ClearContents .Range("B2").Consolidate Sourcces:=Array("'[Book1]経理"!R2C2:R50C50")_ Function:=xlSum, TopRow:=Flase, LeftColumn:=False,_ End With End Sub 上記のVBAで合計値を出すことが出来たのですが、合計するシート名を指定していたら、「行継続文字列を使い過ぎ」とエラーメッセージがでてしまいました。 そこで、シート5とシート12を除いたシートの合計値を集計シートにだすVBAを教えて下さい。 質問が分かり辛く、長文になってしまいしたがよろしくお願いいたします。

    • ベストアンサー
    • Mac
  • シート名をセルの値で参照

    当該シートとは別に1という名前のシートを作ります。 当該シートA2に='1'!B1と書いて、シート1のセルを参照します。 当該シートA1に1と入力して、その値をシート1のシート名として参照したいので、 =' & A1 & '!B1 とか =' & INDIRECT(A1,true) & ' ! b1 と書いてみるのですがうまくいきません。 どうすればうまくいくでしょうか?

  • VBA データの統合機能

    Winは7、Excelは2013を使用しています。 以前、データの統合機能というのをこちらで教わり、 その構文を使用させて頂いているのですが、 下記の、方法を集計のところの、Rnage("A7")のところに、変数 rnを使用したいのですが、 エラーコード438が出てしまいます。 あと、年間集計のところにデータを書きだすところで、画像の青枠の様に1列おきに書き出したいのですが、可能でしょうか? 以上、2点ご教示頂けますようお願い致します。 Sub test_データの統合機能() Dim sArray() As String ReDim sArray(Sheets.Count - 2) As String Sheets("年間集計").Select Cells.ClearContents '-------------------------------------------- '科目年間集計 '-------------------------------------------- For i = 2 To Sheets.Count sShtName = Sheets(i).Name sShtAddress = Sheets(i).Range("M2").CurrentRegion.Address(, , xlR1C1) sArray(i - 2) = sShtName & "!" & sShtAddress Next i Sheets(1).Range("A1").Consolidate Sources:=sArray, _ Function:=xlSum, _ TopRow:=True, _ LeftColumn:=True, _ CreateLinks:=False '-------------------------------------------- '合計 '-------------------------------------------- Dim maxCol As Long Dim maxRow As Long Dim c As Integer Dim r As Integer maxCol = Range("A2").End(xlToRight).Column maxRow = Range("A2").End(xlDown).Row Cells(1, maxCol + 1) = "合計回数" Cells(1, maxCol + 2) = "合計時間" For r = 2 To maxRow For c = 2 To maxCol Step 2 Cells(r, maxCol + 1) = Cells(r, maxCol + 1) + Cells(r, c) Cells(r, maxCol + 2) = Cells(r, maxCol + 2) + Cells(r, c + 1) Next c Next r '-------------------------------------------- '方法を年間集計 '-------------------------------------------- Dim rn As Range Set rn = Cells(maxRow + 2, 1) For i = 2 To Sheets.Count sShtName = Sheets(i).Name sShtAddress = Sheets(i).Range("Q2").CurrentRegion.Address(, , xlR1C1) sArray(i - 2) = sShtName & "!" & sShtAddress Next i Sheets(1).Range("A7").Consolidate Sources:=sArray, _ Function:=xlSum, _ TopRow:=True, _ LeftColumn:=True, _ CreateLinks:=False '-------------------------------------------- 'このあとに合計を計算する '-------------------------------------------- '(略) End Sub

  • VBA アクティブなセルのシート名を取得したい

    エクセル2010使用です。 VBAで、アクティブなセルのあるシート名を取得する方法を教えてください。  マクロ.xls (マクロシートA1) ←今回のマクロを書き込んだファイル  参照.xls (参照シートA1)  入力.xls (入力シートF3) この3つのエクセルファイルを開きます。 ( )内はそれぞれの前面にあるシート名と選択されたセルです。 入力シートのF3にカーソルをおいて下記マクロを実行すると   MsgBox ActiveSheet.Name & ActiveCell.Address 「マクロシート F3」と返されます・・・ ほしい結果は「入力シート F3」なんです。 このような場合にアクティブセルのあるシート名を取得する方法があれば教えてください。 よろしくお願いいたします。

専門家に質問してみよう