電子書籍の厳選無料作品が豊富!

この様な表を
------------------------------------
   / 1  2  3  4  5
------------------------------------
A1 /    1
------------------------------------
B1 /          1  1
------------------------------------
C1 / 1  1
------------------------------------

このようなデータリストに変換したいのですが
何か良い方法はありませんでしょうか。
------------------------
1 C1 1
2 A1 1
2 C1 1
4 B1 1
5 B1 1
-----------------------

上手く説明できていませんが、悩んでいます。
もしお気づきの点がありましたらご回答いただければ幸いです。

A 回答 (2件)

以下、仮に、


・元表のデータ部分の範囲:E3:Z99
・元表の列見出し:2行目
・元表の行見出し:3列目(C列)
だとします。

1.適当な列(仮にAA列~AD列とします)の1行目に、それぞれ下記の数式を入力する。

 AA1:=1/LARGE(INDEX(($E$3:$Z$99<>"")/(COLUMN($E$3:$Z$99)*2^16+ROW($E$3:$Z$99)),),ROW(AA1))

 AB1:=OFFSET($A$2,,INT(AA1/2^16)-1)
  ※$A$2は、元表の列見出しがある行の最初のセル

 AC1:=OFFSET($C$1,MOD(AA1,2^16)-1,)
  ※$C$1は、元表の行見出しがある列の最初のセル

 AD1:=OFFSET($A$1,MOD(AA1,2^16)-1,INT(AA1/2^16)-1)
  ※$A$1は、ワークシートの左上隅セル、すなわちA1

2.AA1:AD1を下方にフィル
3.(必要に応じて)AA列を非表示にする
4.(必要に応じて)条件付書式等でエラー値を見えないようにする

Excel2003で動作確認済。
-----------------------------------------------------
とりあえず潰しが効きそうな案を提示しましたが、
・元表のデータは1のみか、それとも他の値が入ることがあるのか
・元表のデータは数字のみか、それとも文字列が入ることがあるのか
・単発の作業か、それとも、元表の変更に連動して随時変化する必要があるのか
・元表の範囲は固定か、それとも増えることがあるのか
によってアプローチも変わってくると思います。

以上ご参考まで。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
やってみます!!!
助かりました。

お礼日時:2008/03/02 12:15

ExcelVBAでこんな感じでしょうか。



Dim a, b, c As Integer

c = 1
For b = 1 To 5
  For a = 1 To 3
    If Sheets("sheet1").Cells(a, b) = "1" Then
      Sheets("sheet2").Select
      Select Case a
      Case 1
        Cells(c, 1) = "a"
      Case 2
        Cells(c, 1) = "b"
      Case 3
        Cells(c, 1) = "c"
      End Select
      Cells(c, 2) = "1"
      c = c + 1
    End If
  Next
Next
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
やってみます!!!
助かりました。

お二人様本当に感謝しています。

お礼日時:2008/03/02 12:16

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!