• ベストアンサー

excel2003 重複削除マクロ 再質問

QNo.3630625 excel2003 重複削除マクロ 回答マクロを実行した結果、うまくいかないケースがあり、再質問させて頂きました。 winxp he sp2, office2003 AB重複銘柄を削除した結果を、CDに書くマクロを教えてください。 この例では、日経300投信 チャイナボーチーが重複しています。 AB(銘柄コードと銘柄名)は一体です。データは沢山あります。1700個。 列がずれて見にくいです。 A    B       C   D 1313 KODEX200 1313 KODEX200 1319 日経300投信  1319 日経300投信 1319 日経300投信  1380 秋川牧園 1380 秋川牧園     1381 アクシーズ 1381 アクシーズ    1412 チャイナボーチー 1412 チャイナボーチー 1724 シンクレイヤ 1412 チャイナボーチー 1735 伊田テクノス 1412 チャイナボーチー 1753 土屋ツーバイホーム 1724 シンクレイヤ   1783 A.Cホール 1735 伊田テクノス 1753 土屋ツーバイ 1783 A.Cホール 回答: 1行目は項目名と判断されてしまいますので提示の例ではうまく行きましたが、正しくありません。 では、マクロ作業上でダミーで先頭に1行追加し、項目を振り、終了後にダミー行を削除するように変えてみました。 逐条で解説もつけておきます。 Sub test03() Dim x As Long 'xは長整数と宣言 With ActiveSheet 'アクティブなシートで .Rows("1").Insert Shift:=xlDown 'ダミー行挿入 .Range("A1") = "Code" 'ダミー項目1 .Range("B1") = "Name" 'ダミー項目2 x = .Cells(.Rows.Count, 1).End(xlUp).Row '最終行取得 .Range("A1:B" & x).Select '範囲選択 Selection.AdvancedFilter Action:=xlFilterInPlace, Unique:=True '重複を表示しない Selection.Copy .Range("C1") 'コピーしてC1以降に貼り付け .ShowAllData 'すべてを表示 --------------------------------------ここでデバッグエラーが発生します。 .Rows("1").Delete Shift:=xlUp 'ダミー行削除 End With End Sub エラーが発生するケースまでは、特定していません。 よろしくお願いします。

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

  • ベストアンサー
  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.4

Sub try()   Dim Dic As Object   Dim vv, v, x   Dim i As Long, j As Long, k As Long   Set Dic = CreateObject("Scripting.Dictionary")   With ActiveSheet        vv = .Range(.[A1], .Cells(Rows.Count, 1).End(xlUp).Resize(, 2)).Value        ReDim v(1 To 2, 1 To UBound(vv, 1))        ReDim x(1 To 2, 1 To UBound(vv, 1))        For k = 1 To UBound(vv, 1)            If Len(Trim(vv(k, 1))) < 5 Then               i = i + 1               v(1, i) = vv(k, 1)               v(2, i) = vv(k, 2)               If Not Dic.exists(vv(k, 1)) Then                  Dic(vv(k, 1)) = Empty                  j = j + 1                  x(1, j) = vv(k, 1)                  x(2, j) = vv(k, 2)               End If            End If        Next        ReDim Preserve v(1 To 2, 1 To i)        ReDim Preserve x(1 To 2, 1 To j)        .Cells.ClearContents        .Range("A1").Resize(i, 2).Value = Application.Transpose(v)        .Range("C1").Resize(j, 2).Value = Application.Transpose(x)   End With  Set Dic = Nothing  Erase v  Erase x End Sub こうゆう感じの事でしょうか?

esd827
質問者

お礼

1705個のデータで確認しました。希望通りの結果が得られました。 親切な対応 ありがとう御座いました。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (4)

  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.5

> エラーが発生するケースまでは、特定していません。 重複データがないばあいだと思います。 これでどうでしょう? 銘柄コードが10000以上も削除しています。 Sub test04() Dim x As Long, y As Long 'xyは長整数と宣言 With ActiveSheet 'アクティブなシートで .Rows("1").Insert Shift:=xlDown 'ダミー行挿入 .Range("A1") = "Code" 'ダミー項目1 .Range("B1") = "Name" 'ダミー項目2 x = .Cells(.Rows.Count, "A").End(xlUp).Row 'A列最終行取得 .Range("A1:B" & x).Select '範囲選択 Selection.AdvancedFilter Action:=xlFilterInPlace, Unique:=True '重複を表示しない Selection.Copy .Range("C1") 'コピーしてC1以降に貼り付け On Error Resume Next 'エラーをスキップ .ShowAllData 'すべてを表示 On Error GoTo 0 'エラースキップを終了 y = .Cells(.Rows.Count, "C").End(xlUp).Row 'C列最終行取得 .Range("C1:D" & y).Select '範囲選択 Selection.AutoFilter Field:=1, Criteria1:=">=10000" Selection.ClearContents .Rows("1").Delete Shift:=xlUp 'ダミー行削除 End With End Sub

esd827
質問者

補足

その通りでした。1705個*20ケースでokを確認しました。 親切な対応 ありがとう御座いました。

全文を見る
すると、全ての回答が全文表示されます。
  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.3

>ABに5桁(10000以上)の銘柄があります。この銘柄がある行を削除したいのです。 AB列ですか?A列のコードの事ですか? 行削除とは、C・D列にデータがあってもその行は削除? それとも、C・D列に5桁のデータを転記しないと言う事ですか?

esd827
質問者

補足

ありがとう御座います。 A   B 25935 伊藤園第1種優先株式 5桁コードがある行を削除したいのです。C・D列に5桁のデータを転記しないと言う事です。 詳細: まず最初に、5桁のある行を削除します。それから、このマクロを起動したいのです。特殊な銘柄を最初に削除したいのです。 よろしくお願いします。

全文を見る
すると、全ての回答が全文表示されます。
  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.2

ANo.1です。 >ここでデバッグエラーが発生します。 このエラーが参照先の   実行時エラー'1004':   WorkSheetクラスのShowAllDataメソッドが失敗しました。 と同じではないのでしょうか?

esd827
質問者

お礼

下記を入力し、もう一度やってみました。その結果okになりました。ありがとう御座いました。 If ActiveSheet.FilterMode Then _ ActiveSheet.ShowAllData すみませんが、追加質問の件 お願いします。

esd827
質問者

補足

その通りです。1行目に下記表示が出ています。 A   B   C  D Code Name Code Name

全文を見る
すると、全ての回答が全文表示されます。
  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.1

ShowAllDataのエラーを回避したい http://oshiete1.goo.ne.jp/kotaeru.php3?q=1619973 こちらかな?

esd827
質問者

補足

ありがとう御座います。 私の場合、Buttonが無いので .ShowAllData → If ActiveSheet.FilterMode Then _ ActiveSheet.ShowAllData 置き換えてみましたが、NGでした。やり方がまずいのでしょうか Q:追加質問させてください。 ABに5桁(10000以上)の銘柄があります。この銘柄がある行を削除したいのです。 よろしくお願いします。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • excel2003 重複削除マクロ

    winxp he sp2, office2003 AB重複銘柄を削除し、CDに書くマクロを教えてください。 この例では、日経300投信 チャイナボーチーが重複しています。 AB(銘柄コードと銘柄名)は一体です。データは沢山あります。 列がずれて見にくいです。 A    B       C   D 1313 KODEX200 1313 KODEX200 1319 日経300投信  1319 日経300投信 1319 日経300投信  1380 秋川牧園 1380 秋川牧園     1381 アクシーズ 1381 アクシーズ    1412 チャイナボーチー 1412 チャイナボーチー 1724 シンクレイヤ 1412 チャイナボーチー 1735 伊田テクノス 1412 チャイナボーチー 1753 土屋ツーバイホーム 1724 シンクレイヤ   1783 A.Cホール 1735 伊田テクノス 1753 土屋ツーバイ 1783 A.Cホール よろしくお願いします。

  • 重複抽出マクロ

    winxp he sp3, excel2003 AB DE: 銘柄コード(4桁固定)銘柄名 一体です。 1.やりたい事 ABとDEが、重複している場合、下記の様に、FGHに記述するマクロです。列が揃ってなくて、見にくいですが。 下記重複抽出マクロではNGです。コメントお願いします。 A B C D E F G H 3864 三菱製紙 0.15 3865 北越紙 3865 北越製紙 0.15 3865 北越製紙 0.15 4224 ロンシール 4531 有機薬 0 4530 久光製薬 0.45 4531 有機薬 7968 田崎真珠 0.15 4531 有機薬 0 4614 トウペ 4534 持田製薬 0.15 7968 田崎真珠 7958 天馬 0.15 8091 ニチモウ 7968 田崎真珠 0.15 8113 ユニチャ 0.9 8114 デサント 0.15 Sub 重複抽出() Rows(1).Insert Range("A1:e1").Value = [{1,2,3,4,5}] Range("IV2").Formula = "=COUNTIF(A:A,d2)>0" Columns("d:e").AdvancedFilter _ Action:=xlFilterCopy, _ CriteriaRange:=Range("IV1:IV2"), _ CopyToRange:=Range("f1:h1") Range("IV2").Clear Rows(1).Delete End Sub よろしくお願いします。

  • 重複行削除のマクロ

    重複行を削除するマクロを作っていますが、うまくいきません。 2行目にタイトルが入っていて、3行目以降が必要なデータになります。 この中でA列が一致しているデータ行を削除したいと考えており、 重複データが削除された後、タイトル行がなぜか一番下の行にはりついてしまいます。 どなたか詳しい方助けてください!!!よろしくお願いします。 ちなみに以下が現在使用しているVBAコードです。 =============================================================== Sub GoodRemoveDuplicates() 'A列にデータが入力されており、そのデータを並べ替えた後、 '重複するデータが含まれている行を削除するマクロ Worksheets("貼り付け用用マクロ").Range("A1").Sort _ key1:=Worksheets("貼り付け用用マクロ").Range("A1") Set currentCell = Worksheets("貼り付け用用マクロ").Range("A1") Do While Not IsEmpty(currentCell) Set nextCell = currentCell.Offset(1, 0) If nextCell.Value = currentCell.Value Then currentCell.EntireRow.Delete End If Set currentCell = nextCell Loop End Sub ===============================================================

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

    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つ以上のデータが多数ある場合データが削除されずに残ってしまう』エラーが出てしまいます。どうかお教えください。

  • excel2003 文字削除マクロの実行時間を短くしたい

    winxp he sp2, excel2003 1.やりたい事 マクロ実行前のデータを C列の該当する文字を削除し 実行後の様にしたいのです。 データが約3300個あり、下記マクロでは、約30秒掛かります。 これを、もっと短くするマクロを教えてください。 Sub aaa() Dim idx As Long For idx = Range("C65536").End(xlUp).Row To 1 Step -1 If Cells(idx, "C").Value = "日々公表銘柄" Then Cells(idx, "C").EntireRow.Delete If Cells(idx, "C").Value = "貸株注意喚起" Then Cells(idx, "C").EntireRow.Delete If Cells(idx, "C").Value = "整理ポスト" Then Cells(idx, "C").EntireRow.Delete If Cells(idx, "C").Value = "監理ポスト" Then Cells(idx, "C").EntireRow.Delete If Cells(idx, "C").Value = "建玉上限:3000万円" Then Cells(idx, "C").EntireRow.Delete If Cells(idx, "C").Value = "建玉上限:5000万円" Then Cells(idx, "C").EntireRow.Delete If Cells(idx, "C").Value = "建玉上限:5億円" Then Cells(idx, "C").EntireRow.Delete If Cells(idx, "C").Value = "建玉上限:10億円" Then Cells(idx, "C").EntireRow.Delete Next idx End Sub データ3300個。列がずれて見にくいのですが。 A列:株コード 4桁固定 B列:株銘柄名 C列:摘要 マクロ実行前  A列 B列 C列 ------------------------------------------------ 1301 極洋          建玉上限:5000万円 1305 ダイワ投信-トピックス 建玉上限:5億円 1306 TOPIX連動型投信  建玉上限:10億円 1309 上海株式指数投信    建玉上限:5000万円 1313 KODEX200    新規買停止 1313 KODEX200    新規売停止 1313 KODEX200    一般信用新規買停止 1313 KODEX200    用掛目規制:0% 1314 S&P日本新興株100 建玉上限:3000万円 1319 日経300投信     新規買停止 1319 日経300投信     新規売停止 マクロ実行後 A列 B列 C列 ------------------------------------------------ 1301 極洋           1305 ダイワ投信-トピックス  1306 TOPIX連動型投信   1309 上海株式指数投信     1313 KODEX200    新規買停止 1313 KODEX200    新規売停止 1313 KODEX200    一般信用新規買停止 1313 KODEX200    用掛目規制:0% 1314 S&P日本新興株100  1319 日経300投信     新規買停止 1319 日経300投信     新規売停止 よろしくお願いします。

  • お助け下さい、プログラミングの分かる方!!

    ヘルプをお願い致します。 あるデータ一覧の中に重複したデータと重複していないデータがあります。 リストアップしたいのは、重複していないデータと重複したものはその最新の 日付(現在から考えて)のものだけデータをリストアップしたいのです。 下記をネットから調べて見つけたのですが、肝心の最新の日付をみて 重複データがリストアップできずに大変困っています。 お手数をおかけ致しますが、助けて頂きますようお願い致します。 重複チェックは、顧客名と製品名でしたいと考えています。 リストアップは別のシートにリストアップできればと考えています。 重複していたデータには色がついていると助かります。 マクロ初心者なので、簡単な説明文を頂けると大変助かります。 ******************************* データは下記です。  A     B      C     D    E    F      G 日付  顧客名  製品名  担当者  価格  個数  合計金額 1/1 田中さん  A    担当者A  100円 100 10000 1/2   田中さん  B    担当者B  100円 100 10000 1/3   鈴木さん  B    担当者C  100円 100 10000 1000行以上あります。 ******************************* Sub ko() Dim x As Long 'xは長整数と宣言 With ActiveSheet 'アクティブなシートで .Rows("1").Insert Shift:=xlDown 'ダミー行挿入 .Range("A1") = "Code" 'ダミー項目1 .Range("B1") = "Name" 'ダミー項目2 x = .Cells(.Rows.Count, 1).End(xlUp).Row '最終行取得 .Range("A1:B" & x).Select '範囲選択 Selection.AdvancedFilter Action:=xlFilterInPlace, Unique:=True '重複を表示しない Selection.Copy .Range("C1") 'コピーしてC1以降に貼り付け .ShowAllData 'すべてを表示 .Rows("1").Delete Shift:=xlUp 'ダミー行削除 End With End Sub

  • 【excelマクロ】重複文字がある場合、上位のセルにある文字を削除する

    質問させてください。 以下のexcelの表があります。 Aさん 50 Bさん 30 Cさん 50 Aさん 60 Cさん 70 上記の表の重複部分を削除したいと思っております。 【重複部分削除後】 Bさん 30 Aさん 60 Cさん 70 その際に下の行を残し上の行にあるものを削除したいのですが マクロ・関数で実行する方法を知っていらっしゃいましたら 教えていただけないでしょうか。 以上、お手数ですが宜しくお願い致します。

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

    横17列、縦、約1000行の表があります。 4行目が項目で、5行目以降は次のように並んでいます。 A列(日付)、B列~H列(各データ) I列(契約番号)J列~Q列(各データ) 縦の並び順は、ばらばらで、日付順ではありません。しかも結構重複があります。 そこで、I列の商品番号をキーにして、重複をチェックし、重複しているものは、日付が新しいものを生かし、古い方は削除しようと思います。 しかし、手作業でやるにはあまりに多すぎるため、出来ればマクロでやりたいのですが、このように高度なものは、わたしが出来るマクロの記録程度では手におえそうもありません。 どのようにやったらよいのかどなたかお教え願えませんでしょうか?

  • Excel2010で行ごとの重複削除

    Excel2010です。 A行目 1 3 5 5 2 2 3 B行目 2 3 5 5 4 4 C行目 1 9 7 9 9 ↓ A行目 1 3 5 2 B行目 2 3 4 5 C行目 1 7 9 というように、行ごとに重複の削除をしたいと思っています。 データタブに重複の削除があるのですが、列ごとにやるようなので、一度シート全体を 行と列を入れ替えて別シートにコピーして、 1列目全体を選択して、1列目で重複の削除を実行 2列目全体を選択して、2列目で重複の削除を実行 ・・・ というやり方もあるのですが、今扱っているエクセルは197行197列あります。 列選択、重複の削除アイコンをクリックするのを197回繰り返すのは大変です。 自動化する方法はないものでしょうか?

  • 空白行の削除マクロについてご教示ください

    空白行の削除に、下記マクロを活用させていただいていますが、 見た目空白なのに削除されない行が時々残ってしまいます。 削除されなかったセルを「Deleteキー」で空白にするとマクロが 実行され、きちんと削除されます。 こういった、スペースか何かが入っていても、見た目空白なら 削除するようにはできないでしょうか。 どなたかよろしくお願いいたします。 Sub 削除() Dim c As Range Dim 開始行 As Long Dim 最終行 As Long 開始行 = 5 最終行 = Range("a5000").End(xlUp).Row For Each c In Range("a" & 開始行 & ":a" & 最終行) If c.Value = "" Then Rows(c.Row).Delete End If Next End Sub

専門家に質問してみよう