• 締切済み

EXCELに関する質問

いつもお世話になっております。 下記のような作業をマクロで行いたいのですが・・・ 1つのEXCELファイルの中に1日1sheetのデータが入っています。 (1月の場合1日~31日の31sheet) それぞれのシートには決まった番地(例えばA1)に欲しい値があり その値を別のシートに1日~31日までA1~A31に並べて転記したいと考えています。 よろしくお願いします。

みんなの回答

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

この質問はシート名がカギを握っていることを気づいていない (例) 日報1 日報2 日報3 日報4 日報5 のようなシート名になっているなら 日報1 と入れて+ハンドルを出し下へ引っ張れば 日報1 日報2 ・・・ 日報21 日報22 日報23 ・・・ が出来上がる。 B2に =INDIRECT(A2& "!A1")と入れて下方向に式を複写すると 日報1 12 日報2 13 日報3 14 のようにA1セルの値が出る。 しかし日付順というならシート名に日付要素がないと並べられない。 ーーー VBAでやるとき、考えている月分は何で判断すればよいのか。 その月分しかシートはないのか。 これもA1セルの値を抜き出した後日付順に並べるには、手がかりは何か。が書かれていない。 集約シートSheet1 日々のシート、上記の例、他月含まないブックなら Sub test01() i = 1 For Each sh In Worksheets If sh.Name <> "Sheet1" Then Sheet1.Cells(i, "A") = sh.Name Sheet1.Cells(i, "B") = sh.Range("A1") i = i + 1 End If Next End Sub

  • ham_kamo
  • ベストアンサー率55% (659/1197)
回答No.2

マクロで、と質問文に書いてあるので、とりあえずマクロで書いてみました。シート名は○日(○は半角で1~31)と仮定しています。標準モジュールに置いて、集計用のシートを表示した状態で実行してください。 Sub Sample()  Dim i As Integer  For i = 1 To 31   ActiveSheet.Cells(i, 1).Value = Worksheets(CStr(i) & "日").Cells(1, 1).Value  Next End Sub

回答No.1

とりあえず関数で。シート名が1日~31日として、 A1:=INDIRECT(ROW()&"日!$A$1") 下にコピーします。

関連するQ&A