画像のようなExcelシートがありB列のナンバーの重複を削除したいです。その際にC列の日付が古いものを削除してほしいです。またそのナンバーを数字の小さい順に上から並べ替えたいです。並べ替えの際にその行すべて移動させてください。
またこの作業をする前に表の横に書いてあるVBAを使用して「NG」と「中断」の行は削除します。
できればこのVBAに続けて書きたかったのですがうまくいきませんでした。一つにまとめるとコードが長くなり複雑になりますか?2つに分けて作成したほうがいいのでしょうか?
それも踏まえて詳しいかた教えて下さい。説明ヘタですいません。
A 回答 (6件)
- 最新から表示
- 回答順に表示
No.6
- 回答日時:
>表のなからランダムで3行選択して別シートに貼りつけたいです。
※重複はしないようにおねがいします。以下のマクロを追加して、実行してください。(不要行削除と同じモジュールに登録します)
Sheet2にランダムな3行をコピーします。
もし、重複行削除と一緒に行いたいなら、
Public Sub 不要行削除()
の最後で、ランダム3行()をcallしてください。
Public Sub ランダム3行()
Dim maxrow As Long
Dim ws As Worksheet
Dim ws2 As Worksheet
Dim row1 As Long
Dim row2 As Long: row2 = 2
Dim rctr As Long: rctr = 0
Dim arrrow As Variant
Dim i As Long
Set ws = ThisWorkbook.Sheets("Sheet1") 'ワークシート名を適切に指定
Set ws2 = ThisWorkbook.Sheets("Sheet2") 'ワークシート名を適切に指定
maxrow = ws.Cells(rows.Count, "A").End(xlUp).Row
If maxrow < 5 Then
For row1 = 2 To maxrow
ws2.Cells(row2, 1).Resize(1, 5).Value = ws.Cells(row1, 1).Resize(1, 5).Value
row2 = row2 + 1
Next
Exit Sub
End If
arrrow = Array(0, 0, 0)
Randomize
For i = 0 To UBound(arrrow)
Do
row1 = Int(Rnd * (maxrow - 1)) + 2
If row1 > maxrow Then
MsgBox (row1)
End If
If CheckRow(row1, i, arrrow) = True Then Exit Do
Loop
arrrow(i) = row1
ws2.Cells(row2, 1).Resize(1, 5).Value = ws.Cells(row1, 1).Resize(1, 5).Value
row2 = row2 + 1
Next
End Sub
Private Function CheckRow(ByVal row1 As Long, ByVal cx As Long, ByRef arrrow As Variant)
CheckRow = False
Dim j As Long
For j = 0 To cx - 1
If row1 = arrrow(j) Then Exit Function
Next
CheckRow = True
End Function
No.5
- 回答日時:
1.あなたが用意したマクロ「DeleteRowsWithKeywords」
が正しく動作することを確認してください。
2.以下のマクロを「DeleteRowsWithKeywords」と同じ
標準モジュールに登録してください。
Public Sub 不要行削除()
Dim maxrow As Long
Dim ws As Worksheet
Dim wrow As Long
Set ws = ThisWorkbook.Sheets("Sheet1") 'ワークシート名を適切に指定
'Call DeleteRowsWithKeywords
maxrow = ws.Cells(rows.Count, "A").End(xlUp).Row
ws.Range("A2:E" & maxrow).Sort key1:=Range("B2"), order1:=xlAscending, key2:=Range("C2"), order2:=xlDescending, Header:=xlNo
For wrow = maxrow To 3 Step -1
If ws.Cells(wrow, "B").Value = ws.Cells(wrow - 1, "B").Value Then
ws.rows(wrow).Delete
End If
Next
End Sub
3.上記のマクロ である不要行削除()は、
「NG」と「中断」の行が削除された状態であることを前提に動作します。
4.DeleteRowsWithKeywordsが正しく動作することが確認できましたら、
'Call DeleteRowsWithKeywords
の行のコメントを外してください。
そうすると、不要行削除()を実行するだけで、一度に、「NG」と「中断」の行削除と、重複行の削除が行われます。
No.4
- 回答日時:
不明点です。
1.提示されたマクロ(DeleteRowsWithKeywords)は、実際に動かして、正しく動作した実績がありますでしょうか。実績があるなら、新しいマクロをつくり、最初にDeleteRowsWithKeywordsを呼び出します。
その後、No3で述べられたようにソートして、重複行を削除します。
2.ソート時、行全体を移動とのことですが、E列が最終列でしょうか。
(A列~E列の範囲をソート)
No.3
- 回答日時:
#1です。
重複の削除する前に、並べ替えます。キー1がナンバー、キー2が日付(降順)なら、日付の古い方が下にきます。その後にナンバーのみで重複の削除です。ご提示されたVBAのソースですが、ボヤけていて読み取れません。自身がスマホだからかもしれませんが。お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) VBA 特定の単語以外が含まれる行全体を削除したい 2 2021/11/03 18:55
- Visual Basic(VBA) 3つの条件を指定してVBAで行を削除したい 条件1:分類1が重複 条件2:分類2が重複 条件3:個数 6 2022/06/24 11:07
- Visual Basic(VBA) 【VBA】もし、値が0だったら左のセルと合わせて削除したい 3 2023/04/20 10:12
- Excel(エクセル) 空白行も含めてソートしたい 3 2022/02/01 23:13
- Visual Basic(VBA) 【Excel VBA】表の列の値毎に分割するには?(値がブックのファイル名) 9 2021/11/16 18:25
- Visual Basic(VBA) vbaエクセルマクロ RemoveDuplicatesについて RemoveDuplicatesを使 3 2023/02/28 01:13
- Visual Basic(VBA) vbaエクセルマクロ RemoveDuplicatesについて RemoveDuplicatesを使 1 2023/02/27 22:21
- その他(Microsoft Office) 1の行を固定した上でVBAを用いて日付順に自動並べ替え 2 2022/06/06 15:09
- Excel(エクセル) Excel 散布図グラフ 外れ値 セル番地参照方法 4 2022/04/19 18:56
- Visual Basic(VBA) Excel vbaについて知恵もしくは、コード教えて下さいm(__)m ① 表にあるデータをコピー、 2 2022/09/01 23:57
このQ&Aを見た人はこんなQ&Aも見ています
-
外出時に「待たせる妻」vs イライラする「待つ夫」は日本だけ?見習いたい海外事情
夫の家事参加に積極的なイメージのある海外でも、同様の事例はあるのか。結婚カウンセラーの佐竹悦子さんに伺ってみた。
-
指定した範囲から、文字A、文字Bの数をそれぞれカウントする数式が知りたいです。よろしくお願いします。
Excel(エクセル)
-
こんにちは。Excelのデータ入力規則のことで教えてください。複数条件を指定したい場合の構文ですが、
Excel(エクセル)
-
B1にある文言がA1に含まれている場合の判定方法について
Excel(エクセル)
-
-
4
excelの数字がE+になってしまいます。 数値に変えればセルでの見え方は治ることはわかるのですが、
Excel(エクセル)
-
5
複雑なシフト表から1日ごとの出勤者、シフトを抜き出したいです
Excel(エクセル)
-
6
Excel:文字との間に数字の組合せ、次のセルの数字を1ずつ増やすには?
Excel(エクセル)
-
7
エクセル2016でfilter関数がないので、、抜き出す関数をおしえてください。
Excel(エクセル)
-
8
2013Excel保存済みファイルグレーアウト Excelを開こうとするとメニュー以外全てグレーにな
Excel(エクセル)
-
9
[大至急!]ExcelSheetFreeの使い方がわかりません
Excel(エクセル)
-
10
Excelでオートフィルをした時に,値のバグについて
Excel(エクセル)
-
11
数字をコンマで区切った文字列の集計のマクロの修正
Excel(エクセル)
-
12
エクセルで同じ値が連続しているセルに色をつける方法を教えてください。
Excel(エクセル)
-
13
Excelで、改行がある場合の条件式(関数)の書き方を教えてください
Excel(エクセル)
-
14
Excelについて質問です。 タブキーを押すと編集しているセルが右隣に移りますが、私はタブキーを押し
Excel(エクセル)
-
15
エクセルの計算式について質問です 写真に表記してある、仕切りの部分の=B4✖️0.55のところを対象
Excel(エクセル)
-
16
エクセル CSVファイルについて
Excel(エクセル)
-
17
エクセル 条件付き書式設定
Excel(エクセル)
-
18
エクセルのcountifのワイルドカードについて
Excel(エクセル)
-
19
エクセルの関数でわからないことあるのでコード付きで教えてください
Excel(エクセル)
-
20
同じ型【ハイフンと数字】をぶつけて、イコールである事を証明する関数はありますか?
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセル初心者です 関数の入れ...
-
【関数】先頭だけにある、半角...
-
エクセル 白黒印刷で白線を印刷...
-
Excelのチェックボックスの使い...
-
【関数】適切な文字数の数字を...
-
Excelのpivotについて質問です
-
Excel ピボットテーブルで日付...
-
LOOKUP関数を使えばいいのでし...
-
エクセル関数を教えてください
-
エクセルのセルに同じ大きさの...
-
UNIQUE関数が使えないバージョ...
-
excelの不要な行の削除ができな...
-
エクセルで「-0.0」と表示さ...
-
時間によってファイル名が変わ...
-
WPS OFFICEでの縦書きについて
-
エクセルの関数について教えて...
-
Aというブックの1というシート...
-
【マクロ】シート名を取得する...
-
VBA Private Sub Worksheet_Cha...
-
VBA、Excelのworkbook.open に...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ニンテンドーアカウントを削除...
-
質問箱で通知たまってるのに、...
-
VBA実行後、キー入力ができない
-
ニコニコ動画 動画削除につい...
-
メニューをグレー表示でなく非...
-
Excel vba 重複削除、連番に並...
-
Cookieは定期的に削除するべき...
-
ページ番号を削除できない!
-
もう一回質問 3DSを売ります。 ...
-
clientmqueueに溜まったキュー...
-
回答が質問者から拒否されたら...
-
ASUSのLive Updateの削除方法
-
報告・削除の基準がおかしくな...
-
削除依頼の通報を何回かしてい...
-
教えてグーで 回答がつかなくて...
-
質問や回答が削除
-
テキストファイルの重複行を削...
-
2ちゃんねる(PINKちゃんねる...
-
投稿記事を論理削除2
-
スマホの実行中のramを減らしたい
おすすめ情報
Sub DeleteRowsWithKeywords()
Dim i As Long
Dim ws As Worksheet Set ws = ThisWorkbook.Sheets("Sheet1") 'ワークシート名を適切に指定
Application.ScreenUpdating = False
For i = 100 To 1 Step -1
f InStr(1, ws.Cells(i, 1).Value, "NG", vbTextCompare) > 0 Or InStr(1, ws.Cells(i, 1).Value, "中断",vbTextCompare) > 0 Then
ws.Rows(i).Delete
End If
Next i
Application.ScreenUpdating = True
End Sub
追加で聞きたいことがあります。
表のなからランダムで3行選択して別シートに貼りつけたいです。※重複はしないようにおねがいします。