• 締切済み

関数でなんとかなりませんか?(EXCEL)

マクロや関数に関してはあまり知識がありません。 そこでお教えいただきたいことがあり、質問させていただきました。 まず、あるワークシートに以下のような表があります。 A列|B列 a   1 b   1 c   1 d   2 e   2 この表を新しいワークシート(ワークシート名:並べ替え)以下のように並べ替えたいと思っています。 A列|B列|C列|D列 1   a   b   c 2   d   e 要するに、B列の値を認識して値が同じものを1行目に横並びにしたいのです。 関数やマクロでなんとかなりませんか? 膨大なデータがあるので手作業でやるととてもしんどいですし、間違いがでやすくなり困っています。 お願いいたします。

みんなの回答

noname#204879
noname#204879
回答No.3

「以下のような表」の左上隅の位置が Sheet1 のセル A1 とします。 1.Sheet1 のセル C1 に式 =COUNTIF(B:B,ROW(1:1)) を入力して、此れを下方に(当   該式の値が 0 になるまで)ズズーッと複写 2.Sheet2 のセル B1 に次式を入力し、此れを右方に好きなだけ(*1)ズズーッと複写   =IF(COLUMN(A:A)>Sheet1!$C1,"",OFFSET(Sheet1!$A$1,COLUMN(A:A)-1,0)) 3.Sheet2 のセル B2 に次式を入力し、此れを右方に(ステップ2と同じだけ)好き   なだけ(*1)ズズーッと複写   =IF(COLUMN(A:A)>Sheet1!$C2,"",OFFSET(Sheet1!$A$1,COLUMN(A:A)+SUM(Sheet1!$C$1:$C1)-1,0)) 4.ステップ3で式を埋め込んだ範囲(B2 から右端まで)を選択して、此れを下方に   ズズーッと複写 *1: 「好きなだけ」とは、1行あたりのデータの最大個数以上の列数だけ、という意味

  • nicotinism
  • ベストアンサー率70% (1019/1452)
回答No.2

こんな感じでどうでしょう?標準モジュールにコピペして下さい 一番左に元データのシートがあると仮定しています。 Sub test() Dim i As Long 'sheet1の行数カウンタ Dim j As Long 'Sheet2の行番号カウンタ Dim m As Long 'Sheet2の列番号カウンタ Dim k As Long 'Sheet1のセルの値を一時記憶   'Sheet(2)をクリア   Worksheets(2).Select   Cells.Select   Selection.ClearContents      'Sheet(1)をソートして整列 (余計なお世話?かも)マクロの記録より   Worksheets(1).Select   Columns("A:B").Select   Selection.Sort _     Key1:=Range("B1"), Order1:=xlAscending, _     Key2:=Range("A1"), Order2:=xlAscending, _     Header:=xlGuess, OrderCustom:=1, _     MatchCase:=False, _     Orientation:=xlTopToBottom, _     SortMethod:=xlPinYin, DataOption1:=xlSortNormal, _     DataOption2:=xlSortNormal      '変数初期値格納   i = 1   m = 1      Do Until Sheets(1).Range("B" & i).Value = ""          '値が変わったら行を一個下へ移動、列位置は元に戻す     If Sheets(1).Range("B" & i).Value <> k Then       k = Sheets(1).Range("B" & i).Value       j = j + 1       m = 1       Sheets(2).Cells(j, m).Value = k     End If          Sheets(2).Cells(j, m + 1).Value = Sheets(1).Range("A" & i).Value     i = i + 1     m = m + 1          If m = 257 Then       MsgBox "列数を超えました"       Exit Sub     End If        Loop      MsgBox "終了" End Sub

  • zap35
  • ベストアンサー率44% (1383/3079)
回答No.1

補足要求です 質問文ではB列は1から始まる数字で、昇順に並び替えされているような例を書いていただいていますが、これは実際のデータもそのルールですか? また補助セルを使用することは許されますか? >膨大なデータ とのことですが、データの行数はどれくらいで、B列の値はいくつくらいになりますか?

vvv_chiho_vvv
質問者

補足

B列の値ですが、昇順に並んでおります。 またA列はB列を基準に昇順に並んでいます。 (B列の値が同じものの中で昇順に並んでいます) 値は001-001のように3桁-3桁の組み合わせになっています。 行数は全部で1150行です。 横並びになればどのようでも結構ですので補助セルの使用はOKです。

関連するQ&A