- 締切済み
関数でなんとかなりませんか?(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行目に横並びにしたいのです。 関数やマクロでなんとかなりませんか? 膨大なデータがあるので手作業でやるととてもしんどいですし、間違いがでやすくなり困っています。 お願いいたします。
- みんなの回答 (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)
こんな感じでどうでしょう?標準モジュールにコピペして下さい 一番左に元データのシートがあると仮定しています。 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)
補足要求です 質問文ではB列は1から始まる数字で、昇順に並び替えされているような例を書いていただいていますが、これは実際のデータもそのルールですか? また補助セルを使用することは許されますか? >膨大なデータ とのことですが、データの行数はどれくらいで、B列の値はいくつくらいになりますか?
補足
B列の値ですが、昇順に並んでおります。 またA列はB列を基準に昇順に並んでいます。 (B列の値が同じものの中で昇順に並んでいます) 値は001-001のように3桁-3桁の組み合わせになっています。 行数は全部で1150行です。 横並びになればどのようでも結構ですので補助セルの使用はOKです。