- ベストアンサー
Excelで縦の並び順が違っていたて統一する方法
以下のように本名を先頭に4項目並んでいるデータが数千件あるのですが 本名 価格 発行年 著者 本名 価格 発行年 著者 ・ ・ このデータの中で先頭が本名で、並び順は変わらないのですが 価格の行が抜けていたり、著者の行が抜けているデータも あります。 これらのデータを4項目に統一したいです。 今考えている方法はマクロでA列を選択して「本名」の 次の行が「価格」になっていなかったら、行を追加して 「価格」行を作る感じです。 多分マクロが手っ取り早いと思いますが、ご教授 お願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
merlionXX さんの [回答番号:No.2] の「Sub test01()」と同じ条件下です。 セル A1 から1セルずつ下に下がっていって、項目が合致しない場合に [行挿入] - [項目名入力] します。 Sub Macro1() Dim myKomoku As Variant, i As Byte myKomoku = Array("本名", "価格", "発行年", "著者") Range("A1").Select Do For i = 0 To 3 If Selection.Value <> myKomoku(i) Then Selection.EntireRow.Insert Selection.Value = myKomoku(i) End If Selection.Offset(1).Select Next Loop Until Selection.Value = "" End Sub
その他の回答 (2)
- merlionXX
- ベストアンサー率48% (1930/4007)
データがA1から始まっているものとします。 データは、本名、価格、発行年、著者の四種類のみとします。 データ列(A列)の途中には空白セルがないものとします。 データの抜けはあっても並びはかならずご提示の通りとします。 以上の前提でつくってみました。 Sub test01() With ActiveSheet .Cells(1, 1).Activate Do Until ActiveCell.Offset(1).Value = "" Select Case ActiveCell.Value Case "本名" If ActiveCell.Offset(1).Value <> "価格" Then ActiveCell.Offset(1).EntireRow.Insert ActiveCell.Offset(1).Value = "価格" End If Case "価格" If ActiveCell.Offset(1).Value <> "発行年" Then ActiveCell.Offset(1).EntireRow.Insert ActiveCell.Offset(1).Value = "発行年" End If Case "発行年" If ActiveCell.Offset(1).Value <> "著者" Then ActiveCell.Offset(1).EntireRow.Insert ActiveCell.Offset(1).Value = "著者" End If End Select ActiveCell.Offset(1).Activate Loop End With End Sub
お礼
早速の連絡ありがとうございました。 テストしたら正に希望通りの結果が出ました。 早速実務で生かしてみます。
- ASIMOV
- ベストアンサー率41% (982/2351)
A列に「本名」とか「価格」と入っていて、B列に「○○○○」(本の名前)とか「1500円」と入っているのか... それとも、いきなりA列にデータが入っているのか? どうなんでしょう
補足
ご連絡ありがとうございます。 A列に「本名」とか「価格」と項目だけ入っていて、B列には そのデータが入力されています。
お礼
早速の連絡ありがとうございました。 試したところ、merlionXXさんと結果は同じですが コードは簡潔ですね。 助かりました。 マクロって勉強したら便利そうですね。