エクセルVBA初心者です。どうかご指導お願いします。
シート1に入力されたデータベースがあります。
B列には氏名が入力されています。
B2の値で絞りこんで、シート2に貼り付け、
B3の値で絞りこんで、シート3に貼り付け、
B4の値で絞り込んでシート4に貼り付けてB列の値が""(空白)になるまで繰り返すコードの書き方を教えてください。
さらに、B列には、当然同じ氏名が何回も入力されているので、前に一度出た人はパスするというようにしたいのです。
下記コードは、「B2の値で絞りこんで、シート2に貼り付け」だけをしたものですが、このコードを応用して作りたいのです。ご指導お願いします。
Sub test01()
With sheets("sheet1")Range("A1")
.AutoFilter field:=2, Criteria1:=Range("B2")
.CurrentRegion.Copy Destination:=Sheets("Sheet2").Range("A1")
.AutoFilter
End With
End Sub
No.2
- 回答日時:
こんにちは。
こんな感じでどうでしょう?
Option Explicit
Sub test01(ByVal my_key As String, ByVal sh As Worksheet)
With Sheets("sheet1").Range("A1")
.AutoFilter field:=2, Criteria1:=my_key
.CurrentRegion.Copy Destination:=sh.Range("A1")
.AutoFilter
End With
End Sub
Private Function Func01(ByVal myRng As Range)
Dim myDic As Object
Set myDic = CreateObject("Scripting.Dictionary")
Dim r As Range
Dim mykey As String
For Each r In myRng
mykey = r.Value
If Not myDic.Exists(mykey) Then
myDic.Add mykey, mykey
End If
Next
Func01 = myDic.Keys
End Function
Sub Macro02()
Dim rng As Range
Dim i As Long
Dim mykeys
Dim mysh As Worksheet
Application.ScreenUpdating = False
Set rng = Sheets("Sheet1").Range("A1"). _
CurrentRegion.Columns(2).Cells
mykeys = Func01(rng)
For i = 1 To UBound(mykeys)
On Error GoTo ErrorHandler
Set mysh = ThisWorkbook.Sheets("Sheet" & i + 1)
On Error GoTo 0
test01 mykeys(i), mysh
Next
Set mysh = Nothing
Set rng = Nothing
Application.ScreenUpdating = True
Exit Sub
ErrorHandler:
Set mysh = Worksheets.Add(After:=Worksheets(Worksheets.Count))
mysh.Name = "Sheet" & i + 1
Resume Next
End Sub
ご回答ありがとうございました。
完璧な結果がでました。
コード内容に理解がともなわず、ただただ驚くばかりです。
心より感謝申し上げます。
内容を理解できるように勉強してみます。
No.1ベストアンサー
- 回答日時:
質問文のマクロを元に、重複チェックをしながらForループでまわしてオートフィルタでの絞り込み、シートの追加、コピーを行ってみました。
シート名はとりあえず氏名にしています。Sub test02()
Dim i As Integer, j As Integer
Dim IsNewName As Boolean
With Sheets("sheet1")
For i = 2 To Range("B65536").End(xlUp).Row
IsNewName = True
For j = 2 To Worksheets.Count
If Worksheets(j).Name = .Range("B" & i).Value Then
IsNewName = False
Exit For
End If
Next
If IsNewName = True Then
.Range("A1").AutoFilter field:=2, Criteria1:=.Range("B" & i).Value
Worksheets.Add After:=Worksheets(Worksheets.Count)
Worksheets(Worksheets.Count).Name = .Range("B" & i).Value
.Range("A1").CurrentRegion.Copy Destination:=Worksheets(Worksheets.Count).Range("A1")
End If
Next
.Range("A1").AutoFilter
End With
End Sub
ご回答ありがとうございました。
質問内容をカバーして有り余るほどの完璧なコードをありがとうございました。心より感謝申し上げます^^
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 複数csvを横に追加していくマクロについて 2 2023/04/25 09:19
- Excel(エクセル) エクセルのマクロについて教えてください。 3 2023/02/07 14:47
- Visual Basic(VBA) エクセル VBA 処理スピードを上げたいのですが。 6 2023/03/31 20:52
- Visual Basic(VBA) 複数シート一括作成後に、特定範囲の数式は値で貼り付けしたい 3 2022/10/07 11:18
- Visual Basic(VBA) VBAコードを張り付け後のエクセルの進め方 2 2023/02/07 18:24
- Visual Basic(VBA) 集計シートA列のコードと一致する右に並んだシート名(コード)の3行目から10行目をコピーして貼り付け 4 2022/08/18 15:24
- Visual Basic(VBA) 前回質問の続きになりますが、下記マクロでシート1からシート2の抽出項目セルB3「りんご」とセルC2「 2 2022/12/02 17:37
- Visual Basic(VBA) 形式を選択して貼り付け 以下のコードで「元」シートと「先」シートのA列に同じ値があったら指定範囲をコ 5 2022/11/11 07:30
- Visual Basic(VBA) フォルダの場所を可変にしたいです(マクロ) 4 2023/05/11 10:00
- Excel(エクセル) 別のシートの最終行の値を参照するには 5 2022/12/15 13:18
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
首吊りどこ締めるの
-
至急!尿検査前日にオナニーし...
-
尿検査前日に自慰行為した時の...
-
白血球が多いとどんな心配があ...
-
彼女のことが好きすぎて彼女の...
-
検便についてです。 便は取れた...
-
腕を見たら黄色くなってる部分...
-
勃起する時って痛いんですか? ...
-
尿検査の前日は自慰控えたほう...
-
精子が黄色?
-
中出しをするとお腹が痛い・・・。
-
EXCELで条件付き書式で空白セル...
-
excelでsin二乗のやり方を教え...
-
これって喉仏ですか? 私は女性...
-
口の中に黒い血の塊
-
納豆食べた後の尿の納豆臭は何故?
-
2つの数値のうち、数値が小さい...
-
エクセル指定した範囲からラン...
-
筋トレするとチンコが縮んじゃ...
-
変な話しになります。尿検査で...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
至急!尿検査前日にオナニーし...
-
首吊りどこ締めるの
-
尿検査の前日は自慰控えたほう...
-
尿検査前日に自慰行為した時の...
-
検便についてです。 便は取れた...
-
白血球が多いとどんな心配があ...
-
中出しをするとお腹が痛い・・・。
-
射精をして1週間以内に尿検査を...
-
彼女のことが好きすぎて彼女の...
-
腕を見たら黄色くなってる部分...
-
勃起する時って痛いんですか? ...
-
変な話しになります。尿検査で...
-
これって喉仏ですか? 私は女性...
-
EXCELで条件付き書式で空白セル...
-
男です。昨日の午後3時くらいに...
-
今朝、毎朝の習慣でオナニーし...
-
納豆食べた後の尿の納豆臭は何故?
-
1日前の検尿
-
値が入っているときだけ計算結...
-
精子が黄色?
おすすめ情報