エクセルでの行のまとめ方

このQ&Aのポイント
  • エクセルでデータの塊を1行にまとめたい方法について教えてください。
  • データが複数行に分かれている場合、1行目の後に2行目を貼り付ける方法を教えてください。
  • データの塊とは、データが複数行に分かれているグループのことを指します。空白行が塊の間にあります。
回答を見る
  • ベストアンサー

エクセルでの行のまとめ方

エクセルで、データの塊を1行にまとめたいと思っています。 例) ┌─┬─┬─┐ │A │B │C │ ├─┼─┼─┤ │D │E │F │ ├─┼─┼─┤ │  │  │  │ ├─┼─┼─┤ │G │H │I │ ├─┼─┼─┤ │J │K │L │ ├─┼─┼─┤ │  │  │  │ ├─┼─┼─┤ │M │N │O │ ├─┼─┼─┤ │  │  │  │ ├─┼─┼─┤ │  │  │  │ ├─┼─┼─┤ │P │Q │R │ ├─┼─┼─┤ │S │T │  │ ├─┼─┼─┤ この様に並び替えたいのです。 ┌─┬─┬─┬─┬─┬─┐ │A │B │C │D │E │F │ ├─┼─┼─┼─┼─┼─┤ │G │H │I  │J │K │L │ ├─┼─┼─┼─┼─┼─┤ │M │N │O │  │  │  │ ├─┼─┼─┼─┼─┼─┤ │P │Q │R │S │T │  │ ├─┼─┼─┼─┼─┼─┤ つまり、データの1行目の後に2行目を貼り付ける。これをデータの塊分で処理を行いたいです。 データが3行あれば、データの1行目の後に2行目、2行目の後に3行目を貼り付けるみたいなイメージです。 ※1:データの塊と言うのは、上記で言うと、[A~F]、[G~L]、[M~O]、[P~T]になります。 ※2:列の数は上記では3列ですが、3列以上存在しています。 ※3:データの塊は例では2行になっていますが、データによっては2行以上存在する事があります。 ※4:但し、例えばデータの塊が2行であれば、その他のデータの固まりも2行ごとになります。 ※5:データが空白になっている場合があります。 ※6:データの塊と塊の行の間には、必ず空白行が存在しています。 下記のようにマクロ作って見ましたがうまく動きません。 解決策や、他にこのようにした方が良いよと言うのがあれば教えて下さい。 Sub TEST() '-------- x = 5 '-------- '-------- i1 = 26 '-------- o = 1 '行数チェック Do Until Cells(o, 1).Value = "" t = 1 '列数 s = i1 + 1 Do Until t = i1 + 1 Cells(o, s).Value = Cells(o + 1, t).Value Cells(o, s + i1).Value = Cells(o + 2, t).Value Cells(o + 1, t).Value = "" Cells(o + 2, t).Value = "" s = s + 1 t = t + 1 Loop o = o + x + 1 Loop

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

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

(数式ではなく)生データが記入されているとします それぞれのカタマリは,確実に「空っぽの行」で区切られているとします。 sub macro1()  dim w0 as worksheet, w as worksheet  dim ha as range, h as range  dim r as long, c as long  set w0 = activesheet  set w = worksheets.add(before:=activesheet)  for each ha in w0.range("A:A").specialcells(xlcelltypeconstants).areas   r = r + 1   c = 0   for each h in ha.currentregion    if h <> "" then     c = c + 1     w.cells(r, c).value = h.value    end if   next  next end sub

poppoyaya
質問者

お礼

ありがとうございます。 期待通りの動きになっています。 ご回答頂いたマクロを基に勉強も行います。

その他の回答 (1)

  • KURUMITO
  • ベストアンサー率42% (1835/4283)
回答No.2

マクロを組まれるほどのこともないでしょう。下記のように関数で対応することができます。 例えばお示しの最初の表がA列からC列の間に1行目から下方に入力されているとします。 お求めの表をE列からJ列に表示させるとしたらE1セルに次の式を入力して右横方向にJ1セルまでオートフィルドラッグコピーしたのちに下方にもオートフィルドラッグコピーします。 =IF(OR(COLUMN(A1)>6,INDEX($A:$C,(ROW(A1)-1)*3+ROUNDUP(COLUMN(A1)/3,0),MOD(COLUMN(A1)-1,3)+1)=0),"",INDEX($A:$C,(ROW(A1)-1)*3+ROUNDUP(COLUMN(A1)/3,0),MOD(COLUMN(A1)-1,3)+1))

poppoyaya
質問者

お礼

ありがとうございます。 うまく関数が動かなかったのですが、マクロで処理したかった理由は下記があります。 1.データの塊が数100以上ある。 2.行をまとめたいのであって、一つのセルにはまとめたくない。

関連するQ&A

  • 重複行を完全削除するエクセルのマクロ

    Sub sakujyo() Dim i, ii As Long For i = 1 To Range("a65336").End(xlUp).Row For ii = Range("a65336").End(xlUp).Row To i + 1 Step -1 If Cells(i, 2).Value = Cells(ii, 2).Value _ And Cells(i, 4).Value = Cells(ii, 4).Value _ And Cells(i, 5).Value = Cells(ii, 5).Value Then Dim iii As Byte iii = 1 Rows(ii).Delete Shift:=xlUp End If Next ii If iii = 1 Then Rows(i).Delete Shift:=xlUp iii = 0 Next i End Sub データーが下の表のように入っております。     A    B    C    E    F 1  1/26  a1234  fdsa  5000  C1 2  1/27  a4567  sdfa  4000  T2 3  1/28  a1234  dfsa  5000  C1 4  1/30  b4567  asdf  6600  A2 5  2/10  b4567  fsda  6600  A2 6  2/10  a1234  afds  5000  C1 B列、E列、F列が完全一致(重複1行目と3行目と6行目・4行目と5行目)で削除し結果的に2行目だけ残る方法がしたいのですが、このマクロですと少ないデータですとうまく動くのですが、『大量のデータを一気に削除出来ない』、『同じ重複が3つ以上のデータが多数ある場合データが削除されずに残ってしまう』エラーが出てしまいます。どうかお教えください。

  • VBAエクセル空白セル0の入力

    C列が空白となるまで、F列・・・L列の空白セルに0を代入する。 という処理を行いたく以下コードで実行をして ファイル種類をCSVにて、保存した後名前の変更で拡張子をTXTにすると データ入力された列の以降がカンマの羅列が「,,,,,,,,(改行)」の繰り返しで表示されてしまいます。 (CSV保存の後、視覚的に空白部分を行選択して削除するとなくなります。) どうすれば、このカンマが表示されなくなるでしょうか。 うまく説明できてないですが、アドバイス御願いします。 Dim i As Long i = 3 Do Until Cells(i, 3).Value = "" If Cells(i, 6).Value = "" Then Cells(i, 6).Value = "0" End If If Cells(i, 7).Value = "" Then Cells(i, 7).Value = "0" End If If Cells(i, 8).Value = "" Then Cells(i, 8).Value = "0" End If If Cells(i, 9).Value = "" Then Cells(i, 9).Value = "0" End If If Cells(i, 10).Value = "" Then Cells(i, 10).Value = "0" End If If Cells(i, 11).Value = "" Then Cells(i, 11).Value = "0" End If If Cells(i, 12).Value = "" Then Cells(i, 12).Value = "0" End If i = i + 1 Loop

  • 2行のセルの入れ替え。

     初めまして、よろしくお願いします。  セルに A B C D E F G H I J K L 1 a b c d e f 2 g h i j k l 3 m n o p q r 4 s t u v w x 5 " ・ " ・ " ・ " 100 "  という表があります。これを A B C D E F G H I J K L 1 a b c d e f g h i j k l 2 m n o p q r s t u v w x 3 " 4 " 5 " ・ " ・ " ・ " 100 "  という風に、偶数行のデーターを奇数行の後ろにつけるようにしたいと思います。無理ならば奇数行だけのデーター、偶数行だけのデーターとなるように、何かよい方法を教えて頂きたく、よろしくお願いします。

  • エクセル マクロで行の合計を数値で入力したい

    マクロ初心者です。 F列からAJ列までの合計をAK列に数値で入力しようとしています。 ただし、FからAJ列の各セルに全てデータは入っていません。 したがってFからAJ列のいずれかにデータが入っている最終行を 見つけて合計を算入しようとしているのですが下記の通りやっても うまくいきません。教えてください。 エクセルのバージョンは2002です。 Sub () 'データが入っている最終行まで合計額を数字で入力 LastRow = Cells(65536, COL).End(xlUp).Row For i = LastRow To 6 Step -1 Set myRange = Range(Cells(i, 6), Cells(i, 36)) Cells(i, 37).Value = WorksheetFunction.Sum(myRange) Next i End Sub

  • 2重のDo~Loopは?

    Excel VBAですが、A列にデータが入っています。 A列のデータが変わるまで 処理1 を実行し、変われば 処理2 を実行する。データがなくなれば終了する方法が分りません。宜しくお願いします。 i = 2 Do Until Cells(i, 1) = "" Do Until Cells(i, 1) <> Cells(i - 1, 1) 処理1 Loop 処理2 Loop

  • 列に並んだ数字群から一致する数字の行番号を抽出

    下記のように B列に数字が縦に並んでいます。 28.11684736 28.12102177 28.12519803 28.12937616 28.13355614 28.13773798 28.14192168 28.14610723 28.15029464 28.15448391 28.15867503 28.16286801 28.16706285 28.17125955 28.1754581 この数字群から、例えば 28.15448391 に一致する数字の行を見つけて その行番号を抽出するコードはどのように記述したらよいのでしょうか。 番号はA1のセルに置きます。 但し、条件があって Excel2000~Excel2003の全てのバージョンに共通する こと。そして列のデータ数が約10000程度はあることです。どこから 手をつけてよいのか判らないので、よろしくお願いします。 簡単な例では下記でもよさそうですが。より早く求めるには???  A= Range("B65536").End(xlUp).Row I=0 Do I=I+1 Loop until Cells(I,2).value=28.15448391  Range("A1")=I

  • エクセルについて

    エクセルにおいて、下記のように1~5のみ残し、その他無くなった数字は見えなくする、もしくわ文字の色を白にして見えないようにしたいと思っています。   A B C D E F G H I J K L M N O P Q R S T U 1 0 0 0 0 0 1 2 3 3 3 3 3 4 5 5 5 5 5 5 5 5 2 0 0 1 2 2 2 2 3 4 4 5 5 5 5 5 5 5 5 5 5 5         ↓         ↓   A B C D E F G H I J K L M N O P Q R S T U 1 1 2 3 3 3 3 3 4 5 2   1 2 2 2 2 3 4 4 5 私は基本的な関数は使用出来ますが、VBAは勉強し始めたばかりです…。 良い方法をご教示頂ければと思っております。 よろしくお願いいたします。 ※記入した例において、1~5の列がズレていますが、行も列も同じばしょのままでお願いします。

  • エクセル 行の挿入

    エクセルの行の挿入方法を教えてください。 http://okwave.jp/qa1095365.html?rel=innerHtml&p=bottom&l=1 上記の質問のマクロをコピーし、少し加工して使用させていただいてます。 Sub Macro1() Dim lngCnt As Long '処理行のカウント Dim intCnt As Integer '挿入行数セット ''初期行セット lngCnt = 5 '' 処理行のD列に文字がなくなるまで繰り返す Do Until Cells(lngCnt, 4) = vbNullString ''挿入行数セット intCnt = Cells(lngCnt, 4) + 1 ''挿入行分繰り返す Do Until intCnt <= 0 ''次の行に進む lngCnt = lngCnt + 1 ''行の選択 Rows(lngCnt & ":" & lngCnt).Select ''行の追加 Selection.Insert Shift:=xlDown ''1行追加したので挿入行数から1引く intCnt = intCnt - 1 Loop ''処理行数カウントアップ lngCnt = lngCnt + 1 ''1シートの最大行数を超えたか? If lngCnt > 65536 Then MsgBox "1シートの最大行数を超えました" Exit Do End If Loop ''A1を選択 Range("A1").Select End Sub このマクロでは '' 処理行のD列に文字がなくなるまで繰り返す Do Until Cells(lngCnt, 4) = vbNullString なので、一行抜けてしまうとマクロが止まってしまいます。 これをD行に数字が入っている所はすべて増えるように?止まらないようにしたいのです。 どうすればいいでしょう? 宜しくお願いします。

  • excelマクロについて

    お世話になります。 下記のように間引きしたいのですが、 0.10.20.30,40,50.60→0.100.200 何故か80からスタートしてしまいます。 0.10.20.30,40,50.60→80.180.280 宜しくお願いします。 Sub test() Application.ScreenUpdating = False i = 1 '1行目の意味 mydata = Cells(i, 1) 'A列でデータが存在するか判定 Do Until mydata = "" '空白になるまで繰り返し処理 Rows(i).Resize(9).Delete '9行の削除 i = i + 1 mydata = Cells(i, 1) Loop Application.ScreenUpdating = True End Sub

  • エクセルの行の削除を配列で高速化したい

    A列にID番号(012345等の文字列化した数字) B列に属性(A、B、C等の文字列) C列に数値  のようなデータがあります。 1行目はタイトル行です。 最優先されるキーをA列、2番目に優先されるキーをB列にして並べ替えてあります。 A列、B列のデータは重複するものがあります。 このデータを、 A列のID番号が同じだった場合、上の属性がA、次の行の属性がBの組み合わせだった場合のみ、下の行のC列の数値データを上の行のC列の数値に加算して、下の行を削除します。 以下のマクロを書き、うまくいきました。 Sub 集計() Dim i As Long, r As Long r = Cells(65536, 1).End(xlUp).Row Application.ScreenUpdating = False For i = r To 2 Step (-1) If Cells(i, 1) = Cells(i - 1, 1) Then If Cells(i, 2) = "B" And Cells(i - 1, 2) = "A" Then Cells(i - 1, 3) = Cells(i - 1, 3) + Cells(i, 3) Rows(i).Delete End If End If Next Application.ScreenUpdating = False End Sub しかし、データ数が多いので1分以上かかってしまいます。 多分、配列に取り込んで処理できれば飛躍的に高速化できるとは思うのですが、 V = Range(Cells(2, 1), Cells(r, 3)).Value と取り込んだあと、どう処理したらいいのかわかりません。 教えてください。

専門家に質問してみよう