追記する列を増やしたい
2つのデータを検索・照合して元データにないデータを下記マクロで商品名を追記しています。今回、図にあるJ列のコードもA列へ追記したいのですがどう記述したら良いかわかりません。助けてください。
Dim I, L, lRow, mRow As Long
Dim CheckCells As Range
With ActiveSheet
lRow = .Cells(Rows.Count, "E").End(xlUp).Row 'A列の最終行を取得します。(元データ)
mRow = .Cells(Rows.Count, "K").End(xlUp).Row 'K列の最終行を取得します。(追記対象データ)
L = lRow + 1 '追記行を求める(E列最終行+1)
For I = 2 To mRow '追記対象データ分繰り返す(最終行まで)
Set CheckCells = .Range("E:E").Find(.Cells(I, "K")) 'E列全てに対してN列の追記対象データを1件ずつ照合する。
If CheckCells Is Nothing Then 'データが無ければ追記対象データをE列の最終行に追記します
.Cells(L, "E") = .Cells(I, "K")
L = L + 1 'E列の追記行に+1を加算する。
End If
Next I
End With
No.1
- 回答日時:
こんにちは
>図にあるJ列のコードもA列へ追記したいのですがどう記述したら良いかわかりません。
いったいどうやってご提示のコードを作成したのかわかりませんkねれど・・・
>.Cells(L, "E") = .Cells(I, "K")
でK列の値を、E列に追記しているのですから、同じ行に対して、J列の値をA列に記入すれば良いだけではないのでしょうか?
No.5
- 回答日時:
No1です。
>件数が少なく手修正しておりました。
ご質問の本文とは異なる内容に見受けられます。
ご質問文がなさりたいことなら、NO1の回答で。
補足の方が本当にやりたいことなら、商品コードをIDとして用いるのが正でしょうから、現状のコードのA,E列、J,K列を入れ替えれば済む話と思います。
コードを修正するのが嫌なら、シート側の列を入替えておけば、そのままでも利用できるでしょう。
お考えいただきありがとうございます。現状のコードのA,E列、J,K列を入れ替えてみましたがやり方が悪いのかこーA列のコードは空欄でした。
No.6
- 回答日時:
No.4です。
『当月追記対象』のJ・K列のデータは、無論前月のデータは存在せず翌月になれば当月のデータは削除される。
と考えて宜しいのでしょうか?
なので当月については既に左の表に存在するかもしれないし、存在しないかも知れない。
またコードを基準とした並び替えも月毎に必要なのでしょうか?
それとも他のデータを入力?した後に手作業と言う感じなどですか?
>翌月になれば当月のデータは削除されます。
> 存在するかもしれないし、存在しないかも知れません。
> コードを基準とした並び替えも月毎必要です。これは一旦確認したいので最終行を目視で確認し手作業で行いたいです。よろしくお願いします。
No.7
- 回答日時:
1.比較するときに、品名だけではなく、コード+品名で比較して、
左側の表にないものを追記していけば良いと思いますがいかがでしょうか。
2.提示されたマクロをみると、右側の表の開始は2行目のようになってますが、3行目から開始で間違いないでしょうか。
以下のマクロは2行目から処理を行っています。
>For I = 2 To mRow '追記対象データ分繰り返す(最終行まで)
No.8
- 回答日時:
No7です。
一から作り直しになりますが、以下のようにしてください。
標準モジュールに登録してください。
Option Explicit
Public Sub 商品追記()
Dim dicT As Object
Dim maxrow1 As Long
Dim maxrow2 As Long
Dim row1 As Long
Dim row2 As Long
Dim key As String
Dim ws As Worksheet
Set ws = ActiveSheet
Set dicT = CreateObject("Scripting.Dictionary") ' 連想配列の定義
maxrow1 = ws.Cells(Rows.Count, "A").End(xlUp).Row 'A列の最大行取得
maxrow2 = ws.Cells(Rows.Count, "J").End(xlUp).Row 'J列の最大行取得
For row1 = 3 To maxrow1
key = ws.Cells(row1, "A").Value & "|" & ws.Cells(row1, "E").Value
dicT(key) = True
Next
row1 = maxrow1 + 1
For row2 = 3 To maxrow2
key = ws.Cells(row2, "J").Value & "|" & ws.Cells(row2, "K").Value
If dicT.exists(key) = False Then
ws.Cells(row1, "A").Value = ws.Cells(row2, "J").Value
ws.Cells(row1, "E").Value = ws.Cells(row2, "K").Value
dicT(key) = True
row1 = row1 + 1
End If
Next
MsgBox ("完了")
End Sub
No.9ベストアンサー
- 回答日時:
安全運転なので(多分)遅いかもですがご参考程度に。
Sub try()
Dim myDic As Object
Dim ra As Range, rj As Range
Dim st As String
Set myDic = CreateObject("Scripting.Dictionary")
For Each rj In Range("J3", Cells(Rows.Count, "J").End(xlUp))
st = Join(Array(rj.Range("A1").Value, rj.Range("B1").Value), "_")
If Not myDic.exists(st) Then _
myDic.Add st, Array(rj.Range("A1").Value, rj.Range("B1").Value)
Next
For Each ra In Range("A3", Cells(Rows.Count, "A").End(xlUp))
st = Join(Array(ra.Range("A1").Value, ra.Range("E1").Value), "_")
If myDic.exists(st) Then myDic.Remove (st)
Next
If myDic.Count > 0 Then
With Cells(Rows.Count, "A").End(xlUp).Offset(1)
.Range("A1").Resize(myDic.Count, 1).Value = WorksheetFunction.Index(myDic.Items, 0, 1)
.Range("E1").Resize(myDic.Count, 1).Value = WorksheetFunction.Index(myDic.Items, 0, 2)
End With
End If
Set myDic = Nothing
End Sub
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 別シートのデータを参照して値を入れたい。 まとめデータシートのC列D列の値を商品一覧シートのコードが 7 2022/08/17 13:20
- その他(Microsoft Office) マクロVBAについて 1 2022/09/06 18:12
- Visual Basic(VBA) まとめシートから集計シートへA列のコードが一致したら1行コピーするマクロをネット上で見つけました。こ 1 2022/08/30 14:11
- Visual Basic(VBA) 列と行の名前(重複あり)が交差するセルに、データを入力したい 2 2022/06/25 22:42
- Visual Basic(VBA) ExcelVBAのマクロについて。 9 2022/05/04 14:50
- Visual Basic(VBA) 最終列の右へSUM関数を作成するため下記コードを実行しましたが、最終列「10月28日」が上書きされて 3 2022/12/05 20:32
- Visual Basic(VBA) コード名シートA列と集計シートA列のコードが一致したら、コード名シートA5からk12の範囲をコピーし 1 2022/08/29 23:46
- Visual Basic(VBA) ユーザーフォーム「frm_基本❶」を立ち上げると新規で入力する行数を右下のNoとして表示しています。 1 2023/03/16 19:02
- Visual Basic(VBA) vba 重複データ合算 5 2023/07/05 18:55
- Visual Basic(VBA) 【前回の続き続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/24 20:49
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Worksheets メソッドは失敗しま...
-
VBA 何かしら文字が入っていたら
-
vba 2つの条件が一致したら...
-
Cellsのかっこの中はどっちが行...
-
空白セルをとばして転記
-
B列の最終行までA列をオート...
-
Excelで、あるセルの値に応じて...
-
VBAのFind関数で結合セルを検索...
-
VBAを使って検索したセルをコピ...
-
マクロについて。S列の途中から...
-
【VBA】2つのシートの値を比較...
-
エクセルVBA シートモジュール...
-
文字列の結合を空白行まで実行
-
エクセルについて
-
VBAコンボボックスで選択した値...
-
Excel(VBA) 特定の条件に該当...
-
マクロ 最終列をコピーして最終...
-
エクセルVBAにて =A1=B1とすれ...
-
Excel VBA:エクセルのマクロで...
-
エクセルVBA intersect colu...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Worksheets メソッドは失敗しま...
-
Excelで、あるセルの値に応じて...
-
B列の最終行までA列をオート...
-
vba 2つの条件が一致したら...
-
Cellsのかっこの中はどっちが行...
-
VBAを使って検索したセルをコピ...
-
文字列の結合を空白行まで実行
-
VBAのFind関数で結合セルを検索...
-
IIF関数の使い方
-
【VBA】2つのシートの値を比較...
-
マクロ 最終列をコピーして最終...
-
VBA 何かしら文字が入っていたら
-
Changeイベントでの複数セルの...
-
URLのリンク切れをマクロを使っ...
-
エクセルVBAにて =A1=B1とすれ...
-
VBAでのリスト不一致抽出について
-
データグリッドビューの一番最...
-
マクロについて。S列の途中から...
-
VBA UserFormからの転記で
-
targetをA列のセルに限定するに...
おすすめ情報