No.5ベストアンサー
- 回答日時:
個人的には
>For シートNo = 2 To Worksheets.Count
>Set a_Sht = Sheets("一覧")
この Set a_Sht ~ はループ(For To~Next)の中で何度も実行せず、ループの前で1回だけで良いと思います。
シートの選択が固定されてますしね。
SheetsとWorksheetsは厳密には違いますので(今はあまり意識して使われないかもですが)、Worksheetsに統一が宜しいのでは?
Set a_Sht = Worksheets("一覧") '←ここ
For シートNo = 2 To Worksheets.Count
'★Set a_Sht = Sheets("一覧")
あ、でもシートをSelectとかしているってなら上記はまずいかもですが、その先が不明なので・・・
No.4
- 回答日時:
No3の方のアドバイスに従い、Dictionaryオブジェクトをつかってみました。
Public Sub 個数梱包設定()
Dim ws1 As Worksheet '一覧シート
Dim ws2 As Worksheet '左から4番目以降のシート
Dim maxrow1 As Long '一覧シート最大行
Dim maxrow2 As Long '左から4番目以降のシートの最大行
Dim row1 As Long '一覧シート行番号
Dim row2 As Long '左から4番目以降の行番号
Dim dicT As Object 'Dictionary キー:コード+品名 値:一覧シートの行番号
Dim key As String 'Dictionaryのキー
Dim i As Long
Set dicT = CreateObject("Scripting.Dictionary") ' Dictionay定義
Set ws1 = Worksheets("一覧")
maxrow1 = ws1.Cells(Rows.Count, "A").End(xlUp).Row 'A列 最終行を求める
'Dictionaryを作成
For row1 = 3 To maxrow1
key = ws1.Cells(row1, "A").Value & "|" & ws1.Cells(row1, "E").Value
dicT(key) = row1
Next
'左から4番目以降のシートを右へ順番に処理する
For i = 4 To Worksheets.Count
Set ws2 = Worksheets(i)
maxrow2 = ws2.Cells(Rows.Count, "A").End(xlUp).Row 'A列 最終行を求める
For row2 = 4 To maxrow2
key = ws2.Cells(row2, "A").Value & "|" & ws2.Cells(row2, "B").Value
'コード+品名が一覧シート内にあるなら設定する
If dicT.exists(key) = True Then
row1 = dicT(key)
ws1.Cells(row1, "F").Value = ws2.Cells(row2, "C").Value '個数設定
ws1.Cells(row1, "G").Value = ws2.Cells(row2, "D").Value '梱包設定
End If
Next
Next
MsgBox ("完了")
End Sub
No.3
- 回答日時:
>4) 4番目のシートG列の値を
D列ではなくて?
それと画像と実際のセル開始位置(シート名:”一覧”)は違うのですか?
多分Dictionaryオブジェクトを使うと楽だと思いますよ。
まだ未経験であれば最初はきついかもですけど、過去質で Dictionary を検索しExcelの質問を探し出してみるとかですかね。
と同時にネット検索をして基本的な使い方『 VBA Dictionaryオブジェクト 』を知ることが先かな。
No.2
- 回答日時:
面倒なんでワークシート名を全部取得すれば良い。
そのあと、それを使って処理をする。
・・・
Dim i As Long
Dim SheetsCnt As Long
'これでワークシートの数を取得できる。
'ThisWorkbook.Sheets.Count
'ここから全てのワークシート名を取得する。
SheetsCnt = ThisWorkbook.Sheets.Count
For i = 1 To SheetsCnt
Debug.Print Sheets(i).Name
'シート名をセルの上に表示する。
'Cells(i, 1).Value = Sheets(i).Name
Next
・・・
こんな感じ。
取得したシート名をセルの上に表示するなら、コメントにした
'Cells(i, 1).Value = Sheets(i).Name
これをコメントアウトしてください。
No.1
- 回答日時:
まずは選択するための条件を「箇条書き」にしてみましょう。
そのうえで、どの順番に条件を比較すれば良いかを決め、
1、その順番に対象を比較する。
2、条件が満たされたらコピーする。
3、比較対象が他にあれば1へ戻り、無ければ終了。
こんなコードにすればいい。
とりあえず「箇条書き」から始めてみましょう。
・・・余談・・・
ここは「代わりに作ってください」と作業依頼する場所ではありません。
自力で解決できるようになるためのアドバイスをもらう場所です。
もしも代わりに作ってもらうことを希望しているのであれば、他の有料サイトを利用するようにしましょう。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 【部分一致した行を含む8行をシートにコピーする方法】 以下のような作業を行いたいのですが、どなたがコ 1 2022/08/30 16:24
- Visual Basic(VBA) コード名シートA列と集計シートA列のコードが一致したら、コード名シートA5からk12の範囲をコピーし 1 2022/08/29 23:46
- Excel(エクセル) Excelにて、行の最後のセルの値をコピーして別sheetに張りつけるVBAコードをご教授願います 3 2022/11/20 14:35
- Visual Basic(VBA) 集計シートA列のコードと一致する右に並んだシート名(コード)の3行目から10行目をコピーして貼り付け 4 2022/08/18 15:24
- Visual Basic(VBA) まとめシートから集計シートへA列のコードが一致したら1行コピーするマクロをネット上で見つけました。こ 1 2022/08/30 14:11
- Excel(エクセル) vba アクティブシートのA1セルの値を基準に複数のシートコピー&シート名を 6 2023/04/12 18:36
- Visual Basic(VBA) 別シートのデータを参照して値を入れたい。 まとめデータシートのC列D列の値を商品一覧シートのコードが 7 2022/08/17 13:20
- その他(Microsoft Office) エクセルマクロ オートフィルターでで選択コピー 2 2022/04/18 11:05
- Excel(エクセル) Excelで質問です! 現在マクロを勉強中の初心者です。 以下のような表から、会社名が空白のもの以外 2 2022/06/14 12:16
- Visual Basic(VBA) 複数のシートを一つのシートにまとめたい 左から3番目以降のシートのE列のセルに⚪︎が入っている行を抽 2 2022/09/18 18:42
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Worksheets メソッドは失敗しま...
-
vba 2つの条件が一致したら...
-
Cellsのかっこの中はどっちが行...
-
【VBA】2つのシートの値を比較...
-
データグリッドビューの一番最...
-
Excelで、あるセルの値に応じて...
-
マクロ 最終列をコピーして最終...
-
DataGridViewに空白がある場合...
-
VBAで、特定の文字より後を削除...
-
rowsとcolsの意味
-
B列の最終行までA列をオート...
-
VBAを使って検索したセルをコピ...
-
VBAで、離れた複数の列に対して...
-
マクロ 関数を使った抽出でエラ...
-
IIF関数の使い方
-
VBAで重複データを確認したい
-
Changeイベントでの複数セルの...
-
VBAのFind関数で結合セルを検索...
-
エクセル アクティブセルから...
-
文字列の結合を空白行まで実行
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Worksheets メソッドは失敗しま...
-
Excelで、あるセルの値に応じて...
-
B列の最終行までA列をオート...
-
vba 2つの条件が一致したら...
-
Cellsのかっこの中はどっちが行...
-
VBAを使って検索したセルをコピ...
-
VBAのFind関数で結合セルを検索...
-
文字列の結合を空白行まで実行
-
IIF関数の使い方
-
【VBA】2つのシートの値を比較...
-
マクロ 最終列をコピーして最終...
-
Changeイベントでの複数セルの...
-
VBA 何かしら文字が入っていたら
-
URLのリンク切れをマクロを使っ...
-
エクセルVBAにて =A1=B1とすれ...
-
VBAでのリスト不一致抽出について
-
データグリッドビューの一番最...
-
マクロについて。S列の途中から...
-
VBA UserFormからの転記で
-
targetをA列のセルに限定するに...
おすすめ情報
<コピーの条件>
1)4番目のシートA列のコードと一覧シートA列を照合し一致
2)4番目のシートB列の品名と一覧シートのE列を照合し一致<1)2)が一致したら>
3) 4番目のシートC列の値を一覧シートF列へ貼り付ける
4) 4番目のシートG列の値を一覧シートG列へ貼り付ける
5)5番目以降のシートで1)から4)を繰り返す
頭を整理して下記コードを書いたのですがシート名100001の転記しか出来ず、他のシートを繰り返す記述が分かりません。どのように変えたら良いか教えてください。
Dim a_Sht As Worksheet
Dim b_Sht As Worksheet
Dim MyList() As Variant
Dim LastRow As Long
Dim i As Long
Dim j As Long
Set a_Sht = Sheets("一覧")
Set b_Sht = Sheets("100001")
b_Sht.Select
MyList = b_Sht.Range("A2", Range("A" & Rows.Count). _
End(xlUp)).Resize(, 4).Value
LastRow = a_Sht.Cells(Rows.Count, 1).End(xlUp).Row
For i = 1 To LastRow
For j = 1 To UBound(MyList)
If a_Sht.Cells(i, 1) = MyList(j, 1) And _
a_Sht.Cells(i, 2) = MyList(j, 2) Then
a_Sht.Cells(i, 6) = MyList(j, 3)
a_Sht.Cells(i, 7) = MyList(j, 4)
End If
Next j
Next
下記へ変更し結果は得られたのですがあってますでしょうか。ご指摘があれば教えてください。
Dim a_Sht As Worksheet
Dim b_Sht As Worksheet
Dim MyList() As Variant
Dim LastRow As Long
Dim i As Long
Dim j As Long
Dim シートNo As Long
For シートNo = 2 To Worksheets.Count
Set a_Sht = Sheets("一覧")
Set b_Sht = Worksheets(シートNo)