
①I列11行目以降には出荷予定の果物の名前が入っています。
F列11行目以降にはその予定納期
②L列11行目以降には納期確定の果物の名前が入っています。
M列11行目以降にはその確定納期
やりたいことはVBAで②のデータを①に更新することです。
(同じ果物名の予定納期を確定納期に変更する)
②に①に存在しない新たなデータがあった場合、①I列11行目以降、F列11行目以降の空白に
それぞれ新しいデータを埋めていきたいです。
(②に新たに追加注文が確定した果物と出荷日を①の空白行に追加していく)
シートの1行目から10行目までのセルには空白が含まれます。
更新する果物の名前は完全一致の場合とします。
新たに更新される果物の名前は他とかぶらないものとします。
お詳しい方、宜しくお願いいたします。

No.4ベストアンサー
- 回答日時:
こうでしょうか?
Sub megu_2()
Dim myDic As Object
Dim r As Range, rr As Range, rs As Range
Set myDic = CreateObject("Scripting.Dictionary")
Set rr = Range("L11", Cells(Rows.Count, "L").End(xlUp))
Set rs = Range("I11", Cells(Rows.Count, "I").End(xlUp))
' L又はL・M列の背景色をすべて消す。ただしどちらかのコードを選んでね!
rr.Interior.ColorIndex = 0 'L列のみの場合
'rr.Resize(, 2).Interior.ColorIndex = 0 'L・M列の場合先頭の'と上の1行を削除
For Each r In rr
myDic.Add r.Value, r.Offset(, 1).Value
'L列にあってI列にない場合
If WorksheetFunction.CountIf(rs, r.Value) = 0 Then
'L又はL・M列の背景色を赤くする。ただしどちらかのコードを選んでね!
r.Interior.ColorIndex = 3 'L列のみの場合
'r.Resize(, 2).Interior.ColorIndex = 3 'L・M列の場合先頭の'と上の1行を削除
End If
Next
For Each r In rs
If myDic.Exists(r.Value) Then
r.Offset(, -3).Value = myDic(r.Value)
End If
Next
Set myDic = Nothing
Set rr = Nothing
Set rs = Nothing
End Sub

No.3
- 回答日時:
事前に日付の書式設定は変更されているとして。
( m/d に)Sub megu()
Dim myDic As Object, key
Dim r As Range, rr As Range
Set myDic = CreateObject("Scripting.Dictionary")
For Each r In Range("L11", Cells(Rows.Count, "L").End(xlUp))
myDic.Add r.Value, r.Offset(, 1).Value
Next
For Each r In Range("I11", Cells(Rows.Count, "I").End(xlUp))
Set rr = r.Offset(1)
If myDic.Exists(r.Value) Then
r.Offset(, -3).Value = myDic(r.Value)
myDic.Remove (r.Value)
End If
Next
If myDic.Count > 0 Then
For Each key In myDic.Keys
rr.Value = key
rr.Offset(, -3).Value = myDic(key)
Set rr = rr.Offset(1)
Next
End If
Set myDic = Nothing
Set rr = Nothing
End Sub
なんかもうちょっと纏められそうな感じですが初級レベルなジジィには厳しくて。。。
分かりやすく、とても良くまとまったコードありがとうございます。
大変申し訳ありません。「②に新たに追加注文が確定した~」の部分ですが、①の空白行ではなく、移動させずにそのままの状態でセルの色だけ赤くできませんでしょうか?
画像では分かりやすく色分けしているだけなので、実際は塗り潰し無しです。
No.2
- 回答日時:
以下のマクロを標準モジュールに登録してください。
シートを直接更新するので、念のため、バックアップをとってから実行してください。
Option Explicit
Public Sub 確定納期設定()
Dim ws As Worksheet
Dim dicT As Object '連想配列(キー:品名)(値:品番)
Dim maxrow1 As Long
Dim maxrow2 As Long
Dim newrow As Long
Dim row1 As Long
Dim row2 As Long
Dim key As Variant
Set dicT = CreateObject("Scripting.Dictionary") ' 連想配列の定義
Set ws = ActiveSheet
maxrow1 = ws.Cells(Rows.Count, "I").End(xlUp).Row 'I列の最大行取得
maxrow2 = ws.Cells(Rows.Count, "L").End(xlUp).Row 'L列の最大行取得
For row1 = 11 To maxrow1
key = ws.Cells(row1, "I").Value
dicT(key) = row1
Next
newrow = maxrow1 + 1
For row2 = 11 To maxrow2
key = ws.Cells(row2, "L").Value
If dicT.exists(key) = True Then
row1 = dicT(key)
ws.Cells(row1, "F").Value = ws.Cells(row2, "M").Value
Else
ws.Cells(newrow, "I").Value = ws.Cells(row2, "L").Value
ws.Cells(newrow, "F").Value = ws.Cells(row2, "M").Value
newrow = newrow + 1
End If
Next
End Sub
No.1
- 回答日時:
>②に①に存在しない新たなデータがあった場合、①I列11行目以降、F列11行目以降の空白にそれぞれ新しいデータを埋めていきたいです。
画像は更新前って事でしょうか?
⇒『マンゴー』が気になってますので。
それと逆のパターン(②に存在しなくて①に存在している)のケースはありませんか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
プロが教えるわが家の防犯対策術!
ホームセキュリティのプロが、家庭の防犯対策を真剣に考える 2組のご夫婦へ実際の防犯対策術をご紹介!どうすれば家と家族を守れるのかを教えます!
-
比較するセルの値が同じ場合の処理
Visual Basic(VBA)
-
別ブックからシートのコピー
Visual Basic(VBA)
-
条件に合ったセルのある行と一つ下の行だけを残す
Excel(エクセル)
-
4
特定の条件に合致したセルを別のブックに貼り付け
Visual Basic(VBA)
-
5
2つのファイルを比較して判定を付ける
Visual Basic(VBA)
-
6
シート間のデータ移行
Visual Basic(VBA)
-
7
値がシート間で一致した場合の処理(大量)
Visual Basic(VBA)
-
8
エクセルの関数で教えてください。
Excel(エクセル)
-
9
Application.Runエラー(1004)
Excel(エクセル)
-
10
.xlsxファイルをエクセルで開くと変な名前になる。
Excel(エクセル)
-
11
Excel VBA 条件にあったデータだけ書き換えていく
Visual Basic(VBA)
-
12
VBAをやり始めたのですが、なんでこうなるのか分かりません。 教えてほしいです。
Visual Basic(VBA)
-
13
Excel:テーブルではなく、ただの表を使うメリットは?
その他(Microsoft Office)
-
14
VBA初心者です。不具合を直したい。
Visual Basic(VBA)
-
15
複数のCSVファイルを横に並べてひとつのエクセルファイルへ結合する方法
Excel(エクセル)
-
16
VBA 複数行を1行にするマクロ
Access(アクセス)
-
17
excel 同じ人と何回仕事をしたか知りたい。
Excel(エクセル)
-
18
教えて下さい。 シート1A列1行目から4桁の数字が並んでいます。 シート2F列にシート1A列にある4
Visual Basic(VBA)
-
19
【Excel VBA】セルの値によって処理を分岐させるには?
Visual Basic(VBA)
-
20
Excelで「1,2,3,4,5」を「1-5」とまとめることはできますか?
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
このカテゴリの人気Q&Aランキング
-
4
Excel VBA 複数ブックシートご...
-
5
Vba テキストボックスでボック...
-
6
複数ファイルのデータの統合に...
-
7
別のシートから値を取得するとき
-
8
VBA シートのボタン名を変更し...
-
9
vba 等間隔の列に対しての計算
-
10
ExcelVBAを使って、値...
-
11
VBA 変数名に変数を使用したい。
-
12
3つのプロシージャをまとめたら...
-
13
特定のPCだけ動作しないVBAマク...
-
14
vba 2つの条件が一致したら...
-
15
Vba テキストボックス文字を右...
-
16
メッセージボックスのOKボタ...
-
17
フォントの大きさ
-
18
エクセルのエラーメッセージ「4...
-
19
VBA初心者です。 セルB2~B6に書...
-
20
VBA 参照先で選んだファイルを...
おすすめ情報
公式facebook
公式twitter
補足します。
①の列の並び変えはしないで日付のみ更新したいです。
画像は更新前です、「もも」「マンゴー」が新たに追加されています。
逆のパターンはありえます、その場合は①に既存のデータはそのまま残しです
。
気づきませんでした、ありがとうございます。