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で質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) Googleスプレッドシートの割合の関数と円グラフの並べ替えについて 1 2022/07/22 17:31
- Excel(エクセル) Excel 郵便番号順に並び変えたい 同じ番号が複数あるとき 4 2022/04/28 18:35
- Excel(エクセル) エクセルでのマクロを使ったデータの並べ替え 3 2022/12/03 18:54
- Excel(エクセル) 関数EXACT(文字列,文字列)とexcelVBA 3 2022/04/14 15:07
- Excel(エクセル) 結合セルのソートについて 5 2022/04/22 11:57
- C言語・C++・C# C言語プログラム変更 2 2022/12/21 15:03
- その他(Microsoft Office) エクセルソートと抽出について 3 2022/10/22 22:09
- Visual Basic(VBA) VBAで大量データの処理 3 2022/11/15 21:53
- Excel(エクセル) 【エクセル】並び替えからの並び替え方法 7 2022/07/22 09:46
- その他(Microsoft Office) エクセルで串刺ししたシートの並べ替えをしたいです 4 2023/02/14 11:59
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルでの作業計算方法について
-
Microsoft1Officeの互換ソフト...
-
【マクロ】その時、その時で変...
-
はがきについて。
-
【マクロ】読取専用のファイル...
-
エクセル初心者です 関数の入れ...
-
【関数】適切な文字数の数字を...
-
LOOKUP関数を使えばいいのでし...
-
【関数】先頭だけにある、半角...
-
Excel ピボットテーブルで日付...
-
Excelのpivotについて質問です
-
時間によってファイル名が変わ...
-
エクセル 白黒印刷で白線を印刷...
-
Aというブックの1というシート...
-
エクセル関数を教えてください
-
WPS OFFICEでの縦書きについて
-
Excelのチェックボックスの使い...
-
エクセルの条件付き書式につい...
-
エクセルのセルに同じ大きさの...
-
エクセルの関数について教えて...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excel 2019 のピボットテーブル...
-
[関数得意な方]教えて下さい・...
-
Excelにてある膨大なデータを管...
-
[関数について]わかる方教えて...
-
Excel初心者です。 詳しい方、...
-
excelの不要な行の削除ができな...
-
エクセル関数に詳しい方教えて...
-
INDIRECTを使わず excelで複数...
-
[オートフィルタ]で抽出された...
-
エクセルの神よ、ご回答を! エ...
-
エクセル関数に詳しい方、教え...
-
各ページの1番上の表示について
-
Excelで写真のような表を作った...
-
エクセルで不等号記号(≠)が上に...
-
数学 Tan(θ)-1/Cos(θ)について...
-
Excel 2019 は、SPILL機能があ...
-
Excelで全角を半角にしたいので...
-
条件付き書式を教えてください
-
Excel フィルターを掛けた状態...
-
[オートフィルタ]の適用範囲の...
おすすめ情報