エクセルVBを使ってシートをまたいだセルへの自動記入を教えてください

このQ&Aのポイント
  • エクセルとマクロ(VB)を使い、づかい帳や家計簿の様な物を想定して、前月シートの今月残高が翌月シートの先月残高に自動で記入する方法を教えてください。
  • 現在Sheet1のセルには、2008年12月、12、前月残高、99999、収入、5555、支出、7777、今月残高、97777というデータがあります。
  • マクロを実行するごとにシートが一つずつ増え、先月の今月残高を翌月の前月残高に記入する方法が分かりません。
回答を見る
  • ベストアンサー

エクセル VB を使ってシートをまたいだセルへの自動記入を教えてください

エクセルとマクロ(VB)を使い、こづかい帳や家計簿の様な物を想定して、 「前月シート」の「今月残高」が「翌月シート」の「先月残高」に 自動で記入する方法を教えてください。 現在Sheet1のセルには      A    B      C      D 1 2008年12月 2        12   前月残高    99999 3           収入    5555 4           支出     7777 5           今月残高   97777 ずれるので書き直しますと A1:2008年12月(=Date(2008,B2,1) B2:12 C2:"前月残高 " C3:"収入 " C4:"支出" C5:"今月残高" D2:99999 D3:5555 D4:7777 D5:9777(=D2+D3-D4) D5は式「=D2+D3-D4」、B2は作業セルでA1に入力されている関数 「=DATE(2008,B2,1)」を表示させ、マクロを実行するごとにSheetが一つずつコピー増加され、B2が+1し、それに伴いA1の年月が変わります。 新しく現れたSheetの名前は、A1を参照して(この場合ですと)「12月」となります。 このマクロを実行するごとに「12月」「1月」・・・とシートが増えていきますが、 (先月の)「今月残高」を(翌月の)「前月残高」に記入する方法が分かりません。 VBAは Sub Macro1() ' ' Macro1 Macro ' マクロ記録日 : 2008/12/9 ユーザー名 : ' ' Sheets("Sheet1").Select Sheets("Sheet1").Copy Before:=Sheets(2) Sheets("Sheet1 (2)").Select Sheets("Sheet1 (2)").Name = Format(Range("A1").Value, "mm") & "月" Sheets("Sheet1").Select Range("B2").Value = Range("B2").Value + 1 Range("D2:D4").Select Selection.ClearContents Sheets("sheet1").Select Range("d2").Select ActiveCell.FormulaR1C1 = "='12月'!R[3]C" End Sub 最後の行の 「"='12月'!R[3]C"」をマクロを実行するごとに「 "='1月'!R[3]C"」 「 "='2月'!R[3]C"」・・・・・・・ とする方法は無いでしょうか。よろしくお願いいたします。

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

  • ベストアンサー
  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.1

結果として、シートインデックス2(左から2番目)のシート名を数式に入れたいと言う事でしょうか? Sheets("Sheet1").Range("d2").FormulaR1C1 = "='" & Sheets(2).Name & "'!R[3]C" 例えばこんな感じの事?

moni101
質問者

お礼

本当にご親切にありがとうございます。

moni101
質問者

補足

さっそくの回答ありがとうございます。うまく行きました。 Sheets("Sheet1").Copy After:=Sheets(3)の場合 Sheets("Sheet1").Range("d2").FormulaR1C1 = "='" & Sheets(4).Name & "'!R[3]C" でうまくいきましたが、" & Sheets(X).Name & "は「X枚目のシートを見よ」ということでしょうか。 「&」の意味を教えていただけないでしょうか。

その他の回答 (1)

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.2

先月シートの今月残高の有る行は、変わらないのか、月によりデータの多少で変わるのか、書いてなくて質問にならない。 変わらないならVBAなど使わず、=Sheet1!B20のように関数式でやればすむ。 変わるなら先月シートの今月残高のある行を(VBAや関数で)探さないといけない。そういうところに目が行ってないようだが、良く考え直してみて質問してください。

moni101
質問者

補足

>書いてなくて質問にならない。 それはどうも至らない人間で誠に無作法この上なく恐縮至極であります。 かくなりますればあなたのような聖人の如き崇高なるご意見を平に承りたく候。 >変わらないならVBAなど使わず マクロvbaを使用に至る主たる目的は(vbaの文を読んでいただけば分かる様に) α実行ごとに月数を増変させる。 βそれに伴いシートの名前を自動記述させる。 γ毎月同じフォームを使うこと。 といったところです。マクロでコピーするわけですからγは書くまでもありませんし、同じフォームを使うのですから残高の行は変わらないのは自明ですね。 先月残高を今月残高に自動記入させるのは、言ってみればもののついでです。 ここで質問するより、30日に1度自分で書き込んでしまえばいいわけですから。 >=Sheet1!B20のように関数式で シートの名前が毎月変わるのにそう単純に行くのかどうかご教示願います。 >変わるなら今月残高のある行を(VBAや関数で)探さないといけない。 折角ですから先生のご高説、拝聴仕りたいです。

関連するQ&A

  • エクセル2007マクロ シート間のセルコピー

    [Sheet1]にあるデータを[Sheet2]にコピーするマクロボタンを[Sheet2]に作りたいのですが、マクロがよく分からないので、「マクロの記録」で作成してみました。 Sub siken() ' ' siken Macro ' ' Sheets("Sheet1").Select Range("A1").Select Selection.Copy Sheets("Sheet2").Select Range("A1").Select ActiveSheet.Paste Sheets("Sheet1").Select Range("B3").Select Application.CutCopyMode = False Selection.Copy Sheets("Sheet2").Select Range("B3").Select ActiveSheet.Paste Sheets("Sheet1").Select Range("B6:D6").Select Application.CutCopyMode = False Selection.Copy Sheets("Sheet2").Select Range("B6").Select ActiveSheet.Paste End Sub (実際はもっと多くのセルをコピーします) マクロを実行すると、ちゃんとコピーできるのですが、セルをコピーする都度[Sheet1]と[Sheet2]が交互に表示されます。 コピー元の[Sheet1]を表示させずにマクロを実行させるにはどのようにしたらよいのでしょうか? よろしくお願いします。

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

    いつもお世話になっております。 ワークシートをコピーする際、 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セルの値を シート名に使用できるでしょうか よろしくお願いいたします。

  • エクセル VBA 繰り返し コピー貼り付け

    以下を繰り返し作業をOffsetを使用して行いたいのですがどうすればいいでしょうか? Sheets("Sheet1").Select Range("A1:C1").Select のA1:C1以下へA1000:C1000ぐらいあります。 Sheets("Sheet2").Select Range("G1").Select は貼り付けたセル3つの数字の組み合わせで公式に使う計算期間がまちまちですので公式を張り付けたり出来ません。 D1の解を heets("Sheet1").Select Range("D1").Select に貼り付けてA1:C1以下1000までの結果を評価出来るようにしたいのですが! ' Macro1 Macro Sheets("Sheet1").Select Range("A1:C1").Select Selection.Copy Sheets("Sheet2").Select Range("D1").Select ActiveSheet.Paste Range("G1").Select Application.CutCopyMode = False Selection.Copy Sheets("Sheet1").Select Range("D1").Select ActiveSheet.Paste Range("A2:C2").Select Application.CutCopyMode = False Selection.Copy Sheets("Sheet2").Select Range("D1").Select ActiveSheet.Paste Range("G1").Select Application.CutCopyMode = False Selection.Copy Sheets("Sheet1").Select Range("D2").Select ActiveSheet.Paste Range("A3:C3").Select Application.CutCopyMode = False Selection.Copy Sheets("Sheet2").Select Range("D1").Select ActiveSheet.Paste Range("G1").Select Application.CutCopyMode = False Selection.Copy Sheets("Sheet1").Select Range("D3").Select ActiveSheet.Paste End Sub よろしくおねがいします。

  • エクセル マクロの記憶で記憶する自動マクロの編集

    こんにちわ。 エクセルで、マクロを記憶させて実行しています。 この自動で操作をしてくれるマクロを、50回繰り返したいのですが、 マクロの編集で文字を出して、この文字に何かを付け足すことで 50回繰り返すことはできますでしょうか? 以下、文字を出した画面です。(適当な操作を記憶させただけです) Sub あき() ' ' あき Macro ' マクロ記録日 : 2011/8/20 ユーザー名 : user ' ' Range("A1").Select Selection.ClearContents Sheets("RESULT_B(1)").Select Selection.AutoFilter Field:=1, Criteria1:="=", Operator:=xlAnd Range("A3").Select Sheets("Sheet1").Select Range("C1").Select Selection.Cut Sheets("RESULT_B(1)").Select Range("A3").Select ActiveSheet.Paste Sheets("Sheet1").Select Range("D1").Select Selection.Cut Sheets("RESULT_B(1)").Select Range("H3").Select ActiveSheet.Paste Sheets("Sheet1").Select End Sub このすべての作業を繰り返したいのですが、 お手数ですが、ご存知の方、 どこにどういう言葉を入力したらよいのか教えて頂けませんでしょうか。 当方素人の為、訳の分からない文章になってしまい 申し訳ありません。 よろしくお願い致します。

  • Excel マクロ : シート名の変数化

    すいません、「マクロの記録」を使用しての質問です。 以下のマクロを使用し「2007年9月」のシートから「2007年10月」のシートに、あるデータを移しています。 このあるデータというのが「2007年9月」の売掛残であり、「2007年10月」の前月繰越となるのですが、このままでは「2007年10月」にしか使用できません。 実はシートは2010年頃まで作成する予定であり「20○○年○月」というところを毎回入力しなおすのは大変ですので何かいい方法があればと思い質問しました。 ---------- Sub Macro8() Sheets("2007年9月").Select Range("G16").Select Selection.Copy Sheets("2007年10月").Select Range("D19").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Range("D20").Select End Sub ---------- 宜しくお願いいたします。

  • エクセルの入力データーを別のシートの日付と氏名の交差点に記録していくマクロ

    現在別のカテゴリーで教えていただいたマクロなのですが、 Sheet1に入力されたデータをSheet2に転記するマクロに苦しんでおります。週明けには解決したいのでこのカテゴリーにも質問することにしました。 現在の状況は以下の通りです。 Sheet1    A   B   C   D   1 日付 氏名 成績 区分 2 9/23 佐藤 95  優 ここでマクロを実行すると Sheet2    A   B   C   D   E   F  G 1       1組       2組 2    田中 佐藤 小林 近藤 三浦 遠藤 3 9/19 90  4 9/21         80 5 9/21    95 6 9/21            95 7 9/22                 95 となって欲しいのですが、同じ日付で続けて入力すると Sheet2    A   B   C   D   E   F  G 1       1組       2組 2    田中 佐藤 小林 近藤 三浦 遠藤 3 9/19 90  4 9/21    95   80  95 5 9/21     6 9/21             7 9/22                 95 となってしまいます。 マクロは Sub Macro001() 'まず日付を転記します  Range("A2").Select  Selection.Copy  Sheets("sheet2").Select  Range("A65536").Select  Selection.End(xlUp).Select  ActiveCell.Offset(1, 0).Select  Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _  False, Transpose:=False  Sheets("sheet1").Select  Application.CutCopyMode = False  Range("C3").Select '続いて転記します  Dim x As Long  Dim y As Integer  x = Application.Match(Sheets("sheet1").Range("a2"), Sheets("sheet2").Columns(1), 0)  y = Application.Match(Sheets("sheet1").Range("b2"), Sheets("sheet2").Rows(2), 0)  Sheets("sheet2").Cells(x, y) = Sheets("sheet1").Range("C2") End Sub です。 どうかよろしくお願いいたします。

  • エクセルマクロ 繰り返して、別のシートへコピーしたい

    エクセルマクロ 繰り返して、別のシートへコピーしたい マクロ初心者のため、やり方が全くわかりません。 どなたか教えてください。 やりたいことは、 コピーするシートはあらかじめ作成しています。 簡素化の方法がわからないので、 とりあえず自分で作ってみたものが下にあるものです。 繰り返す方法がわからないので、 どなたか教えてください。 よろしくお願いします。 以下、作成したマクロです。 1行目から10行目まで繰り返したくて、 1行目から2行目のセルの移動の差は10行目までかわりません。 '1行目 Sheets("Sheet1").Select Range("B14:C14").Select Application.CutCopyMode = False Selection.Copy Sheets("Sheet2").Select Range("A1").Select Selection.PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:= _ xlNone, SkipBlanks:=False, Transpose:=False Sheets("Sheet1").Select Range("B15:C17").Select Application.CutCopyMode = False Selection.Copy Sheets("Sheet2").Select Range("B1").Select Selection.PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:= _ xlNone, SkipBlanks:=False, Transpose:=False '2行目 Sheets("Sheet1").Select Range("B18:C18").Select Application.CutCopyMode = False Selection.Copy Sheets("Sheet2").Select Range("A2").Select Selection.PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:= _ xlNone, SkipBlanks:=False, Transpose:=False Sheets("Sheet1").Select Range("B19:C21").Select Application.CutCopyMode = False Selection.Copy Sheets("Sheet2").Select Range("B2").Select Range("B2").Select Selection.PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:= _ xlNone, SkipBlanks:=False, Transpose:=False

  • セル変更2回目以降マクロが走らない

    office2010 セル値変更でマクロ実行の件で質問です。 macroというシートのA11セルがプルダウンリストになっていて、その値を変更したらマクロ実行という構成を作成しました。 下記はmacroというシートに記載したマクロ Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address <> "$A$11" Then Exit Sub Calculate Macro4 End Sub 下記は標準モジュールに記載したマクロ Sub Macro4() ' 'macroシートB11に表示されるNo.で抽出 Application.EnableEvents = False Application.Calculation = xlCalculationManual Application.ScreenUpdating = False Sheets("Sheet1").Visible = True Sheets("Sheet2").Visible = True Sheets("Sheet3").Visible = True Sheets("Sheet4").Visible = True Sheets("work").Visible = True Sheets("Sheet3").Select Cells.Select Selection.ClearContents Selection.ClearContents Sheets("Sheet2").Select Cells.Select Selection.ClearContents Selection.ClearContents Sheets("Sheet1").Select Cells.Select Selection.AutoFilter Selection.AutoFilter ActiveSheet.Range("$A:$BA").AutoFilter Field:=3, Criteria1:=Sheets("macro").Range("B11") Sheets("kisyu_work").Select Cells.Select Selection.ClearContents Sheets("Sheet1").Select Columns("F:F").Select Selection.SpecialCells(xlCellTypeVisible).Select Application.CutCopyMode = False Selection.Copy ActiveWindow.ScrollWorkbookTabs Position:=xlLast Sheets("kisyu_work").Select Range("A1").Select ActiveSheet.Paste Application.CutCopyMode = False Sheets.Add ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _ "kisyu_work!R1C1:R1048576C1", Version:=xlPivotTableVersion14). _ CreatePivotTable TableDestination:="", TableName:= _ "ActiveSheet.Name", DefaultVersion:=xlPivotTableVersion14 Cells(1, 1).Select With ActiveSheet.PivotTables("ActiveSheet.Name").PivotFields("V_KISYU_CD") .Orientation = xlRowField .Position = 1 End With Range("A3:A" & Range("A" & Rows.Count).End(xlUp).Row - 2).Select ' Selection.Copy ActiveWindow.ScrollWorkbookTabs Position:=xlLast Sheets("kisyu_work").Select Range("B1").Select ActiveSheet.Paste ' Range("C1:C" & Range("B" & Rows.Count).End(xlUp).Row).Value = "=INDEX(M_KISYU!C[5],MATCH(RC[-1],M_KISYU!C,0))" Sheets("macro").Select End Sub A11セルの値を変更するとMacro4は実行されます。 しかしながら、2回以上続けてA11の値を変更するとMacro4が動作しません。 なぜなのでしょうか? なお、プルダウンリストの構成をやめると、連続してA11セル値変更しても動作します。

  • エクセル VBA シートの選択 

    windows XP でエクセル2000を使っています。 Sub aaa() Sheets("Sheet1").Select Dim a As String a = Cells(2, 4) Sheets(a).Select Range("A1").Select End Sub というマクロだと セルに入っている値のシート名を探してくれます。 ですが Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range) If Intersect(Target, Range("B11:b683")) Is Nothing Then Exit Sub Worksheets("Sheet1").Range("C2").Value = Target.Value Dim b As String b = Range("C2).value (←ここをcellsにしてもダメ) Sheets(b).Select Range("A1").Select End Sub これだとsheets(b)を選びません。Sheets(b).Selectのところが黄色くなります。 何処が間違えているのでしょうか。 全くの素人ですが、仕事で必要に迫られています。 わかりやすく回答・解説くれると助かります。

  • EXCELマクロ セルに入力したシート名から参照

    よろしくお願いします。 複数のシートがあり、それぞれ 1109,1110,1111,1112,1201,1202,1203,1204,1205 と名前がついています。 それぞれのシートには月毎のデータが入っています。 Sub Macro1() Columns("F:J").Select Selection.ClearContents Sheets("1205").Columns("A:E").AdvancedFilter Action:=xlFilterCopy, _ CriteriaRange:=Range("C4:E5"), CopyToRange:=Range("F2:J2"), Unique:=False End Sub ↑のマクロをSheet3で作りましたが、4行目の「Sheets("1205")」の1205の部分を可変で作れればと 思っています。Sheet3のC3セル内に入力したシート名(1109や1203等)でフィルタ出来ると助かります。 どうぞよろしくお願いします。

専門家に質問してみよう