• ベストアンサー

Excel VBAでデータを自動処理したい(2)

nishi6の回答

  • ベストアンサー
  • nishi6
  • ベストアンサー率67% (869/1280)
回答No.5

充実した昼休みでした! ***追加A*** とコメントがある行はSheet4作成用です。 ***追加B*** はSheet1で無視したデータの先頭セルを赤にします。(記入されていた、未完成リストNo.1上でこれらのデータに赤い色をつける・・・は参照リストを対象にしました) ***追加AB*** は両方に必要な行です。コメント行もありますが。 前回は未完成リストより大きい番号の参照リストデータは無視していましたが、処理対象とするためWhile、Wendを追加しています。 試して見て下さい。うまくいくといいですね。では。 Public Sub KanseiList() Dim rg1, rg2, rg3 As Range '基準とするセル Dim rg4 As Range '基準とするセル ***追加A*** Dim cot1 As Long '参照リストカウンタ Dim cot2 As Long '未完成リストカウンタ Dim cot3 As Long '完成リストカウンタ Dim cot4 As Long '無視リストカウンタ ***追加A*** ' Const copyCol = 3 'コピーする列数(0から) Dim cl As Integer '列カウンタ ' Set rg1 = Worksheets("Sheet1").Range("A1") Set rg2 = Worksheets("Sheet2").Range("A1") Set rg3 = Worksheets("Sheet3").Range("A1") Set rg4 = Worksheets("Sheet4").Range("A1") '***追加A*** Worksheets("Sheet3").UsedRange.Clear Worksheets("Sheet4").UsedRange.Clear '***追加A*** ' '前回赤にしたセルを元に戻しておく(再処理への備え) '***追加B*** Worksheets("Sheet1").Range("A:A").Interior.ColorIndex = xlNone '***追加B*** ' With rg2 While .Offset(cot2, 0) <> "" Select Case True Case .Offset(cot2, 0) = rg1.Offset(cot1, 0) '参照リストと未完成リストが一致 While .Offset(cot2, 0) = rg1.Offset(cot1, 0) For cl = 0 To copyCol '参照リストのAからD列をコピーする rg3.Offset(cot3, cl) = rg1.Offset(cot1, cl) Next cot1 = cot1 + 1 '参照リストを更に調べる cot3 = cot3 + 1 Wend cot2 = cot2 + 1 Case rg1.Offset(cot1, 0) <> "" And .Offset(cot2, 0) < rg1.Offset(cot1, 0) '未完成リストしかない(参照リストはある) While rg2.Offset(cot2, 0) <> "" And .Offset(cot2, 0) < rg1.Offset(cot1, 0) rg3.Offset(cot3, 0) = .Offset(cot2, 0) cot2 = cot2 + 1 '未完成リストを更に調べる cot3 = cot3 + 1 Wend Case rg1.Offset(cot1, 0) = "" '未完成リストしかない(参照リストがない) rg3.Offset(cot3, 0) = .Offset(cot2, 0) cot2 = cot2 + 1 cot3 = cot3 + 1 Case .Offset(cot2, 0) > rg1.Offset(cot1, 0) '参照リストしかない For cl = 0 To copyCol '***追加A*** rg4.Offset(cot4, cl) = rg1.Offset(cot1, cl) '***追加A*** Next '***追加A*** '色(赤色=3)をつける ***追加B*** rg1.Offset(cot1, 0).Interior.ColorIndex = 3 '***追加B*** cot4 = cot4 + 1 '***追加A*** cot1 = cot1 + 1 End Select Wend '参照リストにまだデータがある場合(基準とした未完成リストはデータがなくなった) ***追加AB*** While rg1.Offset(cot1, 0) <> "" '***追加AB*** For cl = 0 To copyCol '***追加A*** rg4.Offset(cot4, cl) = rg1.Offset(cot1, cl) '***追加A*** Next '***追加A*** '色(赤色=3)をつける ***追加B*** rg1.Offset(cot1, 0).Interior.ColorIndex = 3 '***追加B*** cot4 = cot4 + 1 '***追加AB*** cot1 = cot1 + 1 '***追加AB*** Wend '***追加AB*** End With End Sub

kiroro302
質問者

お礼

nishi6さん、お昼休みの貴重なお時間を割いてまで、私どものわがままな申し出を聞いてくださり、何とお礼を申し上げればよいか分かりません。しかも2通りのプログラムをこんな短時間で作られてしまうなんて、社員一同驚愕しております。先にご回答くださったapril21さんもnishi6さんも何て素晴らしい技術をお持ちなんでしょう!!うらやましい限りでございます。このプログラムはまさに鬼に金棒です。本当に何から何までお世話になり、ありがとうございました。今回のことで私は真剣にプログラミングに取り組んでみようと強く思うようになりました。nishi6さんもapril21さんも私に新たな分野に挑戦するきっかけをくださいました。このことは私の人生にとって大きな意味を持つように思います。昼間nishi6さんのご回答を会社で読んだのですが、午後私は出かける予定があり、プログラムの実行が出来ませんでしたので、明日早速やってみようと思っております。とってもわくわくしております。本当にどうもありがとうございました。

関連するQ&A

  • Excel VBAでデータを自動処理したい

    Excelで大量のデータ処理をしなくてはならないのですが、以下の処理をExcel VBAで自動処理できないでしょうか? どなたかお知恵をお貸しください。 (1)A、B、C列からなるリストがあります。A,B列にはそれぞれオートフィルタが設定してあり、C列は空白です。A列、B列にそれぞれ条件を設定し、抽出したデータのC列(空白)に特定のデータを入力します。A列、B列2つの条件の組み合わせが100通りくらいあり、現在手動でオートフィルタを設定し、C列にデータを入力しております。例えばA,B列の条件の組み合わせと、それに対応するC列に入力するデータを表にしたテーブルを別に作り、A,B列の条件を自動に設定して、抽出し、C列にデータを自動に入力することを、テーブルの一番上の行から最後の行まで繰り返す、というようなことをVBAでExcelにしてもらいたいのです。自分でちゃんと勉強し、調べて、それでも分からなかったらお聞きするというのが筋だと思うのですが、今この仕事に追われて、時間がありません。(ほとんど毎日午前様です。)この仕事が片付いたら、じっくりVBAを勉強したいと思っております。どうぞよろしくお願いいたします。

  • Excel VBA 外部データ(CSV)の自動読込について 

    VBAに関して昨日基本書を読み始めたばかりの初心者です。 業務の効率化が急務であるという手前勝手な都合により、 さっそくの他力本願で失礼とは思いますが 以下のケーススタディについてアウトラインだけでも助言をいただけないでしょうか。 帳票[yyyymmdd].csv ←末尾に年月日 日毎にCSVファイルが存在する A1:A10 B1:B10 C1:C10 の範囲の値を 期間集計.xlsx のそれぞれシート別のyyyymmdd列1行~10行にコピーする sheet1の[yyyymmdd]列1行:10行 ←A1:A10の値 sheet2の[yyyymmdd]列1行:10行 ←B1:B10の値 sheet3の[yyyymmdd]列1行:10行 ←C1:C10の値 過去数年分の日毎帳票を一括で自動処理したいと思い、 マクロの記録機能を使用したのですがどうしてもうまくいきませんでした。 特にわからないポイントが ・CSVファイルを開かずに参照する処理  (Excelで開かずにどうしてセルの範囲を指定できるのかという矛盾が生じてる気はするのですが・・・) ・自動的に帳票[yyyymmdd].csvを昇順に参照する処理 ・それをyyyymmddに対応した列にコピーする処理  以上のVBA処理についての助言をいただけますようよろしくお願いします。 Excelのバージョンは2007です。

  • エクセルで処理を繰り返す。Excel VBAで質問です。

    次のようなマクロを考えています。 “シート1”で県名をリストから選ぶと“シート2”のデータ(文字) を“シート3”に入れていく、というものです。 “シート1” C11セルがリストになっていて県名が選べる “シート2” A列に県名 1 東京都 ああああああ 2 dddd 3 4 てててててて 5 ggggggggggg 6 神奈川 つつつつつつ 7 qqqqqqqqqqqq 8 かかかかかかか 9 aaaaaaa B列にデータが文字列であります。A列では空白になっていますが、 B列では1から5行目までデータがあります(東京都の場合)。ただ 3行目のように空白になってい場合もあります。 ここでやりたいのは、例えばシート1のリストが東京都の場合、 ・シート2のA列に東京都を見つけて、 ・シート2のA列が次の県名になるまでB列のデータを ・シート3のB17から下にコピーする というものです。分からず困っていますがどなたか教えていただけないでしょうか。 ※画面の設定がうまくいかないんですが、A列が県名、それ以外はB列に入っています。

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

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

  • エクセルのセル内重複データの処理について

    下記のような雪だるま式に増え続けるエクセルの 重複データの処理で困っています。 ただし重複部分を削除したデータの文字数は 一定ではありません。 A列 あいうえお あいうえおかきくけこ あいうえおかきくけこさしすせそ    ・    ・    ↓ あいうえお かきくけこ さしすせそ    ・    ・ 以上のように処理できないでしょうか。 よろしくご回答をお願いします。

  • EXCELで分かれたシート間の同一データ行を自動削除して結合したい

    EXCELで、シート1、シート2に分かれたデータがあります。 それぞれのシート間でC列~F列の値が重複している行、シート1側のG列の数値がマイナス になっている行を自動で削除してからデータを1つのシートに結合する方法を探しています。 条件は、シート1側の重複データ行のみを削除し、シート2側のデータが必ず残る方法であ る必要があります。G列のマイナス行を削除するのはシート1側のみです。 シート1がA列~I列、約3万行、シート2がA列~K列、約1千行くらいです。 シート2側のみJ列~K列(数値データが入っています)が存在しますが、シート1側は空欄です。 列の数は変わりませんが、行数が都度変動しますのでマクロでコピー先のセル位置を決め打ちする 事が出来ません。 1つのシート上で重複するデータを削除する方法は見つける事が出来たのですが、残す方のデータ が指定出来ないのと、複数のシート上の重複データを削除する方法が見つかりませんでした。 何か良い方法がありましたら、ご教授下さい。

  • エクセルVBA 重複データから1種類ずつ抽出

    いつもお世話になります。 5万行のエクセルデータで、A列に20種類のデータが重複しています。 このデータを、別シートのA1~A20に1種類ずつコピーしたいのです。 オートフィルタ→フィルタオプション→重複するレコードは無視するでチャレンジしてみたのですが、5万行だとデータ量の関係で時間がかかりすぎるので、VBAでもっと短時間で出来ないかと思い、投稿させていただきました。 よろしくお願いいたします。

  • Excel 2007 マクロ 同列のデータの重複チェック

    Excel 2007 マクロ 同列のデータの重複チェック A列で重複しているデータをチェックします。 重複しているデータについて、B列にフラグをつけます。 フラグはどの行とどの行が重複しているのかわかるようにしたいです。 そのため重複している行同士ごとにフラグをつけます。 上記の内容はマクロで実現できるのでしょうか。 元データと完成形の画像を添付します。 よろしくお願いします。

  • エクセル 複数シートのデータをまとめたい

    他の質問を参照したのですが、できないのでお願いします。 新しいシート(ブックでもいいです)に次のデータを ひとまとめにしたい。 外国語テストのデータです。 (1)ひとつのブックにシートが十枚ある (2)列a2~h2 行2~29までデータがある。 (3)列a番号(a2が1、a29が28)  列b空欄  列c日本語  列d外国語 この構造を倍にしているのでa~hにデータが並んでいる。 これを、 つまり、8×28のデータが各シートにあるわけですが 【ひとつ】 できればシート1のデータの下 29行目からシート2のデータ、58行目からシート3… というように並べたい。 【ふたつ】 更にできるならa~dの下にe~hを持ってきて 4×56の並びにして 57行目からシート2のデータ…というように並べたい。 データの並びは列a列eの番号順を保持できたらうれしいです。 どうぞよろしくお願い致します。

  • Excel 2007 重複データのチェックについて

    Excel 2007 重複データのチェックについて A列にあるデータ(約100件)で重複している値がある 行についてB列にフラグをつけます。 やりたいことはどの行とどの行が重複しているのかを すぐに分るようにしたいです。 添付画像のように重複している行に番号をつけていくことは可能でしょうか。 番号は1から順番に増えていきます。 自分は下記を考えましたが、これでは重複している行に「重複データ」と入る だけでわかりづらいです。 =IF(COUNTIF($A$2:A2,A2)>1,”重複データ”,”○”) よろしくお願いいたします。