• ベストアンサー

エクセル2007にて表から

エクセル2007にて表から DATAを抜き出したいのでご教授ください 画像の上のセルに数字を入れていき個数部分(青丸部分)に数値があるものを 元にして 下セル13からのような並びにDATAを作成したく思っております。 マクロは自動保存などで触ったことがあります。 数値がある部分というのが難しく思っておりますので すいませんがよろしくお願いします

質問者が選んだベストアンサー

  • ベストアンサー
  • keithin
  • ベストアンサー率66% (5278/7941)
回答No.1

無理に関数でごり押しするより(出来ないとは言いませんが,お薦めはしません),マクロの方が遙かに簡単ですね。 作成例: sub macro1()  dim h as range  dim i as long  dim target as range  range("A13:A" & cells.rows.count).entirerow.delete shift:=xlshiftup  on error resume next  set target = range(range("D3"),cells(10, cells.columns.count)).specialcells(xlcelltypeconstants)  if target is nothing then exit sub  i = 12  for each h in target   i = i + 1   cells(i, "B") = cells(2, h.column)   cells(i, "C") = cells(1, "B")   cells(i, "D") = cells(h.row, "B")   cells(i, "E") = cells(h.row, "C")   cells(i, "F") = h  next end sub #あとは趣味に応じて,たとえばF13以下の降順で並べ替えたいとか書式を整えたいとか,諸々追加の修飾を新しいマクロの記録で記録したマクロなどを追記して完成させてください。

jpiclt4
質問者

お礼

貴重なお時間の中お答えくださいましてありがとうございました。

その他の回答 (1)

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.2

こういう、「表のセルの組み換え問題」は、関数では難しいか複雑で不可能に近く、一方VBAでは、処理のポイント(定石)を経験すると簡単。 例データ B1:F8 -は空白セルを示す。左に詰めて表示されるのを防止のためで特に意味なし - X Y Z U a - 2 - - b - - - - c - - - - d - - 1 - e 2 1 1 - f - - - 1 g - - - 1 ーーー コード 標準モジュールに Sub test01() k = 2 '書き出し列(H,I,J列)の2行目から結果を書き出す Dim cl As Range For c = 3 To 6 'C列からF列までの各列について For Each cl In Range(Cells(2, c), Cells(20, c)) 'その列の各セルについて If cl <> "" Then '空白でないなら Cells(k, 10) = cl 'J列k行に値を代入 Cells(k, 8) = Cells(cl.Row, 2) 'H列k行にその行のB列の値を代入 Cells(k, 9) = Cells(1, c) ' 'I列k行にその列の第1行の値を代入 k = k + 1 '次の書き出しに備え、行を1行下を指す 'MsgBox cl End If Next Next c End Sub ーーーー 結果 H2:j9 e X 2 a Y 2 e Y 1 d Z 1 e Z 1 f Z 1 f U 1 g U 1 一部質問例の中身を省略した個所がある。 ・書き出し列やスタート行 ・データのある列で 質問者の場合は、どう変えればよいか勉強のこと。 コード(やり方)は珍しく思うかもしれないが、定石的なやり方の1つと思う。

関連するQ&A