
変動するセル範囲から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

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で質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
vba 2つの条件が一致したらコピーして別シートに値のみ貼り付け
Visual Basic(VBA)
-
【VBA】2つのシートの値を比較して条件一致したら、同じ行の隣の値を別ブックへ転記したいです。 VB
Visual Basic(VBA)
-
【VBA】特定の値が入った行をコピーして別シートに貼り付ける方法をおしえていただきたいです。
Excel(エクセル)
-
-
4
【VBA】元のシート内の文字列を別シートと比較し、一致したら元のシートの別のセルへ転記する方法。
Excel(エクセル)
-
5
【VBA】指定した検索条件に一致したら別シートに転記したい
Visual Basic(VBA)
-
6
エクセルのVBAで日付を検索し転機したい
Visual Basic(VBA)
-
7
エクセルvbaで、別シートの最下行にデータを取り込むコードを教えてください。
Visual Basic(VBA)
-
8
VBA 値と一致した行の一部の列のデータを転記について教えてください
Visual Basic(VBA)
-
9
VBA 別シートの同じ日付の欄に値を貼付け
Excel(エクセル)
-
10
【VBA】指定したセルと同じ値で、別シートにあるセルに移動するには?
Visual Basic(VBA)
-
11
VBA 列全体を別シートの列と比較し、同じ値がある行の、右端に値をコピーする方法について
Excel(エクセル)
-
12
excel VBA 2つのシートの特定の列を比較して同じ値のセルがあったらその行を上書きしたい
Excel(エクセル)
-
13
VBA 別ブックから条件に合うものを転記したいです
Visual Basic(VBA)
-
14
【excelVBA】Findメソッドで検索対象を複数列
Excel(エクセル)
-
15
複数条件が一致で別シートに転記【エクセルVBA】
Excel(エクセル)
-
16
VBAで重複するデータがあれば1個だけ残して他の重複セルを"(空白)にしたいのですが
Excel(エクセル)
-
17
VBAで重複データを合算したい
Excel(エクセル)
-
18
VBAで条件が一致する行をコピーしその1つ下へ挿入
Excel(エクセル)
-
19
VBA シート名が一致した場合の転記内容について
Visual Basic(VBA)
-
20
VBA セルの値と同じ名前のシートにデータを貼り付けするやり方を教えてください
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
実行時エラー1004「Select メソ...
-
【ExcelVBA】全シートのセルの...
-
excelのマクロで該当処理できな...
-
Excel VBA リンク先をシート...
-
特定の文字を含むシートだけマ...
-
Excelマクロのエラーを解決した...
-
XL:BeforeDoubleClickが動かない
-
Access エクセルシート名変更
-
エクセルVBA ListBoxの並び...
-
ユーザーフォームに入力したデ...
-
Worksheet_Changeの内容を標準...
-
セルの値によって、シート見出...
-
【VBA】全ての複数シートから指...
-
EXCEL VBAで複数シートから該当...
-
ワークシートを追加したときの...
-
【VBA】シート名に特定文字が入...
-
PerlでExcelのワークシートを同...
-
エクセルVBA Ifでシート名が合...
-
エクセルで通し番号を入れてチ...
-
エクセルのマクロでアクティブ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excelマクロのエラーを解決した...
-
excelのマクロで該当処理できな...
-
特定の文字を含むシートだけマ...
-
実行時エラー'1004': WorkSheet...
-
ユーザーフォームに入力したデ...
-
【ExcelVBA】全シートのセルの...
-
エクセルVBA Ifでシート名が合...
-
実行時エラー1004「Select メソ...
-
VBA 存在しないシートを選...
-
エクセルで通し番号を入れてチ...
-
VBA 検索して一致したセル...
-
XL:BeforeDoubleClickが動かない
-
VBA 指定した回数分、別シート...
-
VBAマクロでシートコピーした新...
-
シートが保護されている状態で...
-
ブック名、シート名を他のモジ...
-
【VBA】全ての複数シートから指...
-
別のシートから値を取得するとき
-
ExcelのVBAのマクロで他のシー...
-
Excel チェックボックスにチェ...
おすすめ情報
今回教えていただいたコードで思い通りの表が作成できました。
大変助かりました。
コードの意味合いが理解できていないので基本から勉強してスキルを少しでも上げたいと思います。
今後も宜しくお願い致します。