複数ファイル内に記載された評価を、1シートに集計する | |
---|---|
[194125] 複数ファイル内に記載された評価を、1シートに集計する- ■親トピック/記事引用/メール受信=OFF■ □投稿者/ nil -(2021/09/06(04:53)) □U R L/ 以下のようなマクロを作成したいのですが、 アウトプットファイル(集計)の作成に苦労しています。 (複数の集計項目があるため…) 私はマクロの修正は何度か行ったことがあるのですが、 1から作成するのは初めてで、只今 マクロ猛勉強中です。 どなたかサンプルコードを頂けないでしょうか? よろしくお願い致します。 ■ インプットファイル 〇 学生同士、相手の作品を評価シートに記載する。 〇 評価シートはエクセルファイルで、1件1葉である。 〇 1人が行う評価は月に0件の場合もあれば、複数件の場合もある(上限なし) 〇 インプットファイルは同じフォルダ配下にあります <サンプル(EXCEL) > ファイル名 → 鈴木2021.9.10.xlsx A B C 1 評価者 被評価者 評価 2 鈴木 田中 〇 ■ アウトプットファイル> 〇 月ごとに・・・ 評価を行った件数 評価をされた件数 を一覧にする <サンプル(EXCEL) > ファイル名 → 一覧.xlsx シート名 → 8月, 9月, 10月・・・ A B C D E 1 評価者 自分が評価した件数 自分が評価された件数 2 〇 △ × 3 鈴木 3 3 2 1 4 田中 5 1 0 0 5 伊藤 2 0 5 4 6 ・・・・・ ++++++++++++++++++++ OS ⇒OTHER Version⇒OTHER ++++++++++++++++++++ |
[194126] Re[1]: 複数ファイル内に記載された評価を、1シートに集計する- ■記事引用/メール受信=OFF■ □投稿者/ nil -(2021/09/06(06:53)) □U R L/ すみません。 インプットファイルのファイル名を以下の通り訂正させてください。 (1人が行う評価は1日に複数件の場合もあるため) (誤) ファイル名 → 鈴木2021.9.10.xlsx (正) ファイル名 → 鈴木2021.9.10_01.xlsx 鈴木2021.9.10_02.xlsx |
[194127] Re[2]: 複数ファイル内に記載された評価を、1シートに集計する- ■記事引用/メール受信=OFF■ □投稿者/ マナ -(2021/09/06(17:45)) □U R L/ > シート名 → 8月, 9月, 10月・・・ 年は、2021年と考えてよいですか。 |
[194128] Re[3]: 複数ファイル内に記載された評価を、1シートに集計する- ■記事引用/メール受信=OFF■ □投稿者/ マナ -(2021/09/06(21:31)) □U R L/ たたき台です。 Sub test() Dim fso As Object, f As Object Dim dic As Object Dim ws As Worksheet, ym As String Dim p As String, w() Dim 評価者 As String, 被評価者 As String, 評価 As String Dim n As Long Set fso = CreateObject("scripting.filesystemobject") Set dic = CreateObject("scripting.dictionary") Set ws = ActiveSheet '★アウトプットファイル(シート) ym = "2021." & Val(ActiveSheet.Name) p = "D:\test\" '★インプットファイルの場所 ReDim w(1 To fso.getfolder(p).Files.Count, 1 To 5) For Each f In fso.getfolder(p).Files If LCase(f.Name) Like "*" & ym & ".*.xlsx" Then With Workbooks.Open(f.Path).Sheets(1) 評価者 = .Range("A2").Value 被評価者 = .Range("B2").Value 評価 = .Range("C2").Value .Parent.Close False End With n = InStr("**〇△×", 評価) If n > 2 Then If Not dic.exists(評価者) Then dic(評価者) = dic.Count + 1 w(dic(評価者), 1) = 評価者 End If If Not dic.exists(被評価者) Then dic(被評価者) = dic.Count + 1 w(dic(被評価者), 1) = 被評価者 End If w(dic(評価者), 2) = w(dic(評価者), 2) + 1 w(dic(被評価者), n) = w(dic(被評価者), n) + 1 End If End If Next With ws.UsedRange.Offset(2) .ClearContents .Resize(dic.Count, 5).Value = w End With End Sub この記事にはVBAのコードが含まれています。 緑の太文字→注釈 茶色の太文字→条件分岐 赤の太文字→ループ 青の太文字→その他 |
[194129] Re[4]: 複数ファイル内に記載された評価を、1シートに集計する- ■記事引用/メール受信=OFF■ □投稿者/ マナ -(2021/09/06(23:22)) □U R L/ ↑が難しければ、マクロを使わずに 1)一覧.xlsxに作業用シートを追加 2)Power Queryで、インプットファイルの全データを1)に集約 3)COUNTIFS関数で、件数を算出 というのが簡単です。 |
[194142] Re[5]: 複数ファイル内に記載された評価を、1シートに集計する- ■ / 記事引用/メール受信=OFF■ □投稿者/ nil -(2021/09/09(00:45)) □U R L/ マナさん、 サンプルコード意図したように動きました! 年は2021年度を集計という条件です。 いま頂いたコードを勉強中です。取り急ぎお礼を言わせてください。 分からないところが出てきたら質問させてください。 PowerQueryという手もあるんですね。こちらも調べてみます! ++++++++++++++++++++ OS ⇒OTHER Version⇒OTHER ++++++++++++++++++++ |
[194621] Re[6]: 複数ファイル内に記載された評価を、1シートに集計する- ■ / 記事引用/メール受信=OFF■ □投稿者/ nil -(2022/01/16(17:06)) □U R L/ こんにちは。 アウトプットの形式が以下のように変更になってしまいました。 A〜D列は変更不可。 E〜M列も別のデータ(計算式等)が入っています。 ■ アウトプットファイル> A B C D N O P Q 8 自分が評価された件数 9 項番 課名 役職 名前 自分が評価した件数 良好 普通 その他 10 1 役員 社長 鈴木 11 1 総務 部長 田中 12 2 総務 課長 山田 13 3 総務 係長 久保田 14 4 総務 主任 吉田 15 1 経理 部長 山田 16 2 経理 課長 古谷 教えて頂いたマクロを色々なサイトを見ながら研究して(完全に理解できたとは言い難いですが…)以下部分を変更すれば良いのは分かったのですが、どう直したら良いかが分かりません。 With ws.UsedRange.Offset(2) .ClearContents .Resize(dic.Count, 5).Value = w End With 教えていただけないでしょうか? 何度もごめんなさい。 もう1つ 勉強のために確認させて頂きたいのですが n = InStr("**〇△×", 評価) というコードがありますが ( ※の部分は n = InStr("**良好普通その他", 評価) に変更します) "**" は何故必要なのでしょうか? この記事にはVBAのコードが含まれています。 緑の太文字→注釈 茶色の太文字→条件分岐 赤の太文字→ループ 青の太文字→その他 ++++++++++++++++++++ OS ⇒OTHER Version⇒OTHER ++++++++++++++++++++ |
[194623] Re[7]: 複数ファイル内に記載された評価を、1シートに集計する- ■記事引用/メール受信=OFF■ □投稿者/ マナ -(2022/01/16(18:50)) □U R L/ >アウトプットの形式が以下のように変更になってしまいました。 インプットファイルは変わらなのですか? |
[194624] Re[8]: 複数ファイル内に記載された評価を、1シートに集計する- ■記事引用/メール受信=OFF■ □投稿者/ マナ -(2022/01/16(20:27)) □U R L/ >n = InStr("**〇△×", 評価) 評価が、○なら3文字目、△なら4文字目、×なら5文字目という意味です 以下のほうがわかりやすかったですね。 Select Case 評価 Case "○": n = 3 Case "△": n = 4 Case "×": n = 5 Case Else: n = 0 End Select この記事にはVBAのコードが含まれています。 緑の太文字→注釈 茶色の太文字→条件分岐 赤の太文字→ループ 青の太文字→その他 |
[194625] Re[9]: 複数ファイル内に記載された評価を、1シートに集計する- ■ / 記事引用/メール受信=OFF■ □投稿者/ nil -(2022/01/17(03:09)) □U R L/ マナーさん、こんばんは お返事ありがとうございます! インプットファイルは ○が『良好』に、△が『普通』に、×が『その他』に 変わりました。 Instrの解説ありがとうございます! だいぶ勘違いをしてました(汗) ++++++++++++++++++++ OS ⇒OTHER Version⇒OTHER ++++++++++++++++++++ |
[194632] Re[10]: 複数ファイル内に記載された評価を、1シートに集計する- ■ / 記事引用/メール受信=OFF■ □投稿者/ nil -(2022/01/17(18:25)) □U R L/ マナさん、こんばんは。 インプットファイルは 正確に言うと以下の箇所も変更されています。 (プログラム上、自分で書き換えられる範囲なので 前回投稿でお伝えしませんでした。ごめんなさい) ■変更点@ 評価者は A2→AD4 被評価者は B2→AD7 評価は C2→AD9 ■変更点A ファイル名は 鈴木2021.9.10_01.xlsx から 鈴木健一2021.9.10_01.xlsx へ (同じ苗字の人がいるため) ++++++++++++++++++++ OS ⇒OTHER Version⇒OTHER ++++++++++++++++++++ |
[194633] Re[11]: 複数ファイル内に記載された評価を、1シートに集計する- ■記事引用/メール受信=OFF■ □投稿者/ マナ -(2022/01/17(21:34)) □U R L/ 配列w の1次元目のインデックスを 愛とプットファイルの並びとすればよいです。 Set ws = ActiveSheet '★アウトプットファイル(シート) For Each c In ws.Range("C10", ws.Range("C10").End(xlDown)) 評価者 = c.Value dic(評価者) = dic.Count + 1 Next ReDim w(1 To dic.Count, 1 To 4) この記事にはVBAのコードが含まれています。 緑の太文字→注釈 茶色の太文字→条件分岐 赤の太文字→ループ 青の太文字→その他 |
[194725] Re[12]: 複数ファイル内に記載された評価を、1シートに集計する- ■ / 記事引用/メール受信=OFF■ □投稿者/ nil -(2022/02/08(13:56)) □U R L/ こんにちは。 色々試してみましたが、ダメでした・・・ 以前マナーさんから以下のアドバイスを頂きましたが、理解できませんでした。 >配列w の1次元目のインデックスを >iとアウトプットファイルの並びとすればよいです。 以下のVBAを具体的にどこへ入れれば良いのでしょうか? 時間が経ってしまい大変申し訳ありませんが、教えてください。 よろしくお願い致します。 Set ws = ActiveSheet '★アウトプットファイル(シート) For Each c In ws.Range("C10", ws.Range("C10").End(xlDown)) 評価者 = c.Value dic(評価者) = dic.Count + 1 Next ReDim w(1 To dic.Count, 1 To 4) この記事にはVBAのコードが含まれています。 緑の太文字→注釈 茶色の太文字→条件分岐 赤の太文字→ループ 青の太文字→その他 ++++++++++++++++++++ OS ⇒OTHER Version⇒OTHER ++++++++++++++++++++ |
このトピックに書きこむ |
---|