• ベストアンサー

CnvFormula 絶対参照にsheet名を付けたい

xls88の回答

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

関数を使わなくても、数式セルの移動で一気に変換出来ました。 一旦、Sheet1の何もないセル位置でコピぺし、Sheet2へカット&コピーします。 そうすれば、Excelが数式にシート名を勝手に付けてくれます。 ただし下記マクロでは、数式セル範囲が不連続の場合にはエラーになります。 数式セル範囲に、複数の離れた範囲が含まれる場合の対応を工夫してみてください。 Sub testCnvFormula()   Dim rng As Range   Set rng = Selection.SpecialCells(xlCellTypeFormulas)   With rng     .Formula = Application.ConvertFormula(.Formula, xlA1, xlA1, xlAbsolute)   End With   rng.Copy Worksheets("Sheet1").Range("AA1")   Worksheets("Sheet1").Range("AA1").Resize(rng.Rows.Count, rng.Columns.Count).Cut   rng.Select   ActiveSheet.Paste End Sub

esd827
質問者

補足

ありがとう御座います。deback結果です。実際の列でdebackしました。 ・シート名に汎用性がありません。下記はsheet1 sheet2 に変更しています。 ・N→Q列になっています。 シート名:データ sheet1 f22~f25   実際にはF列です =N22-(N22-O22)*0.618 =N23-(N23-O23)*0.618 =N24-(N24-O24)*0.618 =N25-(N25-O25)*0.618 シート名:重点 sheet2 c6~c9 実際にはC列です =Sheet1!Q22-(Sheet1!Q22-Sheet1!R22)*0.618 =Sheet1!Q23-(Sheet1!Q23-Sheet1!R23)*0.618 =Sheet1!Q24-(Sheet1!Q24-Sheet1!R24)*0.618 =Sheet1!Q25-(Sheet1!Q25-Sheet1!R25)*0.618

関連するQ&A

  • エクセルでマクロを使って絶対参照を相対参照に戻す方法

    エクセルにおいて絶対参照に変更する方法はわかったのですが、それを相対参照に戻す方法がわかりません。 Sub tes1() Dim c As Range For Each c In Selection With c If .HasFormula Then .Formula = Application.ConvertFormula(.Formula, xlA1, , xlAbsolute) End If End With Next ですべての範囲を絶対参照にすることができました。 しかし、逆にその絶対参照を全てはずす方法がわかりません。 わかりましたら教えて頂けたらと思います。よろしくお願いします End Sub

  • 【VBA】複数シートのうち、任意シートのみで動作

    【Excel2010】において… Sheet1~10のうち、Sheet10以外(=Sheet1~9)に以下の動作をさせたい場合はどのようにしたらよいですか。 (↓ Sheet1~9の各シート内で、J列に『A列×C列』で任意の検索keyを設定する、というマクロを組んだつもりです) ------------------------------------------------------------------------------------------- Sub 検索keyを追加() With Range("A1", Cells(Rows.Count, 1).End(xlUp)).Offset(, 9) .Formula = "=CONCATENATE(A1,C1)" .Copy .PasteSpecial Paste:=xlPasteValues End With End Sub ------------------------------------------------------------------------------------------- 現在、VBA習得中(初心者)です。 基本的な質問で大変恐縮ですが、是非ご教示いただきたくお願いいたします。

  • vlookupで参照するシート名と範囲を変えたい

    お世話になります。 vlookup関数について質問です。 新規作成する表の列B2からF2(1行目は項目行)に別のブック 「商品マスタ」からvlookupで必要なデータを検索して入力 B2からFのデータのある最終行までコピーするというマクロを作りました。 Range("B2").Select ActiveCell.FormulaR1C1 = _ "=VLOOKUP(RC1,[商品マスタ.xlsx]商品マスタ2017.10.5!R2C1:R430C6,COLUMN(RC),0)" Range("B2").Select Selection.AutoFill Destination:=Range("B2:F2"), Type:=xlFillDefault Range("B2:F2").Select Range("B2").Select Selection.AutoFill Destination:=Range("B2:F2"), Type:=xlFillDefault Range("B2:F2").Select Selection.AutoFill Destination:=Range("B2:F" & Cells(Rows.Count, "A").End(xlUp).Row) On Error Resume Next With Range("B:F").SpecialCells(xlCellTypeFormulas) .Value = .Value End With ★商品マスタの内容を更新時に新規シートを追加しているので 《商品マスタ2017.10.5!R2C1:R430C6》この部分のシート名と参照範囲を 毎回手動で書き直していますが、シート名と参照範囲を自動で切り替える 方法がありましたら教えてください。 シートは最新版のデータが入ったものを常に使用します。 よろしくお願いします。

  • 選択範囲だけを相対値セルに変換

    選択範囲だけを相対値セルに変換 Sub test()   Dim c For Each c In Selection If c.HasFormula Then c.Formula = Application.ConvertFormula(Formula:=c.Formula, _ FromReferenceStyle:=xlA1, ToAbsolute:=xlRelative) End If Next End Sub セル行が変化してうまく動作しません どこを直せばよいのかわかりませんどなたかお教えください。

  • エクセルでシート名をセル参照するマクロ

    いつもお世話になっております。 ワークシートをコピーする際、 B1セルの値を複製したシート名にするマクロを と思ってやってみましたが、 Sub Macro1() ' ' Macro1 Macro Sheets("0000").Select Application.CutCopyMode = False Sheets("0000").Copy Before:=Sheets(3) Range("B1").Select Selection.Copy Sheets("0000 (2)").Select Sheets("0000 (2)").Name = "0524" Range("B1").Select End Sub 5行目でB1セルをコピーしましたが、 シート名として命名されたのは、 "0524"という固定の値でした。 (そのときのB1セルの値です) このB1セルは日付データなのですが、 マクロを実行する日によって、 翌日だったり、3日後だったりします。 (営業日ベースなので) どのようにしたら、B1セルの値を シート名に使用できるでしょうか よろしくお願いいたします。

  • マクロでシート2~6のデータをシート1に転記したい

    マクロでシート2~6のデータをシート1に転記したいです。 シート2~6のデータを シート1に順番に転記したくてマクロの記録を利用して作成しました。 シート2~6は列は同じですが行数は異なります。 また行数は作業の都度異なります。 同じ記述が繰り返されているので もう少し記述が短くできるのではと思うのですが どうすればいいでしょうか? Sub データ更新() 'シート1の前回データをクリア Sheets("シート1").Select Range("A2:Q2").Select Range(Selection, Selection.End(xlDown)).Select Range(Selection, Selection.End(xlDown)).Select Selection.ClearContents Range("A2").Select Sheets("シート1").Select Range("A1").Select Sheets("シート2").Select Range("A1").Select 'ヘッダーも合わせて取得 Range(Selection, Selection.End(xlToRight)).Select Range(Selection, Selection.End(xlDown)).Select Selection.Copy Sheets("シート1").Select ActiveSheet.Paste Application.CutCopyMode = False Selection.End(xlDown).Select Selection.Offset(1, 0).Select Sheets("シート3").Select Range("A2").Select 'データのみ取得 Range(Selection, Selection.End(xlToRight)).Select Range(Selection, Selection.End(xlDown)).Select Selection.Copy Sheets("シート1").Select ActiveSheet.Paste Application.CutCopyMode = False Selection.End(xlDown).Select Selection.Offset(1, 0).Select Sheets("シート4").Select Range("A2").Select Range(Selection, Selection.End(xlToRight)).Select Range(Selection, Selection.End(xlDown)).Select Selection.Copy Sheets("シート1").Select ActiveSheet.Paste Application.CutCopyMode = False Selection.End(xlDown).Select Selection.Offset(1, 0).Select Sheets("シート5").Select Range("A2").Select Range(Selection, Selection.End(xlToRight)).Select Range(Selection, Selection.End(xlDown)).Select Selection.Copy Sheets("シート1").Select ActiveSheet.Paste Application.CutCopyMode = False Selection.End(xlDown).Select Selection.Offset(1, 0).Select Sheets("シート6").Select Range("A2").Select Range(Selection, Selection.End(xlToRight)).Select Range(Selection, Selection.End(xlDown)).Select Selection.Copy Sheets("シート1").Select ActiveSheet.Paste Application.CutCopyMode = False Selection.End(xlDown).Select Selection.Offset(1, 0).Select End Sub

  • セルをコピーしてシート名を取得 【VBA】

    こんばんわ。 エクセルのVBAについて、どうしてもわからなくなったので質問させて下さい。 マクロの内容は 1.一番前のシート(名前はSheet1ではありません。)のボタン35をクリック 2.シートをコピーして3番目に置く。 3.値にする。 4.シート名をセルの"DE16"に入っている値にする。 5.ボタンを消す。 以下の内容になりましたが、名前のところでデバックがおこります。 Sub ボタン35_Click() Worksheets(1).Select Worksheets(1).Copy After:=Sheets(3) Cells.Select Selection.Copy Selection.PasteSpecial Paste:=xlPasteValues Worksheets(3).Select Worksheets(3).Name = Range("DE16").Value ActiveSheet.Shapes("Button 11").Select Selection.Delete Application.CutCopyMode = False End Sub どなたかお知恵を貸して下さい。

  • エクセルマクロ 抽出したデータを別のシートへコピーしたい

    マクロ初心者のため、やり方が全くわかりません。 どなたか教えてください。 やりたいことは、 【1】シート名「データ」をA列でオートフィルタ抽出して、別シートにコピーする。 【2】別シートにコピーしたデータに外枠罫線をつける。 【3】シート名「データ」には塗りつぶしがあるので、別シートにコピーされた塗りつぶしは「なし」する。 【4】シート名「Sheet1」の1~2行目をコピーし、別シートの1~2行目に挿入し、シート名「データ」に戻る。 コピーするシートはあらかじめ作成しています。 簡素化の方法がわからないので、 とりあえず自分で作ってみたものが下にあるものです。 繰り返す方法がわからないので、今はコピーして「あ行」の部分を書き換えています。(かなり面倒です) 最終的には、抽出されたそれぞれのシートを別々のブックにしたいとも思っています。 長々とすみませんが、どなたか教えてください。 よろしくお願いします。 以下、作成したマクロです。 Sheets("データ").Select Range("A1").Select Range(Selection, ActiveCell.SpecialCells(xlLastCell)).Select Selection.AutoFilter Selection.AutoFilter Field:=1, Criteria1:="あ行", Operator:=xlAnd Range("A1").Select Range(Selection, ActiveCell.SpecialCells(xlLastCell)).Select Selection.Copy Sheets("あ行").Select Range("A1").Select ActiveSheet.Paste Range("A1").Select Range(Selection, ActiveCell.SpecialCells(xlLastCell)).Select Selection.Borders(xlDiagonalDown).LineStyle = xlNone Selection.Borders(xlDiagonalUp).LineStyle = xlNone With Selection.Borders(xlEdgeBottom) .LineStyle = xlContinuous .Weight = xlMedium .ColorIndex = xlAutomatic End With Cells.Select Selection.Interior.ColorIndex = xlNone Sheets("Sheet1").Select Rows("1:2").Select Selection.Copy Sheets("あ行").Activate Rows("1:1").Select Selection.Insert Shift:=xlDown Range("A1").Select Sheets("データ").Select Range("A1").Select

  • エクセルVBA 追加したシート名をハイフン(-)を入れて連番にする方法

    エクセル2003です。 シートをコピーし追加、 一つ前のシートの一部セルをセル参照するコードを作成しました。 今の段階ではコピーしたシート名が請求書1、請求書2、請求書3・・・となるのですが シート名を請求書1-1、請求書1-2、請求書1-3・・・とすることは可能でしょうか? "請求書"を"請求書1-"にするとコピーしたシートのセル参照をした部分が うまく参照されずエラーになってしまいます。 シート名にハイフンを入れてもエラーが出ない方法をご存じの方いらっしゃいましたら 是非ご教授をお願い致します。 Sub test1() Dim i As Integer Worksheets(2).Select For i = 2 To 5 Worksheets(2).Copy after:=ActiveSheet ActiveSheet.Name = "請求書" & i With Worksheets("請求書" & i) .Range("H15").Formula = "=請求書" & i - 1 & "!F10" End With Next i End Sub

  • Excelマクロで他シートへの抽出:エラー

    こちらの質問 http://okwave.jp/qa/q4760155.html を参考に、エクセルマクロを作りました。 Sheet1の10列目(J)に@が入っている行をすべて、 Sheet2に抽出表示します。コードは次になります。 Private Sub Worksheet_Activate() With Sheets("Sheet1") .AutoFilterMode = False .Range("A1:N1").AutoFilter .Range("A1:N1").AutoFilter Field:=10, Criteria1:="@" .Range(.Range("A1"), .Range("A1").SpecialCells(xlLastCell)).SpecialCells(xlCellTypeVisible).Copy Range("A1") .AutoFilterMode = False End With End Sub このマクロを実行すると、確かにSheet2では抽出が行われるのですが、 同時にSheet1の内容も抽出された内容に変わってしまいます。 どこに問題があるのでしょうか。 よろしくお願いします。