アプリ版:「スタンプのみでお礼する」機能のリリースについて

エクセル関数です(T-T)



指定のセルからランダムで重複しない文字を抽出したいです。。。


たとえばA1のセルからA10まで単語が入っているとします。

それをC1のセルに、A1からA10の中から、ランダムで1つ抽出したいです。



ただし。。

条件としては、、

F9を押したときランダム抽出されるが、F9を何度も押して再計算しても重複せずに、A1~A10のなかの文字をランダムで出て来て、1周まわるようにしてほしいです。
つまり10回再計算したらA1~A10の文字を全て出たことになり、1周まわり、次、11回目から20回目までランダムで重複せずに抽出してくれて2周目になるような、、、

再計算で重複しないで、またランダムで抽出してくれるよう関数は無いでしょうか(T-T)??

ご回答お願い致します、、、

A 回答 (4件)

ユーザー定義関数で実装してみました。

C1セルに、次の数式を入力して使います。
【C1セル】=getrand(A1:A10)

ちなみに、この関数は各周内では重複することは無いのですが、1周目の途中から2周目の途中までをウォッチすると当然、重複が起こりえます。
例えば、1周目(1,2,3,4)、2周目(4,3,2,1)の場合、3回目~6回目を見た時、4が重複して出現しているように見えます。

【ユーザ定義関数】
Option Explicit
Dim strRandam As Variant

Function GetRand(myRng As Range) As Variant
Dim a As Variant
Dim i As Long
Dim j As Long
Dim s As Variant
Application.Volatile
If strRandam = "" Then
For i = 1 To myRng.Count
a = a & " " & i
Next i
a = Split(WorksheetFunction.Trim(a), " ")
For i = 0 To UBound(a)
j = WorksheetFunction.RandBetween(0, UBound(a))
s = a(i)
a(i) = a(j)
a(j) = s
Next i
Else
a = Split(strRandam, " ")
End If

GetRand = myRng(a(0)).Value
a(0) = ""
strRandam = WorksheetFunction.Trim(Join(a, " "))
End Function
    • good
    • 0

>A1~A10のなかの文字をランダムで出て来て、1周まわるようにしてほしいです。


「一周まわるように」これって、ランダムですかね?
    • good
    • 0

こんにちは!



単にランダムに表示させるのであれば簡単ですが、
>A1~A10のなかの文字をランダムで出て来て、1周まわるようにしてほしいです。
となると関数では難しいように思われます。

そこでVBAになりますが一例です。
C1セルをダブルクリックするたびにC1セルに表示させる方法にしてみました。

画面左下の操作したいシート見出し上で右クリック → コードの表示 → VBE画面のカーソルが点滅しているところに
↓のコードをコピー&ペースト → Excel画面に戻り(VBE画面を閉じて)C1セルをダブルクリックしてみてください。

尚、E列を作業用の列として使用していますので、目障りであれば非表示にしてください。

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) '//この行から//
Dim i As Long
If Target.Address = "$C$1" Then
Cancel = True
If Cells(Rows.Count, "E").End(xlUp).Row = 11 Then
Range("E:E").ClearContents
End If
Do
i = Int(10 * Rnd + 1)
Loop Until WorksheetFunction.CountIf(Range("E:E"), i) = 0
Target = Cells(i, "A")
Cells(Rows.Count, "E").End(xlUp).Offset(1) = i
End If
End Sub '//この行まで//

※ これで何とかお望みどおりの動きにならないでしょうか?m(_ _)m
    • good
    • 0

>再計算で重複しないで、またランダムで抽出してくれるよう関数は無いでしょうか(T-T)??


んな関数ありません。(`・ω・´)キッパリ

いくつかの関数を組み合わせて工夫してください。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!