• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:VBAで重複データは最後のみ反映し並び替え)

VBAで重複データは最後のみ反映し並び替え

このQ&Aのポイント
  • VBAを使って、重複するデータの最後の文字を抽出し、A列に縦に並べて行う方法を教えてください。
  • E5から横に検索し、重複する文字は最後のみ反映し、空白のセルは無視してA列に転記する方法をVBAで実装したいです。
  • 変更される入力値に対応するために、実行ボタンを設置してVBAで処理を行いたいです。

質問者が選んだベストアンサー

  • ベストアンサー
  • kkkkkm
  • ベストアンサー率66% (1719/2589)
回答No.2

No1です。 > A列に重複は最後の文字を抽出し これの事を考えていませんでした。こちらに変更してください。 参照設定で以下の設定をしてから実行してください。 VBEの画面で「ツール」メニューから「参照設定」をクリックします。 「Microsoft Scripting Runtime」にチェックします。 Sub Test2() Dim mDic As New Scripting.Dictionary Dim c As Range, mVar As Variant Dim i As Long, j As Long: i = 0 Dim LastRow As Long, tmp As Variant Range("A:A").ClearContents With Range("E1") LastRow = .CurrentRegion(.CurrentRegion.Count).Row ReDim tmp(0 To .CurrentRegion.Count) End With For Each c In Range(Cells(1, "E"), Cells(LastRow, "N")) If c.Value <> "" Then tmp(i) = c.Value i = i + 1 End If Next For i = UBound(tmp) To LBound(tmp) Step -1 If mDic.Exists(tmp(i)) = False Then mDic.Add tmp(i), tmp(i) End If Next j = mDic.Count For Each mVar In mDic Cells(j, "A").Value = mDic.Item(mVar) j = j - 1 Next End Sub

twiceexid
質問者

お礼

お早い対応ありがとうございます!助かりました。 修正まで頂いて感謝しております。 本当にありがとうございました!

その他の回答 (4)

  • kkkkkm
  • ベストアンサー率66% (1719/2589)
回答No.5

No3さん わかりました。 文字は最後のみ反映し を考えたらということですね。No1はそのことを考えていませんでした。

  • kkkkkm
  • ベストアンサー率66% (1719/2589)
回答No.4

No3さん 「すべき」というその根拠を教えてください。

  • f272
  • ベストアンサー率46% (8467/18126)
回答No.3

#1さんの書いているコードは If mDic.Exists(c.Value) = False And c.Value <> "" Then mDic.Add c.Value, c.Value End If のところを If c.Value <> "" Then If mDic.Exists(c.Value) = True Then mDic.Remove c.Value mDic.Add c.Value, c.Value End If にすべきじゃないのかなあ。

  • kkkkkm
  • ベストアンサー率66% (1719/2589)
回答No.1

参照設定で以下の設定をしてから実行してください。 VBEの画面で「ツール」メニューから「参照設定」をクリックします。 「Microsoft Scripting Runtime」にチェックします。 Sub Test() Dim mDic As New Scripting.Dictionary Dim c As Range, mVar As Variant Dim i As Long: i = 1 Dim LastRow As Long Range("A:A").ClearContents With Range("E1") LastRow = .CurrentRegion(.CurrentRegion.Count).Row End With For Each c In Range(Cells(1, "E"), Cells(LastRow, "N")) If mDic.Exists(c.Value) = False And c.Value <> "" Then mDic.Add c.Value, c.Value End If Next For Each mVar In mDic Cells(i, "A").Value = mDic.Item(mVar) i = i + 1 Next End Sub

twiceexid
質問者

補足

kkkkkmさま ご親切にお早いご対応ありがとうございます!大変感謝しております。 私の説明が下手で分かり難くすみません 殆ど思い通りに動くのですが重複する物は順番的に最後のみ反映させ 途中は無い物として詰めたいと思ってます。 度々すみませんがご検討宜しくお願い致します。

関連するQ&A