![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
変動するセル範囲からB列を基準にしてソートし、別シートに転記したいのですが、うまくいきません。
商品名が多数あり変動するために通常のオートフィルター等では無く、マクロを活用して別シートに転記する方法で教えてください。
以下の2つのコードを組み合わせて、複数の商品別シートを作成したいのです。
大変恐縮ですが、詳しい方、マクロのコードを教えてください。
Sub 分類区切線()
Dim i As Integer
Dim 最終行 As Long
最終行 = Range("A5").CurrentRegion.Rows.Count + 5
For i = 6 To 最終行
If Range("B" & i).Value <> Range("B" & i - 1).Value Then
Range("B" & i - 1).Resize(1, 6).Copy
Worksheets.Add
Range("A1").PasteSpecial
End If
Next
End Sub
Sub 別シート作成()
'
' 別シートにヘッドをコピー
'
Sheets.Add After:=Sheets(Sheets.Count)
Sheets("商品").Select
Rows("5:5").Select
Selection.Copy
Sheets(Sheets.Count).Select
Selection.PasteSpecial Paste:=xlPasteColumnWidths, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
ActiveSheet.Paste
Application.CutCopyMode = False
End Sub
![「エクセルのマクロで条件一致のデータを別シ」の質問画像](http://oshiete.xgoo.jp/_/bucket/oshietegoo/images/media/9/1093877_5eeb3794060a9/M.jpg)
No.6
- 回答日時:
No.5です。
No.5で提示した条件が当てはまるのなら追加していくシートの名前がダブる可能性もありますので、
>With WS
>.Name = objRS1.Fields("F3").Value
ここの F3 は F2 :B列のコード にでも変更願います。
仮にシート名は気にされないなら .Name~ の1行は削除されても宜しいと思います。
何度も教えていただき、ありがとうございます。
アクセスがインストールされていないので案内していただいたURL
Microsoft Access データベース エンジン 2010 再頒布可能コンポーネント
https://www.microsoft.com/ja-jp/download/details …
からダウンロードしました。
マクロを動かすと何故かLOOPの個所で停止してしまい、LOOPに対するDOがありませんと表示されます。
対処方法はありますでしょうか。
No.5
- 回答日時:
もしコードと商品の関係が対になっていなく複数のコードを1つの商品が持っているとかなら、
>strSQL = strSQL & " SELECT DISTINCT F3,F2"
を
strSQL = strSQL & " SELECT DISTINCT F2,F3"
このように変更願います。
No.4
- 回答日時:
No.2です。
.NET の件は別件でした。
Accessがインストールされてたら問題ないかと思います。
インストールされてなければ、
Microsoft Access データベース エンジン 2010 再頒布可能コンポーネント
https://www.microsoft.com/ja-jp/download/details …
Officeが64BitならAccessDatabaseEngine_X64.exeの方をインストで動くかと。(うちはそれで使ってます)
No.3
- 回答日時:
一部追加をお願いします。
With WS
.Name = objRS1.Fields("F3").Value
r1.EntireRow.Copy .Range("A5")
.Range("A6").CopyFromRecordset objRS2
.Range("A6", .Cells(Rows.Count, "A").End(xlUp)).NumberFormat = "m月d日" '★ 追加
With .Range("A5").CurrentRegion.Borders
No.2
- 回答日時:
取り敢えずデータの範囲がA6~F50000以内ならいけると思います。
Sub megu()
Dim objCn As Object
Dim objRS1 As Object, objRS2 As Object
Dim WS As Worksheet
Dim r1 As Range
Dim strSQL As String
Set objCn = CreateObject("ADODB.Connection")
With objCn
.Provider = "Microsoft.ACE.OLEDB.12.0"
.Properties("Extended Properties") = "Excel 12.0;HDR=NO;"
.Open ThisWorkbook.FullName
End With
Set objRS1 = CreateObject("ADODB.Recordset")
Set objRS2 = CreateObject("ADODB.Recordset")
strSQL = ""
strSQL = strSQL & " SELECT DISTINCT F3,F2"
strSQL = strSQL & " FROM [商品$A6:F50000]" '★5万行までを範囲にしてる
strSQL = strSQL & " ORDER BY F2 ASC;"
Set objRS1 = objCn.Execute(strSQL)
Set r1 = Worksheets("商品").Range("A5")
Do Until objRS1.EOF
strSQL = ""
strSQL = strSQL & " SELECT *"
strSQL = strSQL & " FROM [商品$A6:F50000]" '★5万行まで~以下同文~
strSQL = strSQL & " WHERE F3 = '" & objRS1.Fields("F3").Value & "';"
Set objRS2 = objCn.Execute(strSQL)
Set WS = Worksheets.Add(After:=Worksheets(Worksheets.Count))
With WS
.Name = objRS1.Fields("F3").Value
r1.EntireRow.Copy .Range("A5")
.Range("A6").CopyFromRecordset objRS2
With .Range("A5").CurrentRegion.Borders
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlThin
End With
End With
objRS2.Close
objRS1.MoveNext
Loop
objRS1.Close
Set objRS1 = Nothing
Set objRS2 = Nothing
objCn.Close
Set r1 = Nothing
Set objCn = Nothing
End Sub
ただ環境によっては無理だったりしますけど。
https://www.fenet.jp/dotnet/column/environment/3 …
まず最初の有効化が可能か否か・・・
通常はWin10には入ってなかったはずの物なので。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) エクセル VBAでシートのコピーを作りたい 1 2023/05/18 07:42
- Visual Basic(VBA) まとめシートから集計シートへA列のコードが一致したら1行コピーするマクロをネット上で見つけました。こ 1 2022/08/30 14:11
- Excel(エクセル) マクロで最終行から上に検索を逆にしたい 1 2022/05/17 18:27
- Excel(エクセル) マクロで行を追加、削除すると行位置がずれますが、解決方法はありませんか?。 5 2022/05/28 16:03
- Visual Basic(VBA) 動きっぱなしです。止め方とプロシージャの間違いを教えて下さい! 5 2022/08/15 23:08
- Visual Basic(VBA) excel vbaでvlooupの変数がわかりません。 7 2022/05/30 09:35
- Excel(エクセル) エクセルのマクロでコピー後の貼り付け先を毎回指定したところにしたい 5 2022/08/12 10:47
- Excel(エクセル) ②Excel 簡単にシートコピーしたら前日の残高と日付を変更させたい→マクロの記録でエラーが出ます 8 2022/07/16 20:40
- Visual Basic(VBA) 複数csvを横に追加していくマクロについて 2 2023/04/25 09:19
- Visual Basic(VBA) 別シートのデータを参照して値を入れたい。 まとめデータシートのC列D列の値を商品一覧シートのコードが 7 2022/08/17 13:20
このQ&Aを見た人はこんなQ&Aも見ています
-
性格の違いは生まれた順番で決まる?長男長女・中間子・末っ子・一人っ子の性格の傾向
同じ環境で生まれ育っても、生まれ順で性格は違うものなのだろうか。家庭教育研究家の田宮由美さんに教えてもらった。
-
VBA 値と一致した行の一部の列のデータを転記について教えてください
Visual Basic(VBA)
-
vba 2つの条件が一致したらコピーして別シートに値のみ貼り付け
Visual Basic(VBA)
-
【VBA】指定した検索条件に一致したら別シートに転記したい
Visual Basic(VBA)
-
-
4
【VBA】元のシート内の文字列を別シートと比較し、一致したら元のシートの別のセルへ転記する方法。
Excel(エクセル)
-
5
Excelにて、シート間で、データーを比較して、一致したら別シートへ転記するコードを教えてください。
Microsoft ASP
-
6
excel VBA 2つのシートの特定の列を比較して同じ値のセルがあったらその行を上書きしたい
Excel(エクセル)
-
7
【VBA】2つのシートの値を比較して条件一致したら、同じ行の隣の値を別ブックへ転記したいです。 VB
Visual Basic(VBA)
-
8
VBA 別ブックから条件に合うものを転記したいです
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
【ExcelVBA】全シートのセルの...
-
別のシートから値を取得するとき
-
特定の文字を含むシートだけマ...
-
【VBA】シート名に特定文字が入...
-
XL:BeforeDoubleClickが動かない
-
excelのマクロで該当処理できな...
-
ユーザーフォームに入力したデ...
-
エクセルのシート名変更で重複...
-
シートが保護されている状態で...
-
ExcelのVBAのマクロで他のシー...
-
同じ作業を複数のシートに実行...
-
VBA 入力月で該当シートを選択...
-
【VBA】色のついたシート名を取得
-
【VBA】指定した検索条件に一致...
-
Excelマクロのエラーを解決した...
-
エクセルで通し番号を入れてチ...
-
VBAで同じシート名のコピー時は...
-
エクセルVBAでダブルクリックを...
-
ブック名、シート名を他のモジ...
-
エクセルのマクロでアクティブ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
別のシートから値を取得するとき
-
VBAで大量のファイルをシート名...
-
ユーザーフォームに入力したデ...
-
excelのマクロで該当処理できな...
-
【ExcelVBA】全シートのセルの...
-
同じ作業を複数のシートに実行...
-
VBA 存在しないシートを選...
-
Excelマクロのエラーを解決した...
-
特定の文字を含むシートだけマ...
-
実行時エラー'1004': WorkSheet...
-
XL:BeforeDoubleClickが動かない
-
シートが保護されている状態で...
-
実行時エラー1004「Select メソ...
-
【Excel VBA】Worksheets().Act...
-
ブック名、シート名を他のモジ...
-
エクセルのシート名変更で重複...
-
ExcelのVBAのマクロで他のシー...
-
Excel VBA 複数行を数の分だけ...
-
エクセルのマクロについて教え...
-
VBA 最終行まで数式をコピーする
おすすめ情報
今回教えていただいたコードで思い通りの表が作成できました。
大変助かりました。
コードの意味合いが理解できていないので基本から勉強してスキルを少しでも上げたいと思います。
今後も宜しくお願い致します。