• ベストアンサー

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

nishi6の回答

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

何度か読んでやりたいこと(かな?)を作ってみました。主旨を汲んでいなければお許しを。 参照リスト、未完成リスト、未完成リストの完成版が必要とお思いますので、それぞれSheet1,Sheet2,Sheet3に 対応して作りました。また、未完成リストの完成後フィルタを使ったりしてのコピー作業があるようなのでそれも組み込んでみました。コピーしたい列数-1をcopyColにセットします。私見ですがVBAで対応する場合は手作業を極力排除した方がいいと思います。質問ではA列の最後がどのようになっているか想像できませんでしたので、参照リスト個数>=<未完成リスト個数の3パターンに対応しています。(つもりです) Public Sub KanseiList() Dim rg1, rg2, rg3 As Range '基準とするセル Dim cot1 As Long '参照リストカウンタ Dim cot2 As Long '未完成リストカウンタ Dim cot3 As Long '完成リストカウンタ ' 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") '未完成リスト完成版 Worksheets("Sheet3").UsedRange.Clear ' 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) '参照リストしかない cot1 = cot1 + 1 End Select Wend End With End Sub

kiroro302
質問者

お礼

nishi6さん、早々のご回答ありがとうございます。早速やってみました。大成功でした。会社の皆で大喝采でした。本当にありがとうございます。今日は会社の仲間たちの顔が皆晴れやかで社内がパッと明るくなりました。ところでnishi6さん、ご相談のですが、こんなすばらしいプログラムを提供していただいて、恐縮なのですが、このプログラムに以下の機能を追加することは可能でしょうか?参照リスト(sheet1のデータ)にあって、未完成リストNo.1(sheet2のデータ)に無いデータは、未完成リスト完成版(sheet3)には反映されず無視されますよね。実はこの無視されたデータは後で、別の未完成リストNo.2と照し合せる必要があるのです。そこで、どのデータが無視されたものなのか後で分かるように,未完成リストNo.1上でこれらのデータに赤い色をつけるとか、またこのデータだけをsheet4に抽出する等(どちらか1つでいいのですが・・・)出来ますでしょうか?これが出来ると本当に鬼に金棒なのですが・・・。でもこのプログラムでも私たちにとっては本当に大助かりでございますので、もし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,”重複データ”,”○”) よろしくお願いいたします。