[[20240406181535]] 『ある桁数までの文字列+漢字1文字を生成』(能天気) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) |

| 全文検索 | 過去ログ ]

 

『ある桁数までの文字列+漢字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

xyz様
コメントありがとうございます。

説明不足で申し訳ございません。
後者の「一般的な漢字」のご認識で問題ございません。
その後者を上記でご提示させて頂きましたスコープ内に、「常用漢字表のようなものをシートに取り込んで、そのなかからランダムに取り出す」記述例をご教授頂けましたら幸いです。

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

xyz様
ご教授いただきありがとうございます。
お教え頂いた内容を色々弄ったりして試行錯誤してみようと思います。
ありがとうございました!
(能天気) 2024/04/07(日) 12:37:16

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.