No.5ベストアンサー
- 回答日時:
ピボットテーブル+ワークシート関数+手作業で・・・
(1)行=「名前」、列=「曜日」、データ=「名前」で新規シートにピボットテーブル作成。
A列に「名前」、B~H列に「曜日」、I列に「総計」で、3行目からがデータの行の表ができると思います。(以下は、その前提で・・)
(2)B2~H2のセルを選択・コピーし、J2~P2のセルを選択・貼付け。
(ピボットテーブルの列のタイトルを、真横のセルにコピー・貼付け)
(3)J3のセルに「=IF(B3="","",$A3)」と入力。
(ピボットテーブルの該当セルが空欄でなければ名前(A列)を表示)
(4)J3のセルをコピーし、K3~P3のセルまで貼付け。
((3)を一週間分作成→これで1名分完成)
(5)J3~P3のセルを選択・コピーし、J4~P?(「?」はピボットテーブルのデータの最後の行数になります。)のセルを選択・貼付け。
(これで全員分作成)
(6)J列~P列を選択・コピーし、その場所へ「形式を選択して貼付け」で値を貼付け。
(計算式を消去)
こうすれば、J2~P?のセルに、希望の表ができあがると思います。
文章にするとややこしいですが、やってる事は単純です。
マクロを使わずに済ませたいなら、こんな方法でいかがでしょうか?
No.4
- 回答日時:
すみません。
マクロのコードで記述ミスをしてしまいました。No3のマクロではなく、下記のマクロをコピーしてNo3の手順で実行してみて下さい。記述ミスをしてしまい、申し訳ございませんでした。
Sub Narabekae()
Dim myCell As String
Dim i As Integer
Dim myRange As Range
Dim myAddress As String
myCell = Cells(Rows.Count, 2).End(xlUp).Address
For i = 1 To 5
Select Case i
Case 1
Range("D1").Value = "月曜日"
With Range("B1:" & myCell)
Set myRange = .Find("月", lookat:=xlWhole)
If Not myRange Is Nothing Then
myAddress = myRange.Address
Do
Cells(Rows.Count, 4).End(xlUp).Offset(1, 0).Value = myRange.Offset(0, -1).Value
Set myRange = .FindNext(myRange)
Loop While Not myRange Is Nothing And myRange.Address <> myAddress
End If
End With
Case 2
Range("E1").Value = "火曜日"
With Range("B1:" & myCell)
Set myRange = .Find("火", lookat:=xlWhole)
If Not myRange Is Nothing Then
myAddress = myRange.Address
Do
Cells(Rows.Count, 5).End(xlUp).Offset(1, 0).Value = myRange.Offset(0, -1).Value
Set myRange = .FindNext(myRange)
Loop While Not myRange Is Nothing And myRange.Address <> myAddress
End If
End With
Case 3
Range("F1").Value = "水曜日"
With Range("B1:" & myCell)
Set myRange = .Find("水", lookat:=xlWhole)
If Not myRange Is Nothing Then
myAddress = myRange.Address
Do
Cells(Rows.Count, 6).End(xlUp).Offset(1, 0).Value = myRange.Offset(0, -1).Value
Set myRange = .FindNext(myRange)
Loop While Not myRange Is Nothing And myRange.Address <> myAddress
End If
End With
Case 4
Range("G1").Value = "木曜日"
With Range("B1:" & myCell)
Set myRange = .Find("木", lookat:=xlWhole)
If Not myRange Is Nothing Then
myAddress = myRange.Address
Do
Cells(Rows.Count, 7).End(xlUp).Offset(1, 0).Value = myRange.Offset(0, -1).Value
Set myRange = .FindNext(myRange)
Loop While Not myRange Is Nothing And myRange.Address <> myAddress
End If
End With
Case 5
Range("H1").Value = "金曜日"
With Range("B1:" & myCell)
Set myRange = .Find("金", lookat:=xlWhole)
If Not myRange Is Nothing Then
myAddress = myRange.Address
Do
Cells(Rows.Count, 8).End(xlUp).Offset(1, 0).Value = myRange.Offset(0, -1).Value
Set myRange = .FindNext(myRange)
Loop While Not myRange Is Nothing And myRange.Address <> myAddress
End If
End With
End Select
Next i
End Sub
No.3
- 回答日時:
早速補足をしていただき有難うございました。
やっとあなた様のやりたいことがわかりました。もしかしたら、ピポットテーブルで実行するすることが可能なのかもしれませんが、私はできないと思いますのでVBAでマクロを書いてみました。
Sub Narabekae()
Dim myCell As String
Dim i As Integer
Dim myRange As Range
Dim myAddress As String
myCell = Cells(Rows.Count, 2).End(xlUp).Address
For i = 1 To 5
Select Case i
Case 1
Range("D1").Value = "月曜日"
With Range("B1:" & myCell)
Set myRange = .Find("月", lookat:=xlWhole)
If Not myRange Is Nothing Then
myAddress = myRange.Address
Do
Cells(Rows.Count, 4).End(xlUp).Offset(1, 0).Value = myRange.Offset(0, -1).Value
Set myRange = .FindNext(myRange)
Loop While Not myRange Is Nothing And myRange.Address <> myAddress
End If
End With
Case 2
Range("E1").Value = "火曜日"
With Range("B1:" & myCell)
Set myRange = .Find("火", lookat:=xlWhole)
If Not myRange Is Nothing Then
myAddress = myRange.Address
Do
Cells(Rows.Count, 5).End(xlUp).Offset(1, 0).Value = myRange.Offset(0, -1).Value
Set myRange = .FindNext(myRange)
Loop While Not myRange Is Nothing And myRange.Address <> myAddress
End If
End With
Case 3
Range("F3").Value = "水曜日"
With Range("B1:" & myCell)
Set myRange = .Find("水", lookat:=xlWhole)
If Not myRange Is Nothing Then
myAddress = myRange.Address
Do
Cells(Rows.Count, 6).End(xlUp).Offset(1, 0).Value = myRange.Offset(0, -1).Value
Set myRange = .FindNext(myRange)
Loop While Not myRange Is Nothing And myRange.Address <> myAddress
End If
End With
Case 4
Range("G3").Value = "木曜日"
With Range("B1:" & myCell)
Set myRange = .Find("木", lookat:=xlWhole)
If Not myRange Is Nothing Then
myAddress = myRange.Address
Do
Cells(Rows.Count, 7).End(xlUp).Offset(1, 0).Value = myRange.Offset(0, -1).Value
Set myRange = .FindNext(myRange)
Loop While Not myRange Is Nothing And myRange.Address <> myAddress
End If
End With
Case 5
Range("H3").Value = "金曜日"
With Range("B1:" & myCell)
Set myRange = .Find("金", lookat:=xlWhole)
If Not myRange Is Nothing Then
myAddress = myRange.Address
Do
Cells(Rows.Count, 8).End(xlUp).Offset(1, 0).Value = myRange.Offset(0, -1).Value
Set myRange = .FindNext(myRange)
Loop While Not myRange Is Nothing And myRange.Address <> myAddress
End If
End With
End Select
Next i
End Sub
次の手順で操作を実行してみてください。
1.Sub Narabekae()~End Subまでをコピーする。
2.エクセルの新規ブックを開く
3.Alt+F11を押してVBE(visual Basic Editor)を開く
4.画面左側のVBAProjectと書かれてる下のSheet1をダブルクリックする。すると、右側の画面が灰色から白に変わる。
5.白い部分に先程コピーしたコードを貼り付ける。
6.Alt+Qを押してVBEを閉じる
7.Sheet1のメニュバーにあるツールをクリック後マクロ→マクロの順でクリックし、マクロダイアログボックスを表示させる。
8.右側に並んでいるオプションというコマンドボタンをクリックし、カーソルが点滅しているテキストボックスにnと入力後okボタンを押す。
9.右上の×ボタンをクリックしてマクロダイアログボックスを閉じる。
10.Sheet1のA列に名前・B列に曜日を適当に入力し、Ctrl+nを押す。
D1~H1に曜日が入力され、曜日の下にその曜日に対応する人物名が入力されます。
もし、うまく動かなかった時・解らないことがあるときはご遠慮なくお知らせ下さい。私でよろしければ、あなた様のやりたいことが実現できるまで一緒に考えたいと思います。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) ピボットテーブルの表示変更の仕方 初心者なので、的外れな質問だったらすみません 受注日ごとに商品名と 1 2022/04/26 23:23
- その他(Microsoft Office) ピボットテーブルへの集計フィールド挿入 1 2023/02/26 11:33
- その他(ソフトウェア) エクセルの「ピボットテーブル」の名称の意味についての質問です。 2 2023/06/09 21:05
- Excel(エクセル) ピボットテーブル集計表について。ピボットテーブルで集計を行うとき、内訳集計ではなく、通常集計表にする 2 2023/08/10 07:16
- Excel(エクセル) ピボットテーブルについて 列フィールドに複数横並びに項目を表示したい場合、階層毎に表示されてしまう現 2 2022/06/28 00:27
- Excel(エクセル) Excelでの検索結果を含む行だけを表示させたい 5 2023/03/10 17:08
- その他(Microsoft Office) エクセルで表を集計するための機能の種類 4 2023/06/21 15:19
- Excel(エクセル) EXCELピボットテーブル(複数アイテム) 1 2023/04/27 12:15
- Excel(エクセル) エクセルのことで教えてください。 A1セルに、 別シートのA1セルが1のときは「A」、2のときは「B 4 2023/02/24 23:08
- Excel(エクセル) 2列のエクセルの表を変更したい 2 2022/06/30 10:39
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルで特定の文字列が入っ...
-
エクセル マクロ オートフィ...
-
【Excel関数】UNIQUE関数で"0"...
-
Excel ウインドウ枠の固定をす...
-
Excel グラフのプロットからデ...
-
エクセル 上下で列幅を変えるには
-
特定の文字がある行以外を削除...
-
[EXCEL]ボタン押す→時刻が表に...
-
エクセルのセルに指定画像(.jpg...
-
excelのデータで色つき行の抽出...
-
エクセルVBA 最終行を選んで並...
-
結合されたセルをプルダウンの...
-
エクセル マクロで数値が変っ...
-
Excelでカタカナ・ひらがな・英...
-
Excel2007で、指定範囲の行高さ...
-
excel 小さすぎて見えないセル...
-
VBAで色の付いているセルの行削除
-
【マクロ】book1からbook2への...
-
【EXCEL】連続データの個数を抽...
-
A1に入力された文字列と同じ文...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルで特定の文字列が入っ...
-
エクセル マクロ オートフィ...
-
【Excel関数】UNIQUE関数で"0"...
-
結合されたセルをプルダウンの...
-
[EXCEL]ボタン押す→時刻が表に...
-
excel 小さすぎて見えないセル...
-
AのセルとB行を比較して、一致...
-
エクセル マクロで数値が変っ...
-
エクセル 上下で列幅を変えるには
-
excelのデータで色つき行の抽出...
-
Excel グラフのプロットからデ...
-
エクセル2016で時間を入力して...
-
VBAで色の付いているセルの行削除
-
特定の文字がある行以外を削除...
-
連続データが入った行の一番右...
-
エクセルVBA 最終行を選んで並...
-
エクセルのセルに指定画像(.jpg...
-
エクセルで昨日までの日付デー...
-
エクセルマクロで偶数行(又は...
-
A1に入力された文字列と同じ文...
おすすめ情報