質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

解決済

3回答

261閲覧

Excelで、シートの4枚目から最後までA列を『重複を削除』するマクロが組みたいです!

退会済みユーザー

退会済みユーザー

総合スコア0

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

0クリップ

投稿2020/08/04 13:15

組み方の考え方を教えて頂きたいです。

『マクロの記録』を利用して、コードを書いてみたのですがうまくいきません。

1、シートの4枚目をアクティブセルに
2、A列を選択
3、重複を削除
4、次のシートをアクティブセルに

2〜4をfor〜nextでループさせれば上手くいくと思ったのですが、この考え方で合ってるでしょうか?

よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2020/08/04 13:16

ちなみに、上記のマクロを組んだとすると、非表示のシートがあった場合非表示のシートまで処理されてしまいますか?
mako1972

2020/08/04 13:29 編集

マクロを提示して下さい。 非表示にしーとをする場合は マスターとか処理に 関係ないしーとだと思いますが。
mako1972

2020/08/04 13:51 編集

組み方の考え方ですが ワークシートの数を数える。 ループ回数を決めたら、シートが4以上のインデックス番号であること、非表示シートでないことを if文で条件分けする。 条件に合致したシートのA列のデータ数をチェックして 重複していない場合は 集約したいシートに転記を繰り返すループ処理と 判定を行いながら 結果をまとめる。 以上。
hatena19

2020/08/04 13:36

> 2〜4をfor〜nextでループさせれば上手くいくと思ったのですが、この考え方で合ってるでしょうか? あってます。その方針でまずはご自身でコードを書いてみてください。 > 非表示のシートがあった場合非表示のシートまで処理されてしまいますか? 条件分けすれば、非表示のシートは処理しないようにもできます。まずはご自身でコードを書いてみてください。
guest

回答3

0

これではどうですか。

VBA

1Sub Test_Sample_Miniature() 2 Dim MySh As Worksheet 3 For Each MySh In Worksheets 4 If MySh.Index > 4 Then 5 MySh.Range("A:A").RemoveDuplicates Columns:=1, Header:=xlNo 6 End If 7 Next 8End Sub

投稿2020/08/04 23:42

tosi

総合スコア553

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2020/08/05 03:40

4〜最後のシートまでループじゃなくて、全選択して1〜3を除外っていうやり方もあるんですね。 こっちでもやってみます!
guest

0

ベストアンサー

こんにちは。
こんな感じでいいのかなぁ、と考えてみました。


Option Explicit

Sub 重複削除()

Dim ssh As Long 'Start Sheetの意味
Dim sh As Long

ssh = 4 '4枚目と書かれていましたので 4 開始にしました

For sh = ssh To Worksheets.Count Next sh Range("A:A").RemoveDuplicates Columns:=Array(1), Header:=xlYes End Sub

1~3 はこんな感じだと思うのですが、
4,「次のシートをアクティブセルに」
なんですが、シートの枚数とか、どのセルをアクティブに
したらいいのか、 分かりませんでした。

毎回同じなのか、毎回異なるのか? とか・・・。

でも、
ちゃんと動作は確認しましたので 1~3は大丈夫かと思います。

尻切れトンボ見たいな回答りましたが、参考になれば嬉しいです。

投稿2020/08/04 18:29

unagiinu

総合スコア42

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2020/08/05 03:43 編集

皆さんありがとうございました! 上記コードを参考にし、完成させる事が出来ました! すみません、『シートの4枚目をアクティブセルに』って意味わからないですね(汗 正しくは『シートの4枚目を選択』で、4,「次のシートをアクティブセルに」 は次(5...)のシートを選択でした。
guest

0

sheet名・シート数はご自由にお願いいたします。また、非表示のシートを作成しておきます。
各シートのA列には何らかのデータがあるとして、下記のVBAコードを標準モジュールに貼り付けて
実行してみてください。
重複処理を除いた非表示シートか否かを判定して情報をイミディエイトウィンドウに表示するというサンプルです。

参考にならないかもしれませんが、大枠の処理となりますのでよろしくお願いいたします

VBA

1Sub test() 2Dim sh As Integer 3Dim データ数 As Double 4 5 6For sh = 1 To Worksheets.Count 7 8 If sh >= 4 Then 9 10 If Sheets(sh).Visible = True Then 11 12 データ数 = Sheets(sh).Range("A1").CurrentRegion.Rows.Count - 1 13 14 Debug.Print "ForNext-" & sh & "回目-" & "Sheet名:" & Sheets(sh).Name & "データ数:" & データ数 15 Else 16 17 Debug.Print "●シート名:" & Sheets(sh).Name & "は非表示なのでスルーしました!!" 18 19 End If 20 21 Debug.Print "  ------------ 重複判定をしました! --------------------" 22 Else 23 24 Debug.Print "●シートの順番が4未満なのでスルーします!" 25 26 End If 27Next 28 29End Sub

投稿2020/08/04 14:39

編集2020/08/04 14:45
mako1972

総合スコア383

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問