
No.5ベストアンサー
- 回答日時:
#02です。
先に回答したユーザ定義関数(マクロ)では文字数が1文字の時と、セルが空白の時#VALUE!エラーとなりますので、以下に差し替えてくださいFunction StrRnd(ByVal trg As Range) As String
Dim wkStr As String
Dim ptr As Integer
Randomize
wkStr = trg.Value
Do While Len(wkStr) > 1
ptr = Int(Rnd * Len(wkStr)) + 1
StrRnd = StrRnd & Mid(wkStr, ptr, 1) & " "
wkStr = Left(wkStr, ptr - 1) & Right(wkStr, Len(wkStr) - ptr)
Loop
StrRnd = StrRnd & wkStr
End Function
この回答へのお礼
お礼日時:2007/09/12 16:40
早速のご回答ありがとうございました。
1回目失敗しましたが、再度、やりなおしで見事に並びました。
自分で考えていたのでは、なかなかここまでできません。
本当に助かりました。ありがとうございました。
No.4
- 回答日時:
こんにちは。
ご質問の意図は分かるけれども、関数では、乱数表は、一個の単語ずつでしか出来ないと思います。マクロは、なかなか難しいと思いますね。それは、なによりも、乱数が入るから、乱数の順位を取って、それを、文字列の順位に当てはめるという作業は、かなり複雑な内容になるはずです。
関数で、一つずつ処理する方法です。
まず、一番長い単語の数よりも、右の位置に乱数をおきます。
つまり、その乱数表と単語の間のセル幅を狭くしておきます。
イメージ(分かりにくいかもしれません)
A B C D E F G F I J K
teacher h e c e r t 7 0.478379949 3
0.147999063 5
0.091289246 6
A1:
teacher
I1:
7 (文字列の数)
J1~適当なところまで、
=RAND()
K1~適当なところまで、
=IF(ROW(A1)>$I$1,"",RANK(J1,OFFSET($J$1,,,$I$1)))
B1~右に
=IF(COLUMN(A1)>=LEN($A$1),"",MID($A1,OFFSET($K$1,COLUMN(A1),0),1))
そうすると、ランダムな文字の並びが出てきます。
それが出てきたら、コピーして、[値貼り付け] をします。値貼り付けボタンをユーザー設定のコマンドから貼り付けてあったほうが便利です。
このようにして、文字列化させたら、2行目も同じようにしていきます。
No.3
- 回答日時:
No1です
追記
IF文は最大文字数を超える場合にセルを空白にするためのものですが、
MIDB関数の場合必要ありませんでした。
C1 に =MIDB(A1,1,1)
D1 に =MIDB(A1,2,1)
以下同じ、失礼しました。
ついでに、文字結合関数のCONCATENATEの変わりに、文字列演算子&も使用できます。
=G1&C1&D1&E1・・・・・・
です。関数の勉強をされているようなので、CONCATENATE関数を紹介しました。
作業列を表示したくない場合は、作業列を選択し、書式、列、表示しないを選んでください。
正確に確認せず回答してすいませんでした。
No.2
- 回答日時:
ワークシート関数では難しそうなので、ユーザ定義関数を作ってみました。
以下のマクロをALT+F11でVBE画面を開き、左上のVBA Projectでシート名を右クリックし「挿入」→「標準モジュール」で表示される画面に貼り付けて下さい。VBE画面を閉じてワークシート画面に戻り、B1セルに
=StrRnd(A1)
と入力すると、A1セルの文字をランダムに並べ替えます。
Function StrRnd(ByVal trg As Range) As String
Dim wkStr As String
Dim ptr As Integer
Randomize
wkStr = trg.Value
Do
ptr = Int(Rnd * Len(wkStr)) + 1
StrRnd = StrRnd & Mid(wkStr, ptr, 1)
wkStr = Left(wkStr, ptr - 1) & Right(wkStr, Len(wkStr) - ptr)
Loop Until Len(wkStr) = 1
StrRnd = StrRnd & wkStr
End Function
もしB列に格納する文字間に空白を入れたいなら、8行目を以下に変更してください
StrRnd = StrRnd & Mid(wkStr, ptr, 1) & " "
No.1
- 回答日時:
作業列が必要になりますが
LENB関数で文字数を求め、MIDB関数で希望する文字を取り出します。
C1 に =IF(LENB(A1)<1,"",MIDB(A1,1,1))
D1 に =IF(LENB(A1)<2,"",MIDB(A1,2,1))
E1 に =IF(LENB(A1)<3,"",MIDB(A1,3,1))
以下最大文字数まで続けます。
B1 の規則がわからないのですが
文字結合関数のCONCATENATEを使用し
B1 に =CONCATENATE(E1,D1,C1・・・)
とすればいかがでしょうか。
作業列が作成できない場合は
=CONCATENATE(IF(LENB(A1)<3,"",MIDB(A1,3,1)),IF(LENB(A1)<2,"",MIDB(A1,2,1)),・・・)
でも可能ですが、修正などを考えると作業列は必要でしょう。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
表計算ソフトでの様式の呼称
-
【画像あり】【関数】指定した...
-
エクセルでフィルターした値を...
-
勤怠表について ABS、TEXT関数...
-
エクセルシートの見出しの文字...
-
【マクロ】実行時エラー '424':...
-
エクセルに写真が貼れない(フ...
-
【マクロ】左のブックと右のブ...
-
他のシートの検索
-
vba テキストボックスとリフト...
-
【マクロ】数式を入力したい。...
-
【マクロ】元データと同じお客...
-
【画像あり】オートフィルター...
-
Office2021のエクセルで米国株...
-
エクセルの複雑なシフト表から...
-
エクセルのVBAで集計をしたい
-
【関数】3つのセルの中で最新...
-
【マクロ】【相談】Excelブック...
-
【マクロ】【配列】3つのシー...
-
【関数】=EXACT(a1,b1) a1とb1...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
【マクロ】実行時エラー '424':...
-
エクセルのVBAで集計をしたい
-
Office2021のエクセルで米国株...
-
【画像あり】オートフィルター...
-
vba テキストボックスとリフト...
-
他のシートの検索
-
【マクロ】【相談】Excelブック...
-
【マクロ】【配列】3つのシー...
-
【マクロ】元データと同じお客...
-
【マクロ】数式を入力したい。...
-
【マクロ】左のブックと右のブ...
-
エクセルの関数について
-
エクセルのリストについて
-
【マクロ】変数に入れるコード...
-
エクセルシートの見出しの文字...
-
【マクロ】excelファイルを開く...
-
【関数】3つのセルの中で最新...
-
エクセルの複雑なシフト表から...
-
【マクロ】【画像あり】❶ブック...
-
LibreOffice Clalc(またはエク...
おすすめ情報