- ベストアンサー
エクセル2010 複数シートでの関数を教えて下さい
- みんなの回答 (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に変更して下さい。
その他の回答 (1)
- bunjii
- ベストアンサー率43% (3589/8249)
関数では難しいようです。 作業用の領域を使えばできないことはありません。 仮に乙を「勤怠」と言うシート名とすれば、そのシートのE3から右へシート名(氏名)を右へ列記します。 E4セルに次の数式を入力し右と下へオートフィルでコピーします。 =IF(INDIRECT(E$3&"!"&ADDRESS(ROW(),COLUMN($C3),4,1))="休",E$3&" ","")&F4 C4セルには次の数式を使えば無駄な空白が削除され目的のとおりになります。 C4セルを下へコピーしてください。 =TRIM(E4) 貼付画像はExcel 2013で検証した結果ですがExcel 2010でも再現できると思います。 尚、検証では8名としましたが必要人数分のシートでも処理可能と思います。
お礼
関数では難しいのですね。 自分の環境で検証してみたのですが、手順が間違っていたのか、80名近くいるためか、うまくいかず今回はNo.2さんをベストアンサーにさせていただきました。 ありがとうございました!
お礼
お礼が遅くなってしまいすみません! 教えて頂いたもので、バッチリ解決しました! 仕事の効率がすごく上がりました。使わせていただいております! ありがとうございました!