« 2025年8月 | トップページ | 2025年10月 »

2025年9月

フォルダの中の複数のExcelファイルの1シートを1つのシートにまとめる方法

1. 前置き

Yahoo!知恵袋に次のような質問がありました。
https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q14320444889

質問内容

スタッフ毎のファイルを1つのファイルにまとめたいです。
ファイルの情報は下記です。
スタッフ毎のファイル
・ブック名:対応状況_⚪︎⚪︎さん.xlsx
・シート名:Sheet1 ←シート名固定
・A1案件名 B1開始時間 C1終了時間

案件名 開始時間 終了時間
A1 9:00 12:00
A2 13:00 17:00

まとめるファイル
・ブック名:責任者管理.xlsx
・シート名:対応状況まとめ

名前 案件名 開始時間 終了時間
Aさん A1 9:00 12:00
Bさん B1 10:00 12:00
Aさん A2 13:00 17:00
Bさん B2 13:00 16:00

全てブックは同じ共有フォルダ内にあります。
A列にはスタッフ名もブック名から反映させたいです。
開始時間を昇順で取得したいです。

VBAマクロでの方法は、前記URLを見てください。Best AnserのVBAは初心者でも分かりやすいです。
VBAが不得意であれば、Power Queryを使用したほうが簡単です。クリック操作で簡単に同じことができます。

2. 手順

1) フォルダの取得

集計Excelブックを開き、[データ]-[データの取得v]-[ファイルから>]-[フォルダから]でフォルダを選択し[開く]-[データの変換]でPower Queryエディタに取込む。

2) 対象ファイルの選択

"Name"列の▼から[テキストフィルタ]-[指定の値を含む]で値に"対応状況_"と入力し[OK]。
⇒集計対象ファイルのみに絞り込まれます。

3) 対象シートの選択

"Content"列の矢印アイコン(ファイルの結合)をクリックし、'Sheet1'を選択し[OK]。
⇒'Sheet1'を集計するステップが作られます。

4) ファイル名から名前を取り出す

"Sourse.Name"列を選択し[変換]-[抽出]-[区切り記号の間のテキスト]で次のように入力し[OK]。
開始区切り記号:_
終了区切り記号:.
⇒ファイル名から_と.の間にある名前が抜き出されます。

5) データ型を設定

Ctrlキーを押しながら"開始時間"と"終了時間"列を選択し、[変換]-[データ型]-[時刻]。
⇒ 適切なデータ型を設定します。なお、表示形式は、後でExcelで設定します。

6) 並び替え

"開始時刻"列の▼で[昇順で並び替え]。
⇒ 並び替えが必要な場合、Power Queryで並び替えをしても良いし、後でExcelで並び替えをしても良いです。

250927pq

7) Excelのテーブル化

[ホーム]-[閉じて読み込むv]-[閉じて次に読み込む]で"テーブル"を選択し[OK]。
⇒ これでExcelにテーブルが読み込まれます。

参考

  • ピボットテーブルに読み込むこともできます。
  • データモデルに追加すると、ピボットテーブルとメジャー(DAX式)を使用して、通常のピボットテーブルではできない集計をすることができます。

8) 元データが変わった時の更新

集計ファイルで[データ]-[すべて更新v]-[すべて更新]です。

参考:ステップ数を少なくする方法

  1. 3)のファイルの結合後に、自動生成された"変更された型"を削除します。
    "名前が変更された列1"の数式バーの"Source.Name"を"名前"に変更します。
  2. 4)で"名前"を選択します。
  3. 5)で[変換]-[データ型]により全ての列の型を設定します。

3. サンプル

ダウンロード - 250927pq.zip

C:\Users\Public\Documents に展開してください。

Power Queryエディタの表示方法

  1. [データ]-[クエリと接続]で右に"クエリと接続"を表示。表示されない時は、もう一度操作する。
  2. 適当なクエリを右クリックし、[編集]でPower Query エディタが開く。
  3. 右の適用したステップの各ステップをクリックし、各ステップでどのように表が加工されるのかを確認する。
  4. 各ステップの右の歯車アイコンで追加した列の式や設定などの確認をする。
  5. [ホーム]-[詳細エディタ]で全体のPower Query Mのコードが表示される。各ステップの数式バーでもコードを確認できる。

4. 関連情報

Power Queryで複数の表を結合する方法(まとめ):2025/11/06:当ブログ
https://bigarrow.tea-nifty.com/blog/2025/11/post-341d5f.html

Power Queryで表をリスト形式に整形する方法(まとめ):2025/11/16:当ブログ
https://bigarrow.tea-nifty.com/blog/2025/11/post-4925ca.html

5. 余談

Yahoo!知恵袋に質問する人はVBAやワークシート関数が好きな人が多いです。VBAやワークシート関数が適切な場合もありますが、Power Query、Power Pivot、メジャー(DAX)が便利な場合もあります。本例の場合は、VBAマクロが苦手な人にとっては、Power Queryが良い手段だと思います。

| | コメント (0)

1レコードが1シート複数行複数列から成る「複数シート」を1つのデータベース形式にする

手動でヘルパークエリを作成して複数のシートを整形して結合する方法です。関数クエリを変更すれば、複数レコードを持つ複数シートの結合にも応用することができます。

1. 入力表

次のような1組(1レコード)の情報を1つのシート毎に格納したExcelブックを、データベース形式に変換します。

会社情報  
社名 住所
A社 東京
担当者 営業日
A営業 月-木
電話 FAX
0120-000-000 0120-100-001
資本 受注
1,000万 100万

特徴

  1. A1セルに表題として"会社情報"と書いてあります。これはデータベースに不要な情報です。
  2. 2行毎に項目と値が縦の組合せで並んでいます。
  3. 独立した項目が複数列あります。
  4. 横に項目と値が並んでいる部分はありません。

2. 集計表

作成するデータベースは、次のような1シートの情報を1行にしたテーブルです。

社名 住所 担当者 営業日 電話 FAX 資本 受注
A社 日本 A営業 月-木 0120-000-000 0120-000-001 1,000万 100万
B社 日本 B営業 月-木 0120-001-000 0120-001-001 1,001万 101万
C社 日本 C営業 月-木 0120-002-000 0120-002-001 1,002万 102万

3. 方法の検討

本記事はプログラミングができない人でも、クリック操作でできる方法です。VBA、Python、PowerShell、Power Query Mなどのプログラミングができる人は、それらを使用したほうが簡単だと思います。サンプルにはChatGPTで作成したPower Query Mのコードも入れました。

Power Queryでシートを選択せずに全シートを取込み展開すると、自動ではヘルパークエリが作成されず、各シート毎に整形ができません。
そこで、次の記事に似た方法でヘルパークエリを手動で作成します。
Power Query:複数のシートのデータを縦結合する(ヘルパークエリ編)
https://nandemo-xl.hatenablog.com/entry/2023/11/14/161634

1レコードが複数行の表を整形する方法には、例えば以下のような方法があります。
Power Queryで1レコード複数行のExcel表をリスト形式に変換する
https://tech-blog.cloud-config.jp/2023-04-27-power-query-clean-up-excel

上記方法は分かりやすいのですが、複数のクエリを使用するので、ヘルパークエリの"サンプルシートの変換"クエリを作成しにくいです。

そこで、当記事では1つのクエリで1シートを整形するクエリを紹介します。もっと、良い方法があるかも知れません。

4. 手順

1) ファイルの構成

  • 入力ファイル:"C:\Users\Public\Documents\250925pq01.xlsx"
  • 集計ファイル:"C:\Users\Public\Documents\250925pq00.xlsx"

2) サンプルシートの作成

ヘルパークエリのパラメータのサンプルとするサンプルシートを作成します。後でこのシートをサンプルにしてヘルパークエリを作成します。

  1. 集計をファイル名に含む集計ブックを開き、[データ]-[データの取得v]-[ファイルから>]-[Excelブックから]でサンプルにするExcelブックを選択し[インポート]、サンプルにするシートを選択し[データの変換]、右の名前を"サンプルシート"に変更。
  2. 右の"ソース"と"ナビゲーション"以外のステップの左の×をクリックして削除。ソースとナビゲーションの2ステップだけにする。⇒サンプルシートが完成。

3) パラメータクエリの作成

  1. [ホーム]-[新しいソースv]-[その他のソース>]-[空のクエリ]で右の名前を"パラメータ1"に変更。
  2. 左の"パラメータ1"を右クリックし、[パラメータへ変換する]。
  3. [ホーム]-[詳細エディタ]で次のように修正し[完了]。⇒ヘルパークエリの"パラメータ1"が完成。

変更前
"" meta [IsParameterQuery=true, Type="any", IsParameterQueryRequired=true]

変更後
#"サンプルシート" meta [IsParameterQuery=true, BinaryIdentifier=#"サンプルシート", Type="Table", IsParameterQueryRequired=true]

最初の#"サンプルシート" は、先に作成したサンプルシートクエリの名前を入れます。

余談:パラメータ1は1つのシートの中身を格納しています。後述のサンプルシートの変換クエリで「= パラメータ1」と書きます。これにより、サンプルシートの変換クエリから関数クエリを生成したときに、シートの中身をパラメータを持つ関数クエリが生成されます。

4) サンプルシートの変換クエリを作成する

サンプルシートをデータベース形式に変更するヘルパークエリを作成します。本例と表の形が異なる場合は、この部分を変更してください。

1. クエリの作成

  1. [ホーム]-[新しいソースv]-[その他のソース>]-[空のクエリ]で新しいクエリを作成し、右の名前を"サンプルシートの変換"に変更します。
  2. 数式バーに次の様に入力し、✓をクリックする。⇒サンプルシートが表示される。
    = パラメータ1
  3. 右の"ソース"以外の左の×をクリックして削除。ソースだけにする。
Column1 Column2
会社情報 null
社名 住所
A社 東京
担当者 営業日
A営業 月-木
電話 FAX
0120-000-000 0120-000-001
資本 受注
1,000万 100万

ここからシートの表をデータベース形式にするステップを追加してください。シートの表の形により手順が異なります。以下の操作は、1.入力表の場合の手順例です。

2. 不要な行の削除(表のタイトルの削除)

"Column1"の▼から[テキストフィルタ]-[指定の値から始まらない]で値に"会社情報"を入力し[OK]。

Column1 Column2
社名 住所
A社 東京
担当者 営業日
A営業 月-木
電話 FAX
0120-000-000 0120-000-001
資本 受注
1,000万 100万

3. 1列にする(項目と値を列に分するピボットではピボットの値を1つしか選べないので1列にする)

Column1を選択し、Ctrl+aで全ての列を選択し、[変換]-[列のマージ]で区切り記号にカスタムの"|"を入力し[OK]。
式を次のように変更する。

変更前
= Table.CombineColumns(フィルターされた行,{"Column1", "Column2"},Combiner.CombineTextByDelimiter("|", QuoteStyle.None),"結合済み")

変更後
= Table.CombineColumns(フィルターされた行,Table.ColumnNames(フィルターされた行),Combiner.CombineTextByDelimiter("|", QuoteStyle.None),"結合済み")

※ 区切り記号は、値に含まれない文字を指定します。
※ この変更をすることでColumn3が追加されても結合ざれるように、Column1等の名前を使用しない式にします。

4. インデックスの追加(項目と値を分離する列を作る下準備)

[列の追加]-[インデックス列v]-[0から]。

5. 項目と値を識別する列の追加(0=項目名、1=値 にする)

"インデックス"列を選択し[列の追加]-[標準v]-[剰余]で値に"2"を入力し[OK]。

結合済み インデックス 剰余
社名|住所 0 0
A社|東京 1 1
担当者|営業日 2 0
A営業|月-木 3 1
電話|FAX 4 0
0120-000-000|0120-000-001 5 1
資本|受注 6 0
1,000万|100万 7 1

※ プログラミングができるなら、結合ではなくリスト化やテーブル化をするのだと思われます?

6. 項目と値のグループを識別する列にインデックスを変更

"インデックス"列を選択し[変換]-[標準v]-[整数除算]で値に"2"を入力し[OK]。

結合済み インデックス 剰余
社名|住所 0 0
A社|東京 0 1
担当者|営業日 1 0
A営業|月-木 1 1
電話|FAX 2 0
0120-000-000|0120-000-001 2 1
資本|受注 3 0
1,000万|100万 3 1

7. 列のピボットで項目と値を横に展開

"剰余"列を選択し[変換]-[列のピボット]で値列に[結合済み]、詳細設定オプションで[集計しない]で[OK]。

インデックス 0 1
0 社名|住所 A社|東京
1 担当者|営業日 A営業|月-木
2 電話|FAX 0120-000-000|0120-000-001
3 資本|受注 1,000万|100万

8. 不要な行の削除(作業列を削除)

"インデックス"列を選択し[ホーム]-[列の削除v]-[列の削除]。

0 1
社名|住所 A社|東京
担当者|営業日 A営業|月-木
電話|FAX 0120-000-000|0120-000-001
資本|受注 1,000万|100万

9. 行と列を入れ替える(項目が横に並ぶテーブル形式の方向にする)

[変換]-[入れ替え]。

Column1 Column2 Column3 Column4
社名|住所 担当者|営業日 電話|FAX 資本|受注
A社|東京 A営業|月-木 0120-000-000|0120-000-001 1,000万|100万

10. 列の結合(複数列の区切り記号による分離ができないので、1列にする)

Column1を選択し、Ctrl+aで全ての列を選択し、[変換]-[列のマージ]で区切り記号にカスタムの"|"を入力し[OK]。
式を次のように変更する。

変更前
= Table.CombineColumns(転置されたテーブル,{"Column1", "Column2", "Column3", "Column4"},Combiner.CombineTextByDelimiter("|", QuoteStyle.None),"結合済み")

変更後
= Table.CombineColumns(転置されたテーブル, Table.ColumnNames(転置されたテーブル),Combiner.CombineTextByDelimiter("|", QuoteStyle.None),"結合済み")

※ 元ファイルの行数が増えてColumn5~6が追加されても、結合ざれるようにColumn1等の名前を使用しない式にします。

結合済み
社名|住所|担当者|営業日|電話|FAX|資本|受注
A社|東京|A営業|月-木|0120-000-000|0120-000-001|1,000万|100万

11. 列の分割

"結合済み"列を選択し[変換]-[列の分割v]-[区切り記号による分割]で区切り記号にカスタムの"|"を入力し、詳細設定オプションの引用符文字を[なし]で[OK]。自動的に追加された最後の"変更された型"のステップを削除。

結合済み.1 結合済み.2 結合済み.3 結合済み.4 結合済み.5 結合済み.6 結合済み.7 結合済み.8
社名 住所 担当者 営業日 電話 FAX 資本 受注
A社 東京 A営業 月-木 0120-000-000 0120-000-001 1,000万 100万

12. 項目名のヘッダ化

[変換]-[1行目をヘッダとして使用v]-[1行目をヘッダとして使用]。

社名 住所 担当者 営業日 電話 FAX 資本 受注
A社 東京 A営業 月-木 0120-000-000 0120-000-001 1,000万 100万

13. 型の設定

自動的に最後のステップに"変更された型"が追加される。正しく型設定されない場合は、個別に列を選択して[変換]-[データ型]で適切な型に変更。

以上で1シートの整形クエリが完成です。

6) 関数の作成

左の"サンプルシートの変換"クエリを右クリックし[関数の作成...]。
関数名に"シートの変換"と入力し[OK]。

7) シートを縦結合するクエリを作る

1. クエリの作成

  1. 左の"サンプルシート"クエリを右クリックし[複製]で新しいクエリを作成し、右の名前を"シートの結合"に変更します。
  2. 右の"ナビゲーション"のステップを削除し、ソースだけにします。これでブック全体が取り込まれた状態になります。

2. シート以外を削除

"Kind"列の▼-[テキストフィルター>]-[指定の値に等しい...]で値にSheetを選択し[OK]。

※ ExcelのブックにはSteet以外の情報もあるので、Sheetのみを処理対象とします。

3. 関数クエリで各シートのTableを整形する

[列の追加]-[カスタム関数の呼び出し]で関数クエリに[シートの変換]、パラメータ1に[Date]、新しい列名に"シートの変換"を入力し[OK]。

Name Data Item Kind Hidden シートの変換
A Table A Sheet FALSE Table
B Table B Sheet FALSE Table
C Table C Sheet FALSE Table

4. 不要列を削除

"シートの変換"列を右クリックし[他の列の削除]。

シートの変換
Table
Table
Table

※ もし、シート名が必要であれば、Name列などを残してください。

5. シートを展開

  1. "Table"列の右の展開アイコンをクリックし、さらに読み込むをクリックし、"プレフィックスを追加する"のチェックを外し[OK]。
社名 住所 担当者 営業日 電話 FAX 資本 受注
A社 東京 A営業 月-木 0120-000-000 0120-000-001 1,000万 100万
B社 名古屋 B営業 月-金 0120-001-000 0120-001-001 1,001万 101万
C社 大阪 C営業 火-金 0120-002-000 0120-002-001 1,002万 102万
  1. [変換]-[データ型の検出]。正しく型設定されない場合は、個別に列を選択して[変換]-[データ型]で適切な型に変更。
  2. 左の"サンプルシート"を"シートの変換"グループに移動。

250925pq1 ⇒250925pq2

以上で集計表が完成です。

8) 閉じて読み込む

[ホーム]-[閉じて読み込むv]-[閉じて次に読み込む]で"接続の作成のみ"を選択し[OK]。

9) Excelへの読み込み

[データ]-[クエリと接続]で右に"クエリと接続"ペインを表示し、"シートの結合"クエリを右クリックして[読み込み先...]から、希望する読み込み先を設定してください。
Power Pivot/DAXを使用する場合は、"このモデルをデータモデルに追加"を選びます。

5. サンプル

ダウンロード - 250925pq0.zip

C:\Users\Public\Documents\ に展開してください。

※ サンプルファイルの中の”サンプルシートの変換test"クエリは、列の結合を使わずに変換したものです。16ステップあるので、本記事より3ステップ多いです。最初にインデックスでピボット解除して1列にするのが特徴です。インデックスの振り直しと並べ替えでステップ数が増加しています。

※ サンプルファイルの中の"サンプルシートの変換gpt"クエリは、ChatGPT5が生成したコードです。ステップ数は最も少ない9です。これをクリック操作では作ることができません。次のような流れになっています。

  1. インデックス追加 → 偶数行(項目)、奇数行(値)を判別できるようにする。
  2. ペア単位でグループ化 → 項目行と値行を 1 セットにまとめる。
  3. 項目行の値をフィールド名に、値行をフィールドの値に変換 → Record.FromList(vals, keys) で項目と値を正しくマッピング。
  4. すべてのペアをまとめて 1 レコード化 → Record.Combine で完成。

6. 関連記事

Excel Power Queryで1レコードが複数行、複数列に分かれている表の整形方法
https://bigarrow.tea-nifty.com/blog/2025/02/post-08e375.html

Power Queryで表をリスト形式に整形する方法(まとめ)
https://bigarrow.tea-nifty.com/blog/2025/11/post-4925ca.html

Power Queryで複数の表を結合する方法(まとめ)
https://bigarrow.tea-nifty.com/blog/2025/11/post-341d5f.html

7. AI(LLM)の利用

ChatGPとGeminiを使用したのですが、両者ともクリック操作での正解には辿り着きませんでした。整形問題は、LLMが苦手としているよです。
Geminiの方がPower Queryのクリック操作に関しては、少しマシな感じがします。本記事の回答はGeminiの回答を手掛かりに、自力で作成したものです。
ChatGPTは存在しないクリック操作を回答して来てダメでした。本記事のクリック操作の正解を伝えたたら、別のコードを提案してきたのですが、相当のやり直しの上やっと完成しました。

メジャーDAX式は、ChatGPTが使い物になります。ワークシート式や集計問題は、LLMが得意な印象があります。

| | コメント (0)

ココログで文字の長さで列幅が変わる表を書く方法

1. 前置き

ココログのリッチテキストエディタで表を書くと固定サイズが設定されるので、文字の長さを変えても列幅が変わりません。なので、列幅を指定するコードを削除する必要があり、とても面倒です。
しかし、通常エディタで<table>のHTMLコードを編集するのは面倒です。

昔はジャストシステム「xfy Blog Editor」があったようですが、今は無いようです。
そこで、次の方法を試してみました。

もっと良い方法があれば、コメントをください。

2. 記事作成手順

  1. VS CODE + Markdown All in One で、マークダウンにより表やリストや見出し行などを記述する。
  2. VS CODE + Markdown All in One で、マークダウンのプレビューを確認する。
  3. VS CODE + Markdown All in One で右クリックし、HTMLに書き出す。⇒マークダウンの書式がHTMLになる。
  4. ココログの通常エディタにHTMLを貼り付ける。⇒ココログで使えないHTMLコードが削除される。

この先は、このままココログで編集する場合と、HTMLをVS-CODEに戻す方法があります。戻す場合は、次のステップになります。

  1. ココログの通常エディタのコードをローカルのHTMLファイルに貼り付ける。
  2. VS CODE + Live Previe で、HTMLファイルを編集する。⇒ココログの通常エディタと異なり、編集画面と表示画面が同時に表示されるので、編集しやすいです。オートコンプリート機能も働きます。
  3. ココログの通常エディタにHTMLを貼り付ける。

3. VS CODEでのマークダウンからHTMLへの変換

  • #は<h1>、##は<h2>、###は<h3>、####は<h4>に変換されます。ココログのリッチテキストエディタでは<h1>などを書けませんが、機能は有効です。
  • * は<li>に変換されます。
  • ```は<pre><code>に変換されます。
  • 表は<table>に変換されるので、ココログで<table style="border-collapse: collapse; margin-left: 15px;" border="1" cellpadding="2"> などに変更します。

4. ココログでのHTMLの変換

  • CSSは削除されます。
  • <pre>は機能せず行頭の空白が削除されます。なので<p>に置き替えます。

5. 参考

VS Code

https://code.visualstudio.com/

Microsoft Storeにもあります。

Markdown All in One

https://marketplace.visualstudio.com/items?itemName=yzhang.markdown-all-in-one

Live Preview

https://marketplace.visualstudio.com/items?itemName=ms-vscode.live-server

| | コメント (0)

Excelのリストのグループ化で重複する値を横項目に展開する方法

1. まえがき

Yahoo!知恵袋にExcelのリストのグループ化で、同じグループのレコードが複数ある場合に、その値を1行の横に並べる方法の質問がありました。
https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q13319052933

ワークシート関数とモダンExcel(Power Query、Power PivotのメジャーDAX)の方法を紹介します。

2. 入力リスト

テーブル名:テーブル1。元の表です。本記事では、左上のセル(ID)をA2セルとします。

ID 氏名 担当
1 ONE A
1 ONE B
1 ONE C
2 TWO D
2 TWO E
2 TWO F
3 THREE G
3 THREE H
3 THREE I

3. 出力リスト

求める表です。IDと氏名をグループ化し、担当を横に並べます。カンマ区切りで列挙するものと、列を分けるものがあります。

1) 連結

ID 氏名 担当
1 ONE A, B, C
2 TWO D, E, F
3 THREE G, H, I

2) 列分離

ID 氏名 担当1 担当3 担当3
1 ONE A B C
2 TWO D E F
3 THREE G H I

4. 色々な方法

250822yokokahen01

1) TEXTJOIN関数 連結

Excel2021以降
出力表の左上のセル(ID)をE3とします。E3:G3には項目名、E4:F6にはIDと氏名を入力します。
セルG4に次の式を入れ、G6までコピーします。

=TEXTJOIN(  //テキストを結合
",", //区切り文字
TRUE, //空の文字列を無視
FILTER( //第1引数の[担当]列を第2引数の条件でフィルタした配列を返す
テーブル1[担当], //フィルター対象
(テーブル1[ID] = E4) * (テーブル1[氏名] = F4) //[ID]と[氏名]が集計表の項目と同じならTrue
)
)

【注意】

  1. セルに書く式は、//以降のコメントを省いてください。ワークシート式に//でコメントを書くことはできません。
  2. 構造化参照を使用しています。セルアドレス参照でもOKです。

2) TOROW関数 列分離

Excel2024以降
列分離は、これが最も簡単です。項目見出し行は個別に入力が必要です。

出力表の左上のセル(ID)をE9とします。E9:I9には項目名、E10:F12にはIDと氏名を入力します。
セルG10に次の式を入れ、G12までコピーします。

=TOROW( //配列を横に展開する
FILTER( //第1引数の[担当]列を第2引数の条件でフィルタした配列を返す
テーブル1[担当], //フィルター対象
(テーブル1[ID] = E10) * (テーブル1[氏名] = F10) //[ID]と[氏名]が集計表の項目と同じならTrue
)
)

3) PIVOTBY関数 連結

Excel 365
連結は、これが最も簡単です。項目見出し行も出力されます。

出力したい範囲の左上のセルに次の式を入れます。

=PIVOTBY(
テーブル1[[#すべて],[ID]:[氏名]], //行グループ
, //列グループ
テーブル1[[#すべて],[担当]], //値
ARRAYTOTEXT, //「,」で区切り文字列を結合した値
3, //入力範囲に項目名を含み、出力に表示する
0 //小計行や総計行を表示しない
)

4) GROUPBY+LAMBDA関数 連結

Excel 365
PIVOTBYから項目名見出し行の出力を省き、LAMBDAで集計関数を定義したものです。
出力したい範囲の左上の1つ下のセルに次の式を入力します。

=GROUPBY(
テーブル1[[ID]:[氏名]], //グループ化対象
テーブル1[担当], //値
LAMBDA(x, TEXTJOIN(",",,x)), //値の集計をLAMBDAで定義。内容は「,」区切りで文字列を連結
0, //入力範囲に項目名を含まず、出力に表示しない
0 //合計を表示しない
)

5) INDEX関数 列分離

Excel2021以前でも使用できる関数です。
出力表の左上のセル(ID)をE21とします。E21:I21には項目名、E22:F24にはIDと氏名を入力します。
セルG22に次の式を入れます。

=IFERROR(
INDEX(
$C:$C, //担当を取り出す
1 / LARGE( // 1を(1/行番号)で割り、行番号を取り出す
INDEX(
($A$3:$A$100 = $E22) * ($B$3:$B$100 = $F22) / ROW($3:$100), //「IDと氏名が合う行は 1/行番号=行番号の逆数、そうでなければ 0」の配列
),
COLUMN($A$2) //担当n列の列順番を取得。LARGEでn番目に大きい1/行番号を返す
)
),
"" // 合う行番号が無ければエラーになるので""を返す
)

行番号を逆数にしている理由は、内側のINDEXで一致する行が無くて0が返された時、外側のINDEXの第2引数の式を1/0とすることでエラーにして、表示を""にするためです。これにより、IF文で0を検出する必要が無くなるので、式が短くなります。一致する行があった時に行番号を取り出せるように、内側のINDEXで一致した行番号を逆数にしています。
この式は難解なので、Excel2021以前なら、Power Queryを使用したほうが分かりやすいです。仕事で他の人が解読しにくい式を使うのは、避けたほうが良いと思います。

6) REPT,CONCAT,TEXTSPILIT 列分離

Excel2021以降
出力表の左上セル(ID)をE28とします。
セルG29に次の式を入れます。E28:I28には項目名、E29:F31にはIDと氏名を入力します。

=IFERROR(
TEXTSPLIT( // 下記配列を","で分離
CONCAT( // 下記配列を結合
REPT( // IDが一致する担当に","を付けた配列
テーブル1[担当]&",",
テーブル1[ID]=E29
)
),
",", // 分離区切り記号
,
TRUE
),
""
)

7) Power Query 連結

Excel2021以前でも使用できます。項目見出し行も出力します。

250822yokokahen02

操作手順

  1. テーブルを選択し、[データ]-[データの取得v]-[テーブルまたは範囲から]でPower Queryエディタに取込む。
  2. Ctrlキーを押しながら"ID"と"氏名"列を選択し、[ホーム]-[グループ化]で"新しい列名"に"担当"と入力し[OK]。
    数式バーの行カウントの"each Table.RowCount(..."を、文字列結合の"each Text.Combine(..."に書き換えます。
変更前
= Table.Group(変更された型, {"ID", "氏名"}, {{"担当", each Table.RowCount(_), Int64.Type}})
変更後
= Table.Group(変更された型, {"ID", "氏名"}, {{"担当", each Text.Combine([担当],","), Text.Type}})
連結コード全体(PQC)
let
ソース = Excel.CurrentWorkbook(){[Name="テーブル1"]}[Content],
変更された型 = Table.TransformColumnTypes(ソース,{{"ID", Int64.Type}, {"氏名", type text}, {"担当", type text}}),
// グループ化された行 = Table.Group(変更された型, {"ID", "氏名"}, {{"担当", each Table.RowCount(_), Int64.Type}}) のeach Table.RowCount()部分を次のように書き変える
グループ化された行 = Table.Group(変更された型, {"ID", "氏名"}, {{"担当", each Text.Combine([担当],","), Text.Type}}) // 行のカウントに替えて、","区切りの値の結合を行う
in
グループ化された行

Power Query Mの数式を直接修正するので、一見難しそうですが、行のカウント関数を文字列の結合関数に置き換えているだけですので、理解しやすいと思います。

8) Power Query 列分離

Excel2021以前でも使用できます。
2つのコードを示します。Aの方法は、数式バーでの式の修正が不要です。Bの方法は、数式バーでの式の修正が必要です。
項目見出し行も出力します。

250822yokokahen03

操作手順A

  1. テーブルを選択し、[データ]-[データの取得v]-[テーブルまたは範囲から]でPower Queryエディタに取込む。
  2. Ctrlキーを押しながら"ID"と"氏名"列を選択し、[ホーム]-[グループ化]で"新しい列名"に"TEMP"を入力し、"操作"に[すべての行]を選び[OK]。
  3. [列の追加]-[カスタム列]で次のように入力。
    新しい列名:カスタム
    カスタム列の式: = Table.AddIndexColumn([TEMP], "インデックス", 1)
  1. "TEMP"列を右クリックし[削除]。
  2. "カスタム"列の右の矢印アイコンをクリックし、"担当"と"インデックス"以外のチェックを外し[OK]。
  3. "インデックス"列を選択し、[変換]-[書式v]-[プレフィックスの追加]で"値"に"担当"と入力し[OK]。
  4. "インデックス"列を選択し、[変換]-[列のピボット]。
  5. Ctrlキーを押しながら"担当n"列を選択し、[変換]-[データ型v]-[テキスト]。
  6. [ホーム]-[閉じて読み込むv]-[閉じて次に読み込む]で"テーブル"を選択し[OK]。
列分離コード全体(PQD)
let //このコードは長いですが、処理内容は難しくなく、連番付きの項目名も自動生成する。
ソース = Excel.CurrentWorkbook(){[Name="テーブル1"]}[Content],
変更された型 = Table.TransformColumnTypes(ソース,{{"ID", Int64.Type}, {"氏名", type text}, {"担当", type text}}),
グループ化された行 = Table.Group(変更された型, {"ID", "氏名"}, {{"TEMP", each _, type table [ID=nullable number, 氏名=nullable text, 担当=nullable text]}}), //グループ毎のTableを格納した列(TEMP)を作成
追加されたカスタム = Table.AddColumn(グループ化された行, "カスタム", each Table.AddIndexColumn([TEMP], "インデックス", 1)), //TEMP列に格納されたグループ毎のTableに連番列(インデックス)を追加したTableを格納した列(カスタム)を追加
削除された列 = Table.RemoveColumns(追加されたカスタム,{"TEMP"}), //TEMP列を削除
#"展開された カスタム" = Table.ExpandTableColumn(削除された列, "カスタム", {"担当", "インデックス"}, {"担当", "インデックス"}), //連番(インデックス)と連番に対応する値項目(担当)を展開
追加されたプレフィックス = Table.TransformColumns(#"展開された カスタム", {{"インデックス", each "担当" & Text.From(_, "ja-JP"), type text}}), //連番を項目名にするので、連番(インデックス)の前に項目名(担当)を追加
ピボットされた列 = Table.Pivot(追加されたプレフィックス, List.Distinct(追加されたプレフィックス[インデックス]), "インデックス", "担当"), //連番付きの項目名列(インデックス)を横にピボット展開
変更された型1 = Table.TransformColumnTypes(ピボットされた列,{{"担当1", type text}, {"担当2", type text}, {"担当3", type text}})
in
変更された型1

ステップは多いですが、グループ毎のテーブルにインデックスを付けて、それを展開し、その列をピボットしているだけです。

参考

【Power Query】グループごとに連番をつける方法
https://blog.truestar.co.jp/microsoft/power-query/20210707/45919/

上記コードはクリック操作で完成するようにしていますが、「グループ化された行」のステップのコードを詳細エディタで直接書くと、次の操作手順BのようにTEMP列の作成を省略することができ、2ステップ削減できます。

操作手順B

  1. テーブルを選択し、[データ]-[データの取得v]-[テーブルまたは範囲から]でPower Queryエディタに取込む。
  2. Ctrlキーを押しながら"ID"と"氏名"列を選択し、[ホーム]-[グループ化]で"新しい列名"に"カウント"を入力し、"操作"に[すべての行]を選び[OK]。
    数式バーの式のeach以降の部分を次のように書き換える。
変更前
= Table.Group(変更された型, {"ID", "氏名"}, {{"カウント", each _, type table [ID=nullable number, 氏名=nullable text, 担当=nullable text]}})
変更後
= Table.Group(変更された型, {"ID", "氏名"}, {{"カウント", each Table.AddIndexColumn(_, "インデックス", 1, 1), type table}})

変更前の式はカウント列にグループ化した全行のテーブル""を格納していますが、変更後の式は""にインデックス列を加えています。

  1. "カウント"列の右の矢印アイコンをクリックし、"担当"と"インデックス"以外のチェックを外し[OK]。
  2. "インデックス"列を選択し、[変換]-[書式v]-[プレフィックスの追加]で"値"に"担当"と入力し[OK]。
  3. "インデックス"列を選択し、[変換]-[列のピボット]。
  4. Ctrlキーを押しながら"担当n"列を選択し、[変換]-[データ型v]-[テキスト]。
  5. [ホーム]-[閉じて読み込むv]-[閉じて次に読み込む]で"テーブル"を選択し[OK]。
列分離コード全体(PQD2)
let //このコードは長いですが、処理内容は難しくなく、連番付きの項目名も自動生成する。
ソース = Excel.CurrentWorkbook(){[Name="テーブル1"]}[Content],
変更された型 = Table.TransformColumnTypes(ソース,{{"ID", Int64.Type}, {"氏名", type text}, {"担当", type text}}),
グループ化された行 = Table.Group(変更された型, {"ID", "氏名"}, {{"カウント", each Table.AddIndexColumn(_, "インデックス", 1, 1), type table}}), //グループ毎のTableにインデックスを追加(数式バーか詳細エディタで記述します。)
#"展開された カウント" = Table.ExpandTableColumn(グループ化された行, "カウント", {"担当", "インデックス"}, {"担当", "インデックス"}), //連番(インデックス)と連番に対応する値項目(担当)を展開
追加されたプレフィックス = Table.TransformColumns(#"展開された カウント", {{"インデックス", each "担当" & Text.From(_, "ja-JP"), type text}}), //連番を項目名にするので、連番(インデックス)の前に項目名(担当)を追加
ピボットされた列 = Table.Pivot(追加されたプレフィックス, List.Distinct(追加されたプレフィックス[インデックス]), "インデックス", "担当"), //連番付きの項目名列(インデックス)を横にピボット展開
変更された型1 = Table.TransformColumnTypes(ピボットされた列,{{"担当1", type text}, {"担当2", type text}, {"担当3", type text}})
in
変更された型1

参考

Power Query:縦方向のデータを横並びで出力する : なんでもエクセル : 2022/11/02
https://nandemo-xl.hatenablog.com/entry/2022/11/02/150925

9) メジャー 連結

ピボットテーブルのフィルタコンテキストでフィルタされた'PPC'テーブルに対し、1行ずつ[担当]列の値を抽出し、","でその値を連結します。
連結限定ですが、Power Queryより分かりやすいと思います。

250822yokokahen04

操作手順

  1. テーブルを選択し[データ]-[データの取得v]-[テーブルまたは範囲から]でPower Queryエディタに取込む。
  2. [ホーム]-[閉じて読み込むv]-[閉じて次に読み込む]で"ピボットテーブル"と"このデータをデータモデルに追加する"を選択し[OK]。
取得コード全体(PPC)
let //本例はPower Queryに取込んでいますが、テーブルを直接データモデルに追加すれば、クエリは不要です。
ソース = Excel.CurrentWorkbook(){[Name="テーブル1"]}[Content],
変更された型 = Table.TransformColumnTypes(ソース,{{"ID", Int64.Type}, {"氏名", type text}, {"担当", type text}})
in
変更された型
  1. "ピボットテーブルのフィールド"の'PPC'テーブルを右クリックし、[メジャーの追加]で名前を"M担当"と入力し、次のように式を入力する。
メジャー
M担当: = CONCATENATEX('PPC', 'PPC'[担当], ",")

メジャーで担当を連結します。

  1. "ピボットテーブルのフィールド"で次のように項目をドラッグします。
    行:[ID]、[氏名]、Σ値:[M担当]

5. サンプル

ダウンロード - 250822yokokahen.xlsx

1) Power Queryエディタの表示方法

  1. [データ]-[クエリと接続]で右に"クエリと接続"を表示。表示されない時は、もう一度操作する。
  2. 適当なクエリを右クリックし、[編集]でPower Query エディタが開く。
  3. 右の適用したステップの各ステップをクリックし、各ステップでどのように表が加工されるのかを確認する。
  4. 各ステップの右の歯車アイコンで追加した列の式や設定などの確認をする。
  5. [ホーム]-[詳細エディタ]で全体のPower Query Mのコードが表示される。各ステップの数式バーでもコードを確認できる。

2) データの更新方法

  1. 元データを修正したらファイルを保存。
  2. [データ]-[すべて更新v]-[すべて更新]。

3) メジャーDAX式の表示方法

  1. ピボットテーブルを選択し、右に"ピボットテーブルのフィールド"を表示。
  2. [fx …]を右クリックし[メジャーの編集]で式を表示。

6. 関連記事

Excel Power Query Power Pivotで項目数が変化する集計 : 当ブログ : 2025/02/27
https://bigarrow.tea-nifty.com/blog/2025/02/post-599235.html

| | コメント (0)

ピボットテーブルのΣ値にテキスト型の列の値を表示する方法

1. 前置き

Yahoo!知恵袋に、ピボットテーブルでテキスト型の列の値をピボットテーブルの列に2段表示する質問がありました。
https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q14319737134

これは、テキスト型の列の値をピボットテーブルのΣ値に配置することでも実現できます。
そこで、2つのテキスト型の列の値をピボットテーブルの列に2段表示する方法と、メジャーを用いて1つをΣ値に表示する方法の2つを紹介します。

2. 例題の元表

年 月 店舗ID 数量 売上 担当者
2024 1 101 15 1200 田中
2024 1 102 9 800 佐藤
2024 1 103 12 950 高橋
2024 2 101 18 1500 田中
2024 2 102 14 1100 佐藤
2024 2 103 8 700 高橋
2024 3 101 16 1300 田中
2024 3 102 11 900 佐藤
2024 3 103 13 1000 高橋

この表の店舗IDと担当者がテキスト型です。

3. 作成するピボットテーブル

  田中 佐藤 高橋
店舗ID 101 102 103
数量 15 9 12
売上 1200 800 950

1行目が担当者、2行目が店舗IDで、テキスト型です。数量と売上は数値です。

4. 2つのテキスト型の列の値をピボットテーブルの列に2段表示する方法

これはピボットテーブルの基本的な操作です。

手順概要

  1. 元表を全選択します。
  2. [挿入]-[ピボットテーブル]-[テーブルまたは範囲から]で[OK]。
  3. ピボットテーブルで次のように項目をドラッグします。

列:[担当者]、[店舗ID]。行:Σ値。Σ値:[数量]、[売上]。

250909pt01

5. Σ値にテキスト型の列の値を表示する方法

ピボットテーブルのΣ値にテキスト型の項目を配置すると行のカウントになり、文字列を表示することができません。そこで、メジャーを使用して文字列を表示します。
また、1人の担当者が複数の店舗IDを持つことを想定して、複数の店舗IDをカンマ区切りで列挙する式も紹介します。

手順概要

  1. 元表を全選択します。
  2. [挿入]-[ピボットテーブル]-[テーブルまたは範囲から]で"このデータをデータモデルに追加する"をチェックし[OK]。[*1]

250909pt02

  1. "ピボットテーブルのフィールド"のテーブル名を右クリックし[メジャーの追加]で次のように入力し[OK]。
    メジャーの名前:M店舗ID
    数式(DAX式):
= IF(
HASONEFILTER('範囲'[担当者]), // [担当者]がフィルタされているか=合計では無いか
MAX('範囲'[店舗ID])
)

解説

  1. ピボットテーブルの総計,合計,小計に、[店舗ID]を表示させないために、IFを使用しています。
    総計などを表示しないのであれば、MAXの行だけでOKです。
  2. HASONEFILTERで1つの[担当者]かどうかを判断します。1つであれば、総計,合計,小計では無いということです。
  3. メジャーは複数の値が計算対象になるので、MAXで1つの値を取り出します。MINやFIRSTNONBLANKでもOKです。

次の式は、1人の担当が複数の店舗IDを持っている場合に、","区切りで列挙します。

= IF(
HASONEFILTER('範囲'[担当者]), // [担当者]がフィルタされているか=総計では無いか
CONCATENATEX ( // 文字列の連結
DISTINCT('範囲'[店舗ID]), // 重複を削除した対象の[店舗ID]表
'範囲'[店舗ID], // 連結する値
"," // 区切り文字
)
)

解説

  1. ピボットテーブルの総計,合計,小計に、[店舗ID]を表示させないために、IFを使用しています。
    総計などを表示しないのであれば、IFとHASONEFILTERは不要です。
  2. HASONEFILTERで1つの[担当者]かどうかを判断します。1つであれば、総計,合計,小計では無いということです。
  3. CONCATENATEで文字列の連結を行います。
  4. DISTINCTで連結対象の[店舗ID]の重複を削除します。
  1. ピボットテーブルで次のように項目をドラッグします。
    列:[担当者]。行:Σ値。Σ値:[M担当ID]、[数量]、[売上]。

250909pt03

[*1]:Power Queryからデータモデルに追加する方法
[データ]-[データの取得]-[テーブルまたは範囲から]などでPower Queryに取込み、必要があれば何か処理を行い、[ホーム]-[閉じて読み込むv]-[閉じて次に読み込む]で"ピボットテーブル"と"このモデルをデータモデルに追加する"で[OK]。この方法だとPower Queryで付加処理ができるので、応用範囲が拡大します。

5. サンプル

ダウンロード - 250909pt.xlsx

6. データモデルとメジャーの効用

元テーブルをデータモデルに追加すると、ピボットテーブルで色々な値をメジャー(DAX)で計算して表示することができるようになります。これより、計算フィールドと集計アイテムが使えなくなりますが、それらより複雑な計算をすることができます。詳しくは、Power Pivot, メジャー, DAXで検索してみてください。

7. 参考

Power Pivot で DAX を使う
https://yomikakiexcel.com/using_dax_on_power_pivot/

[ピボットテーブル]集計フィールドと集計アイテムの違い
http://www.dab.hi-ho.ne.jp/sasa/biboroku/excel/calculated-field-and-item.html

【Excel】ピボットテーブルで文字列を結合する
https://www.youtube.com/watch?v=jC7POhejvPk

| | コメント (0)

ASUS TUF RTX 5080 と RealFlight VR Mode

TUF-RTX5080-O16G-GAMINGを購入しました。
目的はRealFilghtのVRモードでの画質改善です。変更前はTUF-RTX3070です。

結論 : 3070->5080にすると、画質は若干改善しますが、コマ落ちは改善しません。コマ落ち対策としては、通信環境の改善の方が効果的です。6GHzのアクセスポイントから2m位の距離で2401Mbpsを安定して受信できると、コマ落ちが少なくなります。

1. 選定の経緯

1) メーカ
マザーボードがASUS(PRIME Z690P)なので、共通のユーティリティソフトが使用できるASUSにしました。
(TUF RTX3070はユーティリティソフト(Armoury Crate)を使用しないと、LEDを消灯できなかったのですが、TUF RTX5080は初期状態が消灯です。なので、ソフトを使用しませんでした。)

2) 5070Ti / 5080
PCの電源が12VHPWR非対応の860Wなので電力不足が心配でしたが、CPUがCore-i9-12900無印(TDP65~202W)なので、5070Ti(TDP300W)ではなく、5080(TDP360W)にしました。

3) PRIME / TUF / ROG
低騒音を重視し、PRIMEではなく放熱フィンが大きくファン停止状態が長そうなTUFにしました。
ROGは12VHPWRのピン電流監視機能(Power Detector+)があるので少し迷いましたが、価格が高く、コネクタとケースの隙間も小さくなり、電源配線の曲げが厳しそうなので止めました。

2. 付属品

1) 12VHPWR - PCIe8pin x 3の変換アダプタ
コネクタに対し線が直線で出ているので、PCケースに曲げるための余裕が必要です。当方のケース(Cooler Master SILENCIO S600)ではケース内側にケーブルが当たる状態です。熱収縮チューブの部分はできるだけ曲げないようにしました。これがぎりぎりだと思われます。背が高いROGだとL字型コネクタに置換が必要だと思われます。

[グラフィックスカード] NVIDIA® GeForce RTX® 40 / RTX® 50 シリーズ搭載グラフィックスカードの取り付けに関するヒント
https://www.asus.com/jp/support/faq/1049038/

RTX 4xxx and 12VHPWR / 12V-2x6 Cable Guidance
https://knowledge.seasonic.com/article/72-psu-recommendations-for-nvidia-rtx-4000-cards

2) グラフィックスカードホルダー
商品紹介の写真では分からなかったのですが、六角のサポートが付属していました。

3) マジックバンド?
目的が分かりませんが、マジックバンドが付いていたので、電源ケーブルをまとめるのに使用しました。

3. PCの電源

Fractal Ion+ 2 Platinum 860Wです。電源のPCI-E 8-pin[6+2]のコネクタケーブルが2本付属していたので、GPUに使用中の1本を加えて合計3本のPCI-E 8pinを使用しました。Sycomは余剰部品が付いているので助かります。

4. 設置

12VHPWRのコネクタ部に力が掛からないようにするのに注意しました。
ヘアドライヤーで線を柔らかくして曲げ癖を付けると良いと思われます。
高負荷のゲームやベンチマークをしないので、これでも今のところ問題ありませんが、お勧めはしません。
250905rtx5080_01

5. 設定

交換前のRTX3070がRTX5080と同じドライバーなので、そのまま認識すると思ったのですが、ドライバが起動せず、非常に解像度が低い状態で起動しました。
WIndowsの設定は2560x1440になっているのですが、映っているのはVGAを横長にしたような状態です。
文字が読みずらい状態でASUSのサイトを確認したところ、ドライバはRTX3070で使用していたものと同じだったので、それを再インストールしました。
途中のブラックアウトの時間がかなり長く心配したのですが、無事ドライバが動き正常になりました。
設定もRTX3070を引き継いであり、G-SYNC 120Hzで動いていました。

6. 電力

1) PC全体の電力(モニタ除く):KWS-AC301Lを使用し、Excelのマクロでログを取得しました。なのでExcelマクロ動作中の電力です。
Windows Idle:3070=68W、5080=72~80W。5080が少し変動が大きいですが平均的には5Wくらい5080が大きいようです。
RealFlight Evolution Idle:3070=217W、5080=151W
Aero Fly RC10 Idle:3070=127W、5080=130W

ソフトにより傾向が異なります。使用頻度が高いRealFlightは5080の方が電力が低くデスクトップではファンが回りません。VRだと270~280Wくらいでファンが回りますが、静かです。

2) HWiNFO64で測定した結果です。
Windows Idle:GPU=11W、CPU=17.5W。PC全体が73Wくらいなので、GPUとCPU以外で44.5W消費しています。PCH温度が62℃なので、チップセットの電力が多いようです。SSD温度は40~42℃でこちらも消費電力が大きいようです。

消費電力が大きければ、GPU-Tweak-IIIでクロックを下げようかと思ったのですが、大差はなく温度も低いので、GPU-Tweak-IIIは入れてません。

参考:電力計 KWS-AC301L
https://bigarrow.tea-nifty.com/blog/2022/09/post-0d4c5b.html

7. ソフト互換性

1) 一番互換性がシビアなWindows 7対応の地デジチューナーBuffalo DT-H10が動作しました。
2) HWiNFO64が5080を認識しませんでした。最新版に更新したら認識しました。
そしたらHWiNFO64が次の警告を出しました。
「警告(ISA Lock)別のアプリケーションが、共有同期オブジェクトを長時間保持することでHEiNFOをブロックしています。これにより、HWiNFOの起動が非常に遅くなり、ハードウェアへのアクセスに長時間かかる可能性があります。以下のアプリケーションを更新するか、使用を中止することを検討してください。問題があるアプリケーションは次の通りです。C:\Program Files (x86)\ASUS\AXSP\4.03.25\atkexComScv.exe」

対処
[中止]を選択し、ASUSのサイトのArmoury_Crate_Uninstall_ToolとUninstallAI3Tool_1.00.04を実行しました。

250711_5080hwinfoerr

8. 性能

1) RealFlight
当たり前ですが2Dでは3070と変わりません。2Dだとアイドルから+7度くらいでファンが回りません。VRだとファンが回ります。

VRはVirtual Desktopの設定をHighからUltraやGodLikeの72fpsにすることで改善しました。しかし、コマ落ちは改善しません。そこで、色々な条件でコマ落ちを調べて見ました。
1) 録画あり、USB Castありだとコマ落ちが多い。MQDHのUSB CastをOSBで録画しています。
2) 録画無し、USB Castありでもコマ落ちします。
3) 録画無し、USB Castなしでも若干コマ落ちします。580Mbpsでつながっていますが、電波は安定度が有線より劣るようです。

USB接続はQuest Linkしかできないので、Quest LinkでSteamVRを使用してみました。
1) 録画あり、USB Castありだとコマ落ちが多いです。
2) 録画無し、USB Castありでもコマ落ちします。
3) 録画無し、USB Castなしにすると殆どコマ落ちしません。2.5MbpsのUSB接続が効いているようです。
4) SteamVRの解像度を300%以上にすると画質が改善します。

以上のことからコマ落ちの要因は以下の通りだと思われます。
1) WiFiだと通信の不安定性により、コマ落ちする。WiFi6eにすれば、改善するかもしれません。
2) CastをするとQuest 3側の処理能力不足でコマ落ちする。これは改善の余地が無いです。
3) 録画をするとPCの能力不足でコマ落ちする。VRと録画のPCやGPUを分けることが考えられます。

録画とCastをしないのであれば、Quest LinkのUSB接続でSteam VRをレンダリング解像度200~300%で動かすのが、画質とコマ落ちの面で最も良いと思われます。

Virtual Desktopは、WiFiを使うので、GodLikeでレンダリング解像度が約150%となり、コマ落ちも発生します。WiFi接続である点と、パススルーができる点ではVirtual Desktopが良いのですが、Steam VRがパススルーに対応しません。

| | コメント (0)

« 2025年8月 | トップページ | 2025年10月 »