Excel (一般機能)

Excelの一般機能に関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 10全般 : Excel 2016)
表を縦並びにする方法
投稿日時: 21/11/18 13:29:45
投稿者: おばちゃん

表1を表2に変える方法は手作業とVBA以外はないでしょうか?レコード数は表1で1000行くらいあります。

[表1]
	A	B	C
1	Model	Sep-21	Oct-21
2	A	10	
3	B		20
4	C	30	30

[表2]
	A	B	C
1	Model	年月	Qty
2	A	Sep-21	10
3	B	Sep-21	0
4	C	Sep-21	30
5	A	Oct-21	0
6	B	Oct-21	20
7	C	Oct-21	30

回答
投稿日時: 21/11/18 15:47:45
投稿者: んなっと

 データ 取得と変換
→テーブルまたは範囲から
→先頭行をテーブルの見出しとして〜 チェック入れた状態で
→OK
  
PowerQueryエディターに変わります
  
→Shiftキーを併用して Sep-21 列からOct-21 列まで選択
→変換 値の置換
→検索する値 null
 置換後 0
→OK
  
→Model 列 選択
→変換 列のピボット解除▼ の▼クリック
→その他の列のピボット解除
  
→属性 列 選択
→ホーム データ型: 日付
  
→属性 で昇順に並べ替え
 Model で昇順に並べ替え
  
→属性 で右クリック
→名前の変更
 月日に
 (値 も同様に)
  
→閉じて読み込む
  
    A      B  C
1 Model    月日 値
2   A  2021/9/21 10
3   B  2021/9/21  0
4   C  2021/9/21 30
5   A 2021/10/21  0
6   B 2021/10/21 20
7   C 2021/10/21 30
 
  
→月日列 表示形式 mmm-dd
 
 
 
 元データに変更があったら
データ→すべて更新

回答
投稿日時: 21/11/18 19:13:31
投稿者: んなっと

関数だと、もしかしたらこんな感じ。
 
    A    B  C
1 Model  月日 値
2   A Sep-21 10
3   B Sep-21  0
4   C Sep-21 30
5   A Oct-21  0
6   B Oct-21 20
7   C Oct-21 30
 
A2
=IF(ROW(A1)>(COUNTA(Sheet1!A:A)-1)*(COUNTA(Sheet1!$1:$1)-1),"",INDEX(Sheet1!A:A,MOD(ROW(A1)-1,COUNTA(Sheet1!A:A)-1)+2))
下方向・↓
B2
=IF(A2="","",INDEX(Sheet1!$1:$1,(ROW(B1)-1)/(COUNTA(Sheet1!A:A)-1)+2))
下方向・↓
C2
=IF(A2="","",INDEX(Sheet1!$A:$Z,MATCH(A2,Sheet1!A:A,0),MATCH(B2,Sheet1!$1:$1,0)))
下方向・↓

投稿日時: 21/11/19 10:32:46
投稿者: おばちゃん

んなっと様
いつもありがとうございます。
PowerQueryエディター初めて使用しました。
PowerQueryの存在は知っていたのですが、
VBAを書けるので新しく覚えるより書いちゃった方が早いと思って無視していました。
説明を見ながらやってみたら欲しいデータが取得できました。
説明もわかりやすかったです。
VBAを書けない同僚にもやり方教えることが出来、二人(私と同僚)とも成長できました。