『ある桁数までの文字列+漢字1文字を生成』(能天気)
閲覧ありがとうございます。
ある大量データの情報から、限られた情報をKeyとした上で、
データを作成したいと考えています。
主に、Cカラム列に全角がHITして、Dカラム列の桁数に応じて、
文字列 + 漢字1文字 で編集したいと思っています。
例えば、
・Cカラム列が全角
・Dカラム列が20
結果:あがますおけらりるれをまのぬしざじつら幸
(文字列19字/(漢字1文字))
※文字列は、最悪全て同文字でも構いません(「ああああああ」や「いいいい」)
そのコーティング例を、下記スコープの箇所にご教授願います┏○))
<Input(内部"Sheet1")について>
|A列 |B列 |C列|D列|…|X列|
|No |項目 |属性|桁数|…| |
|1 |1行テキスト |全角|1 |…| |
|2 |1行テキスト |全角|20|…| |
|3 |1行テキスト |半角|3 |…| |
|4 |1行テキスト |半角|8 |…| |
|5 |1行テキスト(和暦)|半角|6 |…| |
|6 |1行テキスト |全角|14|…| |
|7 |- |- | |…| |
|〜 |〜 |〜 |〜 |…| |
|9999|1行テキスト(西暦)|半角|8 |…| |
≪ソースについて≫
option explicit
Dim s,Tmp As String
Dim i,x,z,j As integer
Dim TmpTable() As Variant
Dim 最終行 As Long
最終行 = Cells(.Rows.Count,“A”).End(xlUp).row
内部"Sheet1"のrange("B1:E" & 最終行)をTmpTable()に格納します。
x = 0
z = 0
i = 0
Do Until i > 最終行
Select case True
case TmpTable(i,1) = "-"
TmpTable(i,4) = "-"
case Instr(TmpTable(i,1),"和暦") > 0
TmpTable(i,4) = Format(Now + z, "eemmdd")
z = z + 1
case Instr(TmpTable(i,1),"西暦") > 0
TmpTable(i,4) = Format(Now + x, "yyyymmdd")
x = x + 1
case Instr(TmpTable(i,1),"全角") > 0
※ここでの記述例をご教授願います。
{
1.漢字1文字をランダムに生成
2.桁数分-1の文字列を生成
3.ランダムに生成した漢字1文字を、2.で生成した文字列に連結
4.TmpTable(i,4)に結果を収容 こんな感じで作成頂けましたら幸いです。 }
case Instr(TmpTable(i,2),"半角") > 0
If TmpTable(i,3) < 3 Then
If TmpTable(i,3) = 1 Then
TmpTable(i,4) = Int(9 * Rnd + 1)
End If
If TmpTable(i,3) = 2 Then
TmpTable(i,4) = 1 & Int(9 * Rnd + 1)
End If
Else
j = 0
Do Until j < TmpTable(i,3) - 1
Tmp = Tmp & s
j = j + 1
Loop
TmpTable(i,4) = 1 & Tmp & s & Int(9 * Rnd + 1)
End If
case else
End Select
i = i + 1
Loop
内部"Sheet1"のXカラム列に、TmpTable()の4列目を貼付
処理終了
< 使用 Excel:Excel2016、使用 OS:Windows10 >
ひらがなは特に問題なく、特定の範囲の文字コードからランダムに取り出すことで抽出可能でしょう。
漢字一文字というのが曖昧です。 されようとしていることがよく理解できないのですが、 「ある大量データの情報」のなかに現れる漢字ということなんですか? それとも一般的な漢字ということでいいんですか?
後者なら、Unicodeコードを指定してランダムに抽出することになるかと思いますが、 CJK漢字ということになるので、日本では余り使用されない漢字も入ってきます。 それでは困るということなら、常用漢字表のようなものをシートに取り込んで、 そのなかからランダムに取り出すことになるでしょう。
そのあたりをもう少し説明されたほうがいいでしょう。 (xyz) 2024/04/07(日) 08:44:18
説明不足で申し訳ございません。
後者の「一般的な漢字」のご認識で問題ございません。
その後者を上記でご提示させて頂きましたスコープ内に、「常用漢字表のようなものをシートに取り込んで、そのなかからランダムに取り出す」記述例をご教授頂けましたら幸いです。
1.常用漢字表のようなものをシートに取り込んで、そのなかからランダムに取り出す
2.桁数分-1の文字列を生成
3.2.で生成した文字列と1.で取り出した漢字1文字を連結
4.TmpTable(i,4)に結果を収容
(能天気) 2024/04/07(日) 10:48:38
常用漢字表は例えば下記。 https://ja.wiktionary.org/wiki/%E4%BB%98%E9%8C%B2:%E5%B8%B8%E7%94%A8%E6%BC%A2%E5%AD%97%E3%81%AE%E4%B8%80%E8%A6%A7 これをA列に読み込んでおいて、 k = Application.Randbetween(m,n) 'mからnの間の整数乱数。m,n は漢字個数によって決めてください。 s = Cells(k,"A") 'ランダムな漢字一文字 のようなかんじですね。
ひらがなも同様にできるのではないですか? 直接、文字コードから文字を取り出すこともできます。 ランダムなひらがな10文字を s にセットする例は、次のようになります。 Sub test() Dim j&, k&, s$ s = Application.Rept(" ", 10) For j = 1 To 10 k = Application.RandBetween(1, 66) Mid(s, j, 1) = ChrW(12352 + k) Next ' Debug.Print s End Sub
なお、コードは確認しながら、ご自分でトライしてください。
(xyz) 2024/04/07(日) 11:40:56
なお、ひらがな66文字のなかには、 拗音(ゃゅょ)や促音(っ)や濁音、半濁音なども含まれていることに注意して下さい。 それらを除きたいなら、除いた文字列をシートに展開して、ランダムに取り出す方式でしょう。 (xyz) 2024/04/07(日) 11:57:44
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.