解決済みの質問
Excelで同じフォーマットの日報をまとめたいのです。何件か似たようなご質問もあったように思ったのですが、ちょっとわかりませんでした。
どうぞ教えてください。
できればExcelの機能で出来ればと思っています。
もし他の方法なら、それでも構いません!
○ファイルは一つで、シートが分かれています。
・・・シート1~シート30
○シートのフォーマット
セルD2に「日付」、F2に「場所」
C4、C6、C8、C10、C12に日報の内容が入っています。
○この各シートをシート31に一括まとめたいのです。
集計等は必要ありません。
○まとめるシートのフォーマットイメージ
日付│場所│C4│C6│C8│C10│C12
シート1 5/2│・・│・・・・
シート2 5/3│・・│・・・・
・
・
・
シート30
すいません。どなたか教えていただけますか。
どうぞよろしくお願いします。
投稿日時 - 2005-05-11 15:02:27
こんにちは。
indirectワークシート関数を使用します。
下記の手順でやってみましょう。
(1)A2~A31に「シート1」~「シート31」と入力します。必ずシート名と合致させて下さい。
(2)B1~H1に「日付」「場所」「C4」…と入力します。
準備おわり。
(3)B2セルに、下記関数を入力します。
「=indirect($a2 & "!D2")」
(4)C2セルに、下記関数を入力します。
「=indirect($a2 & "!F2")」
(5)D2セルに、下記関数を入力します。
「=indirect($a2 & "!" & B$1)」
一行終わり。
(6)D2セルの内容をE2~H2にコピーします。
(7)B2~H2セルの内容を、下の行にがーっとコピーします。
できあがり。
indirectワークシート関数とは文字列で指定したセルの値を参照する関数です。
(3)では、
「=indirect($a2 & "!D2")」
→「=indirect("シート1" & "!D2")」
→「=indirect("シート1!D2")」
ということをやっています。
投稿日時 - 2005-05-11 15:28:21
お礼
ありがとうございます!
出来ました。文字列が多いシートであるため、非常に役立ちました。
(3)と(4)の作業を行ない、進めたのですが、
ちなみに (5)の「"!" & B$1」というのは、どういうことを行なっているのでしょうか。
投稿日時 - 2005-05-12 15:56:48
3人が「このQ&Aが役に立った」と投票しています
ベストアンサー以外の回答(2件中 1~2件目)
こんばんは。遅くなりました。
すみません。(5)、間違っていましたね(汗
下記に読み替えてください。
(5)D2セルに、下記関数を入力します。
「=indirect($a2 & "!" & D$1)」
ちなみに(5)では、
「=indirect($a2 & "!" & D$1)」
→「=indirect("シート1" & "!" & "C4")」
→「=indirect("シート1!C4")」
ということをやっています。
混乱させてしまいましたことをお詫び申し上げます。
投稿日時 - 2005-05-13 02:53:44
お礼
ありがとうございました!
投稿日時 - 2005-05-13 14:30:49
動作
日報シート Sheet1 から Sheet数字 まで
集計シート にデータをコピーします
事前設定
日報シート名 = "*Sheet*#*"
日報シート名が シート11 なら "*シート*#*"
# は数字 * はワイルドカード
集計先シート を選んでから操作するなら
Set 集計先シート = ActiveSheet を有効しておく
集計先シートの シート名を固定するなら
'Set 集計先シート = Sheet("集計シート") の'を外す
見出し = / 区切りで適当に設定
注意 集計先シート は毎回クリアします
マクロ VBエディタを開き 標準モジュールを追加して
標準モジュールに貼り付け
↓ ↓
Sub 日報シートのデータを集める()
日報シート名 = "*Sheet*#*" '日報シート名に併せて検討 *
Set 集計先シート = ActiveSheet
'Set 集計先シート = Sheet("集計シート")'
With 集計先シート
.Cells.Clear '集計先シートをクリア
見出し = "日付/場所/c4/c6/c8/c10/c12"
見出し = Split(見出し, "/")
データ設定行 = 1
.Range(.Cells(データ設定行, 1), .Cells(データ設定行, 7)) = 見出し
For Each シート In Worksheets
If 集計先シート.Name <> シート.Name Then
If シート.Name Like 日報シート名 Then '集計対象シート名を確認
データ設定行 = データ設定行 + 1
'日報データ読み出し
日報データ = シート.Range("D2").Value & vbTab & _
シート.Range("F2").Value & vbTab & _
シート.Range("C4").Value & vbTab & _
シート.Range("C6").Value & vbTab & _
シート.Range("C8").Value & vbTab & _
シート.Range("C10").Value & vbTab & _
シート.Range("C12").Value
日報データ = Split(日報データ, vbTab)
'データ書き出し
.Range(.Cells(データ設定行, 1), .Cells(データ設定行, 7)) = 日報データ
End If
End If
Next
End With
End Sub
投稿日時 - 2005-05-11 17:28:07
お礼
今回は#1のやり方でさせていただきました。
また必要なときもあると思います。参考にさせていただきます。
ご連絡ありがとうございました。
投稿日時 - 2005-05-12 16:08:25