[[20260117120922]] 『数式のコピーは』(初心者) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) |

| 全文検索 | 過去ログ ]

 

『数式のコピーは』(初心者)

おねがいします。家計簿を自作しようと考えています。ネットにはたくさんありますが、自分の使いやすさを考えて自作に挑戦しています。 1月〜12月までの12枚各月集計シートと1枚目にそれらの年間集計表のスタイルを考えています。そこで質問なのですが、1枚目の集計表には各月のシートから拾ってくる次の数式が相当数のセルに表示されるようにしていますが、たとえば、集計表のB2〜B13のセルには ='1'!$C$7 〜 ='12'!$C$7 の数式を入れて、その下の行のC2〜C13には ='1'!$C$8 〜 ='12'!$C$8 以下同様の数式がかなりあります。これらを手入力してはものすごく時間がかかるので、最初のセルには手入力であとはコピーで入力できる方法を教えてください。

< 使用 Excel:unknown、使用 OS:Windows11 >


Excelの集計表で、各月のシート('1'!$C$7 から '12'!$C$7 など)を参照する数式を効率的にコピーするには、
最初のセルを手入力後、フィルハンドルを使ったドラッグやダブルクリックが最適です。

これで相対参照が自動調整され、シート名が順次変化します。

基本的なコピー手順

B2セルに ='1'!$C$7 を手入力します。
次にB2の右下隅(フィルハンドルが表示される黒い十字)をドラッグしてB3〜B13まで選択すると、数式が ='2'!$C$7、='3'!$C$7...と自動で連番化されます。

C列(C2に='1'!$C$8)も同様にB列全体を選択後、
右クリック→「コピー」→C2右クリック→「形式を選択して貼り付け」→「数式」を選び、C2〜C13に貼り付けると参照行が自動調整されます。

他の行でも同じ要領で、1列目だけ手入力後コピー適用可能です。

ショートカット活用
Ctrl+Cで最初の数式をコピーし、貼り付け範囲(例:B3:B13)を選択後Ctrl+Dで下方向詰め込み。

列全体ならフィルハンドルをダブルクリックで隣接データまで自動コピー(空セル時は注意)。

VBA好きなら↓

Sub test()

    Dim ws As Worksheet
    Dim targetSheet As String  ' 集計シートの名前(例: "年間集計")
    Dim startCol As String     ' 開始列(例: "B")
    Dim startRow As Long       ' 開始行(例: 2)
    Dim endRow As Long         ' 終了行(例: 13)
    Dim refRow As Long         ' 各月シートの参照行番号(例: 7, 8...)
    Dim i As Long

    ' 設定値 - 必要に応じて変更
    targetSheet = "Sheet1"  ' 集計シートの名前
    startCol = "B"          ' 開始列
    startRow = 2            ' 開始行
    endRow = 13             ' 終了行(12ヶ月分)
    refRow = 7              ' 最初に参照する行番号

    Set ws = ThisWorkbook.Sheets(targetSheet)

    Application.ScreenUpdating = False
    Application.Calculation = xlCalculationManual

    For i = 0 To endRow - startRow
        Dim monthNum As String
        Dim formula As String
        monthNum = i + 1
        formula = "='" & monthNum & "'!$C$" & (refRow + i)
        ws.Range(startCol & (startRow + i)).Formula = formula
    Next i

  For colOffset = 0 To 5 ' C列以外も(0ならC列のみ)

    formula = "='" & monthNum & "'!$" & Chr(67 + colOffset) & "$" & (refRow + i)
  Next

    Application.Calculation = xlCalculationAutomatic
    Application.ScreenUpdating = True

    MsgBox "数式入力を完了しました!(B2:B13に'1'!$C$7〜'12'!$C$18)"
End Sub

(稚拙) 2026/01/17(土) 12:23:54


 質問者さんへ: 
 使用しているExcelのバージョンを書いて下さい。使える道具が変わってきますので。

 稚拙さんへ: 
 手作業での方法はご自分で動作確認されたものでしょうか。

(xyz) 2026/01/17(土) 13:36:50


面白いと思うのは、初心者と銘打つ方はこぞって手を抜こうとしようするのはなぜだ
面倒くさいならやめればいいのに・・・・
ヒントになるかどうか知らないけど、まずは文字列をつくる。
場合によってなそれらを組み合わせて好みの文字列にする
最後にそれを数式として認識させる
面倒くさいでしょうが・・・
因みに面倒な数式を書き込んでいるうちに名案が浮かぶ場合もある
(なぞ?) 2026/01/17(土) 14:19:17

 =INDIRECT("'" & ROW(A1) & "'!$C$7")
 などとして下にコピーする方法があると思います。
(xyz) 2026/01/17(土) 14:24:12

みなさん、ありがとうごさいます。稚拙さん フィルハンドルを用いたコピーは自分で最初に試したのですが、最初のセルと同じ数式がコピーされるだけでしたので質問した次第です。 VBAは敷居が高いので今はパスです。 なぞさん、手入力すると集計表には1月〜12月の各項目で360カ所のセルがあるため、悩んでいました。
xyzさん エクセルのバージョンは2024です。入力したのですが消えていました。あとwebでも検索してindirect関数も試してみたのですが、エラーでした。(#REF!)になってしまいました。

(初心者) 2026/01/17(土) 15:06:29


>(#REF!)になってしまいました。
シート名を1月のようにしていませんか。
(xyz)さんの式は、='1'!$C$7 を基本としています。

(?) 2026/01/17(土) 15:28:33


 (?)さんフォローありがとうございました。

 一番ありがちなのは、シート名の前後に半角スペースなどが混入しているケースです。
 確認して下さい。
 私は実際に動作することを確認したうえで、投稿しています。

(xyz) 2026/01/17(土) 16:55:16


みなさん、ありがとうございます。全部で13枚のシート(1枚目が集計表、2枚目から13枚目までがそれぞれ1月から12月のデータ)の1枚目の集計表のセルのたとえば1月の給与収入欄のセルはC5で12月はN5になっています。 改めて indirect 関数の式を入れると今度は値が0となって表示されました。以下コピーしても同様です。
ちなみに同じ行の右方向への入力なので rowではなくcolumnでやってみましたが何が問題なのでしょうか
(初心者) 2026/01/17(土) 18:17:29

 > (#REF!)になってしまいました。
 この件は結局どういうことだったのですか?原因です。
 #REFは出なくなったのですか?どのシートがエラーになっていて、
 実際のシート名はなんだったのですか?
 ひとつひとつ、お互いに情報をきちんとやりとりしませんか?

 集計表のどのセルに、どのような式を入れたのか、はっきり書いてください。
 きちんと書いてくれないと、どんな間違いをしているのか分からないです。

(xyz) 2026/01/17(土) 18:24:44


 >1月の給与収入欄のセルはC5で12月はN5になっています。 
シートによりセル参照が変わるの?
1月···C5
2月···D5
·
·
11月··M5
12月··N5
ですか?
=INDIRECT(ADDRESS(5,ROW(A3),,,ROW(A1)))
(はてな) 2026/01/17(土) 18:39:43

 2024なら
=INDEX(VSTACK('1:12'!C5:N5),SEQUENCE(12),SEQUENCE(12))
コピペ不要
でも可能だと思います
(はてな) 2026/01/17(土) 19:02:15

 改めて最初の質問を読むと、
 > たとえば、集計表のB2〜B13のセルには ='1'!$C$7 〜 ='12'!$C$7 の数式を入れて、
 > その下の行のC2〜C13には ='1'!$C$8 〜 ='12'!$C$8 以下同様の数式がかなりあります。
 となっていて、
 ・行
 ・列
 の考え方が理解されていないようです。
 あらためて、正確に、実行したいことを説明し直して貰えますか?

       A列      B列       C       D
 1行
 2行
 3行
 という形式で説明して下さい。
 (投稿にあたっては、行の先頭を半角スペースにするとレイアウトが崩れにくいです。)

(xyz) 2026/01/17(土) 19:11:20


みなさん、わかりずらい説明で申し訳ありません。 #REF!の原因は1月から12月のシートのシート名に空白スペースがあったためでした。いったん消去して入力し直しました。あと集計上の体裁で作り直し、以下のようになっています。1月〜12月のシートの名前はそれぞれ 1〜12 にしてあります。

    B列   C列   D列......... N列

5行目 項目名1 ='1'!$C$7 '2'!$C$7.....'12'!$C$7

6行目 項目名2 ='1'!$C$8 '2'!$C$8.....'12'!$C$8

7行目 項目目3 ='1'!$C$9 '2'!$C$9.....'12'!$C$9

上のように形になるようにしたいのです。
(初心者) 2026/01/17(土) 19:41:12


 1) C5:
    ="^'"&COLUMN(A1)&"'!c"&6+ROW(A1)
    と入力
 2) 右方・下方へフィル
 3) 全対をコピーして値貼り付け
 4) Ctl+H で検索文字列に ^, 置換文字列に = で全て置換

 Indirectなら(自分自身では使用しませんが)
 C5:
    =INDIRECT("'"&COLUMN(A1)&"'!c"&6+ROW(A1))
 として右方・下方へフィル
(jindon) 2026/01/17(土) 20:19:12

エラーの原因がわかりました。私はC5のセルから始まるので数式中の(A1)を(C5)としたせいでした。今度はうまくコピーできました。みなさま貴重なご意見ありがとうございました。
(初心者) 2026/01/17(土) 20:27:15

シート名の件は了解しました。

  (1)
 INDIRECTを使う方式であれば、
 C5セルに
 =INDIRECT("'" & COLUMN(A1) & "'!$C$7")
 として右にコピーします。他の行も同じです。

 (2)
 はてなさん提案のHSTACK関数を使うなら、
 集計表のC5:N7をいったん消去して、何も書かれていない状態にしてください。
 そのうえで、
 C5セルに
 =HSTACK('1:12'!C7:C9)
 と入れると、求めるものになると思います。
 C5:N7の他のセルはスピルして表示されると思います。

 # 衝突しましたので重複していたら失礼。

(xyz) 2026/01/17(土) 20:35:18


xyzさん ありがとうございました。課題は解決したのですが、なぞ?さんがおっしゃた「ヒントになるかどうか知らないけど、まずは文字列をつくる。場合によってなそれらを組み合わせて好みの文字列にする 最後にそれを数式として認識させる」とはこの indirect関数のことでしょうか?
(初心者) 2026/01/17(土) 21:25:25

>indirect関数のことでしょうか?
indirect関数とは限りません。
他の関数もindirect関数のようにして組み合わせるってこと。
(?) 2026/01/17(土) 21:42:36

 INDIRECT関数は「揮発性関数」のひとつであり、
 ワークシート上のどこかのセルが変化すると、
 それがINDIRECT関数の中身に直接関係がなくても再計算が発生します。
 ですからそれを多用したりすると動作が遅くなることが考えられ、要注意です。
 (私も実際に使ったことはありません。まあ、Excel自体を触ることは殆ど無いのですけど)
 できるだけINDIRECT関数を使わずにすむなら、そのほうがよいでしょう。

 =HSTACK('1:12'!C7:C9)は少し勉強しないといけませんが、簡便ですし、使い勝手がよいと思います。

(xyz) 2026/01/17(土) 21:53:26


アドバイスありがとうございました。参考にしていきます。
(初心者) 2026/01/17(土) 23:02:19

こちらの記事が参考になるでしょう。

[ExcelのVSTACK関数/HSTACK関数とは?VBAを使わずに複数シートのデータを 1 シートで表示]
https://exceljoshi.cocoo.co.jp/media/excel-vstack-hstack

(xyz) 2026/01/18(日) 08:29:26


xyzさん、ありがとうございました。
(初心者) 2026/01/19(月) 12:36:49

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.