• ベストアンサー

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列に並べていくというふうにしようと思ったのですが、なにぶん初心者な者で、どういうふうにプログラムを書けばいいのかわかりません。宜しくお願いします。

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

  • ベストアンサー
  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.1

重複したものは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 ご参考になれば。

nookie7
質問者

お礼

早速のご回答ありがとうございました! 参考にさせていただきます。

その他の回答 (1)

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.2

適当なロジックをまず経験から考えて検討する (1)初めて出てくる番号かどうかを、今まで抜き出したセルをすべて1つずつ総なめして判別する (2)まづ1列のセルに1つずつばらし、ソートして重複は捨てる (3)3桁の要素数の配列をつくり、例えば101が始めて出たときN(101)にサイン1を入れる。次回からnが出てきたときN(n)が1ならダブるので捨てる。これは能率がよいが、実際例が数で、かつ3-4桁以内で無いと使えないかと思う。 全コードを書かせることは、丸投げに当たり、本コーナーの規約違反の恐れあるので、書かない。

nookie7
質問者

お礼

ありがとうございました。 参考にさせていただきます。

関連するQ&A