• ベストアンサー

Excel マクロについて

0000から9999までの数字で 例えば1234という数字があれば 4321 1423 3421といった数字を抜かして 0000・・・・1234・・・・(4321は抜かす)・・・・9999 といった数字の羅列を作りたいのですが、 このようなマクロは作れますでしょうか。 手計算である程度計算していたのですが、 時間がかかりすぎてしまうためご存知の方はご教授下さい。

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

  • ベストアンサー
回答No.3

マクロではなく、エクセルのシートで集計する方法です。 >例えば1234という数字があれば 4321 1423 3421といった数字を抜かして これは、同じ数字を入れ替えて組み合わせたものを除外すると解釈しました。 A1~K1のセルに適当な項目名を入力しておきます。 A2:=TEXT(ROW()-2,"0000") A2セルを、A2~A10001セルまでコピーします。 B2:=MID($A2,COLUMN(A2),1)+0 B2セルをB2~E10001セルにコピーします。 F2:=LARGE($B2:$E2,COLUMN(A2)) F2セルをF2~I2セルにコピーします。 J2:=F2&G2&H2&I2 J2セルをJ2~J10001セルにコピーします。 K2:=IF(ISNUMBER(MATCH(J2,J$1:J1,0)),"削除対象","対象") K2セルをK2~K10001セルにコピーします。(少し計算に時間がかかります) そうすると、K列に対象と削除対象が出てくるので、 対象のセルが他に組み合わせが無い数値になります。 A列~J列の数式を値に貼り付け後に、 K列を並び替えし、A列のデータが目的のデータになるかと思います。 対象となるデータは715件となりました。

その他の回答 (5)

  • bonaron
  • ベストアンサー率64% (482/745)
回答No.6

単純にループするだけだと思いますけど。 Sub Test1()   Dim R As Integer   Dim i As Integer   Dim j As Integer   Dim k As Integer   Dim l As Integer   Columns(1).NumberFormatLocal = "@"   For i = 0 To 9     For j = i To 9       For k = j To 9         For l = k To 9           R = R + 1           Cells(R, 1) = i & j & k & l         Next       Next     Next   Next End Sub

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.5

こんにちは。 単に、順列なら、途中で数を抜けばよいわけです。 Sub Test1()   Dim i As Long   Dim j As Long   Dim first As String   Dim last As String   Dim n As String   first = "0000" '初期値   last = "9999"  '最終値   ReDim ar(last - first, 0)   For i = CLng(first) To CLng(last)     n = Format$(i, "0000")     If Not (CBool(InStr(n, 1)) And _       CBool(InStr(n, 2)) And _       CBool(InStr(n, 3)) And _       CBool(InStr(n, 4))) Then       ar(j, 0) = "'" & n       j = j + 1     End If   Next   Cells(1, 1).Resize(UBound(ar) + 1).Value = ar End Sub

  • hallo-2007
  • ベストアンサー率41% (888/2115)
回答No.4

わざわざマクロでなくても思うのですが、取合えず A列に RAND関数使用して 4桁の数字を作るには =INT(RAND()*10000-1) と入れて、書式をユーザー定義 0000 下までたっぷりとコピィします。 B列に =ISERROR(FIND(1,A2)*FIND(2,A2)*FIND(3,A2)*FIND(4,A2)) と入れると4つの数値が 1,2,3,4の場合にFALSE(他の数値があればTRUE) がでますので、B列をオートフィルターでFALSEを抽出して削除すれば ご希望の結果になりませんか。

  • noah7150
  • ベストアンサー率46% (116/251)
回答No.2

もしかして組み合わせ? 例えば 1001 とすると 1010、1100は駄目とか つまり1が2個、0が2個の組み合わせが駄目と? 確かにVBAでやってやれないことは無いがVBAの知識は? ここは丸投げ禁止ですのでねぇ 少しでも書いて分からないところの相談ならば

  • ASIMOV
  • ベストアンサー率41% (982/2351)
回答No.1

>例えば1234という数字があれば この「あれば」とはどういう意味なのでしょうか? 指定するということなのか...?

関連するQ&A