- ベストアンサー
Excel VBA どうしたらいいんでしょう?
A B C D E F G 101 118 122 133 139 113 114 119 120 124 128 140 126 104 112 131 106 117 121 127 130 119 128 139 113 124 140 114 120 133 118 101 119 126 122 128 このようなExcelのsheetがあって(これはほんの一部)この中にある番号をダブることなく空いている列(例えばI列)に並べたいんですけどどうすればいいのか分からなくて困っています。どなたか教えていただけませんか? 自分で考えたのが、セルA1→B1→C1・・・A2→B2・・・、というふうに順に見ていき、初めて出てくる番号ならばI列に並べていくというふうにしようと思ったのですが、なにぶん初心者な者で、どういうふうにプログラムを書けばいいのかわかりません。宜しくお願いします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
重複したものは1回書き出すとして、書き出す順番は右に行って下に行くを繰り返します。 Sub test() Dim Dic As Object Dim i As Long, j As Long Dim v Set Dic = CreateObject("Scripting.Dictionary") Range("I:I").ClearContents v = Worksheets("Sheet1").Range("A1").CurrentRegion For i = 1 To UBound(v, 1) For j = 1 To UBound(v, 2) If Not IsEmpty(Cells(i, j).Value) And _ IsNumeric(Cells(i, j).Value) Then If Not Dic.Exists(Cells(i, j).Value) Then Dic.Add Cells(i, j).Value, "" End If End If Next Next Range("I1").Resize(Dic.Count, 1).Value = _ Application.Transpose(Dic.keys) Set Dic = Nothing End Sub ご参考になれば。
その他の回答 (1)
- imogasi
- ベストアンサー率27% (4737/17069)
適当なロジックをまず経験から考えて検討する (1)初めて出てくる番号かどうかを、今まで抜き出したセルをすべて1つずつ総なめして判別する (2)まづ1列のセルに1つずつばらし、ソートして重複は捨てる (3)3桁の要素数の配列をつくり、例えば101が始めて出たときN(101)にサイン1を入れる。次回からnが出てきたときN(n)が1ならダブるので捨てる。これは能率がよいが、実際例が数で、かつ3-4桁以内で無いと使えないかと思う。 全コードを書かせることは、丸投げに当たり、本コーナーの規約違反の恐れあるので、書かない。
お礼
ありがとうございました。 参考にさせていただきます。
お礼
早速のご回答ありがとうございました! 参考にさせていただきます。