- ベストアンサー
Excel マクロについて
0000から9999までの数字で 例えば1234という数字があれば 4321 1423 3421といった数字を抜かして 0000・・・・1234・・・・(4321は抜かす)・・・・9999 といった数字の羅列を作りたいのですが、 このようなマクロは作れますでしょうか。 手計算である程度計算していたのですが、 時間がかかりすぎてしまうためご存知の方はご教授下さい。
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
マクロではなく、エクセルのシートで集計する方法です。 >例えば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)
単純にループするだけだと思いますけど。 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)
こんにちは。 単に、順列なら、途中で数を抜けばよいわけです。 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)
わざわざマクロでなくても思うのですが、取合えず 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)
もしかして組み合わせ? 例えば 1001 とすると 1010、1100は駄目とか つまり1が2個、0が2個の組み合わせが駄目と? 確かにVBAでやってやれないことは無いがVBAの知識は? ここは丸投げ禁止ですのでねぇ 少しでも書いて分からないところの相談ならば
- ASIMOV
- ベストアンサー率41% (982/2351)
>例えば1234という数字があれば この「あれば」とはどういう意味なのでしょうか? 指定するということなのか...?