• ベストアンサー

エクセル2010 複数シートでの関数を教えて下さい

画像の乙シートを作りたいと思っています。 甲シートは約80枚あります。C列に「休」という文字か、出席を表す「1」という文字が入るようになっています。また約80枚のシート名には、それぞれ氏名が入力されています。 甲シートのC列に「休」と書いてあれば、対応した日の乙シートC列に、自動で名前(シート名+スペース)が出るようにしたいです。 可能でしょうか?よろしくお願いします。

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

  • ベストアンサー
  • mar00
  • ベストアンサー率36% (158/430)
回答No.2

関数ではないですが VBAの一例です。 Sub Macro1() Dim Ws01 As Worksheet, Ws02 As Worksheet Dim myRow As Integer, i As Integer, j As Integer Set Ws01 = Worksheets("乙") myRow = 3 Ws01.Range("C" & myRow & ":C" & myRow + 30).ClearContents For i = 1 To Worksheets.Count - 1 Set Ws02 = Worksheets(i) For j = myRow To myRow + 30 If Ws02.Range("C" & j) = "休" Then Ws01.Range("C" & j) = Ws01.Range("C" & j) & Ws02.Name & " " End If Next j Next i End Sub Set Ws01 = Worksheets("乙")は乙のシート名に myRow = 3は1日の行にそれぞれ変更して下さい。 For i = 1 To Worksheets.Count - 1は乙のシートが一番最後にある時なので 一番最初にある場合は For i = 2 To Worksheets.Countに変更して下さい。

muka1985
質問者

お礼

お礼が遅くなってしまいすみません! 教えて頂いたもので、バッチリ解決しました! 仕事の効率がすごく上がりました。使わせていただいております! ありがとうございました!

その他の回答 (1)

  • bunjii
  • ベストアンサー率43% (3589/8249)
回答No.1

関数では難しいようです。 作業用の領域を使えばできないことはありません。 仮に乙を「勤怠」と言うシート名とすれば、そのシートのE3から右へシート名(氏名)を右へ列記します。 E4セルに次の数式を入力し右と下へオートフィルでコピーします。 =IF(INDIRECT(E$3&"!"&ADDRESS(ROW(),COLUMN($C3),4,1))="休",E$3&" ","")&F4 C4セルには次の数式を使えば無駄な空白が削除され目的のとおりになります。 C4セルを下へコピーしてください。 =TRIM(E4) 貼付画像はExcel 2013で検証した結果ですがExcel 2010でも再現できると思います。 尚、検証では8名としましたが必要人数分のシートでも処理可能と思います。

muka1985
質問者

お礼

関数では難しいのですね。 自分の環境で検証してみたのですが、手順が間違っていたのか、80名近くいるためか、うまくいかず今回はNo.2さんをベストアンサーにさせていただきました。 ありがとうございました!

関連するQ&A