• ベストアンサー

エクセル VBA データ並び替えと行削除

zap35の回答

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

>このサンプルをベースにIF文等を加えないと問題は解決できない ということなのでしょうか? そうですね。そう思います。 質問文にあるとおりのデータを手で入力して、#01さんのマクロを実行すればちゃんと動きます。試されましたか? それが動かないとすれば「実際のデータには質問文に書かれていない『何か』があるから」ではないでしょうか。 例えば「部品番号が昇順になっていなくて同じ番号が繰り返し出現する」、「一つの部品番号が256以上のユニットで利用されている」、「A列の*は関数で表示している」などです。 実際のデータが分からないのでB列、C列のデータだけで処理するようにしてみました。A列のデータに意味があるならご自身で書き換えてください Sub Macro1() Dim ws As Worksheet Dim idx, ptr As Long Dim trg As Range   Set ws = ActiveSheet   On Error GoTo end0   Application.ScreenUpdating = False   Worksheets.Add after:=ws   With ws     .Rows(1).Copy Destination:=Rows(1)     For idx = 2 To .Range("B65536").End(xlUp).Row       If .Cells(idx, "B").Value <> "" Then         Set trg = ActiveSheet.Columns(2).Find(what:=.Cells(idx, "B").Value, _               LookIn:=xlValues, Lookat:=xlWhole)         If trg Is Nothing Then           Range("B65536").End(xlUp).Offset(1, 0).Value = .Cells(idx, "B").Value           ptr = Range("B65536").End(xlUp).Row         Else           ptr = trg.Row         End If         If Application.CountIf(Rows(ptr), .Cells(idx, "C").Value) = 0 Then           If Cells(ptr, "IV").Value = "" Then             Cells(ptr, "IV").End(xlToLeft).Offset(0, 1).Value = _               .Cells(idx, "C").Value           Else             MsgBox "列数が256を超えるので処理できません"             Exit For           End If         End If         Set trg = Nothing       End If     Next idx   End With end0:   Application.ScreenUpdating = True End Sub

nankoro_x
質問者

お礼

無事に問題を解決することができました。 ありがとうございました。

関連するQ&A

  • エクセル VBAにて行削除をしたい…

    エクセル2003にて VBA初心者です。 A列1~100に101~200までに番号が振ってあります。 Z列に記入がない場合はその行を削除するVBAを教えてください。 例  A  B  C  D  E  F …… Z 1  101               文字有り 2  102               ブランク 3  103               ブランク 4  104               文字有り 5  105               文字有り … 99  199              文字有り 100  200              ブランク この様な場合2,3,100の行ごと削除をするという形式のものです。 また、この場合A列の番号も自動で変われば(104が102になる等)最高です。 詳しい方教えてください。よろしくお願いします。

  • エクセル 複数行にまたがっているデーターを一つの行

    以前に似たようなVBAの質問を元にさらにやりたいVBAがあるのですが、 (前の質問者のURL:http://okwave.jp/qa/q4955096.html)       A列  B列   C列   D列   E列 ~ R列 1行目  佐藤 北海道 りんご S 100 105 2行目  佐藤 北海道 ばなな M 100 105   3行目 伊藤  東京  いちご S 100 105 4行目  伊藤  東京  ばなな M 100 105 上記のようなデーターがあります。これを2行目と4行目を削除し下記のようにしたいのですが       A列  B列      C列      C列 1行目  佐藤 北海道  りんご,ばなな  S,M 2行目  伊藤  東京   いちご,ばなな  S,M A列とB列とE列~R列のデーターが同じでC列,D列,のデータが異なる場合、上記のように一行にまとめたいのです。関数やVBAで上記の処理を出来る方法がありますでしょうか。 

  • エクセルデータの並び替え

    A列とB列に文字列ばかりのデータがあります。 C列に、A列の1データに対してB列の5データが続くように並べたいのです。 A列  B列  C列 a    1   a b    2     1 c    3     2 d    4     3 e    5     4 f    6     5 g    7     b h    8     6 i    9     7 j    10     8 k    11     9 l    12     10   以下、C列には、  c 11 12 13 14 15 d 16 17 18 19 20 e 21 ・・・・と続きます。 こんなことは関数処理で可能でしょうか。 手作業でやりだしたのですが、手間がかかるので質問させていただきました。どうぞ、よろしくお願いします。

  • マクロで行の並び替え+整列させる

    (1)以下の様にセルにデータが入っているとします。 (C列のデータが1行ずれて入っています。かつD列には1種類OR2種類のデータが入ってます。) A B C D E F 1 ● ● ● ● ● 2       ☆ 3   ● 4 ○ ○ ○ ○ ○ 5   ○ 6 ● ● ● ● ● 7 ☆ (2)これを以下の通りに並び替え+整列します。 (C列のデータが1行ずれて入っています。 かつD列に2種類のデータが入っている場合、改行して整列します。) A B C D E F 1 ● ● ● ● ● ● 2 ☆ 3 ○ ○ ○ ○ ○ ○ 4 ● ● ● ● ● ● 5       ☆    こんな説明で分かるでしょうか?ご指南よろしくお願いします。 m(_ _)m

  • エクセルまたはVBAで重複行を削除

    例えば、 A B 1 1 a 2 2 b 3 3 c 4 4 d 5 4 d 6 5 e 7 6 g 8 6 g といった表があるとします。 A列をキーに、昇順にされた一覧表です。 ここで番号が重複している行、この例では4行目と5行目、7行目と8行目がそうです。 こういった重複した行を検索して、行削除したいのですがどんな方法が可能でしょうか? 最終的にはVBAでのイベントになるでしょうが、それ以前にエクセルで前準備などしておくようなことは必要でしょうか? 表自体はかなり膨大な量のデータベースです。 よろしくお願いします。

  • VBA,二つのExcelのsheetにデータ保存

    VBA初心者です。 皆様のお力をお貸し頂きたく質問させて頂きます。よろしくお願いいたします。 質問内容は、下記になります。 Excelのsheet1には、縦列A,B,C・・・とデータが入っております。 sheet1の例 A B C sheet2は、入力するsheetです。 今回はA列の3行目からとします。 問題は、sheet1の縦の列をA,B,C,Dとすればデータの更新は、出来るのですが sheet1のデータのA,B,C一つ飛んでEまた一つ飛んでGという感じでsheet1のデータを 飛ばしてsheet2に表示、更新(保存)をしたいと思います。 ですので、sheet2のA列の3行目からA,B,C,飛んでE飛んでGとsheet1からデータを 表示させ、さらにsheet2の入力値が変更されると、sheet1のデータが入っている A,B,C,E,Gに更新される仕様です。 sheet1(データが入っています) A , B , C , E , G , 値1 , 値2 , 値3   , 値4 , 値5 sheet2(入力する、入力したデータは、sheet1へ更新される) A列 3行目 、sheet1の値1(A列)が入ります。 4行目 、sheet1の値2(B列)が入ります。 5行目 、sheet1の値3(C列)が入ります。 6行目 、sheet1の値4(E列)が入ります。 7行目 、sheet1の値5(G列)が入ります。 以上です。申し訳ございませんが、ご教授よろしくお願いいたします。

  • Excel VBAにてデータのある列の指定とブック間コピーについて

    初めまして。Excel VBA初心者です。よろしくお願いします。 以下の表の状態で、たとえば、B列の2行目からデータが使用されている行(以下の例では40行目ですが、ブックの内容により行数が変化します)まで、別のブックにコピーする方法があれば教えて頂きたいです。 すみませんが、よろしくお願いいたします。 A B C D E ------------------------------- 1 あ い う え お 2 い う え お か     ・     ・ ・ 40 a b c d e

  • エクセル 複数行にまたがっているデーターを一つの行にまとめたい

          A列  B列   C列 1行目  佐藤 北海道 りんご 2行目  佐藤 北海道 ばなな   3行目 伊藤  東京  いちご 4行目  伊藤  東京  ばなな  上記のようなデーターがあります。これを2行目と4行目を削除し下記のようにしたいのですが       A列  B列      C列 1行目  佐藤 北海道  りんごばなな 2行目  伊藤  東京   いちごばなな A列とB列のデーターが同じでC列のデータが異なる場合、上記のように一行にまとめたいのです。関数やVBAで上記の処理を出来る方法がありますでしょうか。 

  • エクセルVBAで重複データの削除

    A列、B列、C列・・・とデータが入っていて、B~D列の5行目から10行目が関連の有るデータのかたまりとします。 C~D列の全てのデータが重複している場合に、最初のほうのデータ(行番号が小さいほう)を残すものとして、重複データを削除したいのです。 削除するときは、 B~Dの範囲で削除する。A列等は削除しない。 削除したらデータは上に詰める。 データはソートしない。 ということをやりたいのですが、簡単に出来ますでしょうか? 良く覚えていないのですが、ネット上で色々探してみても、必ずソートしている気がしたので、ソートしない方法が知りたいのですが。

  • Excelで、同一データ行を知るには

    Excel2000で、 A列からD列までまったく同じデータの場合、色をつけてくれる方法を教えてください。 例えば、 A20=A100 かつ B20=B100 かつ C20=C100 かつ D20=D100 の場合、同じデータとして、20行目と100行目に色をつけるようにしたいです。 次善の策として、 A列からD列だけでなく、E列以降もすべてまったく同じデータの場合でもいいです。 なお、ソートしたり、行の順番を変えるのはナシにしてください。 また、A列からD列のデータをくっつけるのも、できれば避けたいです。(それぞれの列を比較して異なる場合でも、くっつけたら同じになる場合もありうるので。)