偽裝成萬葉假名的亂碼生成器v0.9

萬葉假名的字型檔是我從zh.wikipedia.org/zh-cn/用笨辦法弄下來的。

順便一提,第二行和第三行分別是平假名和片假名的漢字原型:

喏。

每個音節對應的漢字數量各有不同,一般的函數不足以實現這種新型生成器——我要藉助VBA做一點微小的工作。

基本要求是,在字型檔區域內,隨機選取到某行某列的非空白單元格的值(即庫中的某個漢字)。

Function rn(a, i, b, j As Integer)

Dim rng, sml As Range

Set rng = Application.Range(Application.Worksheets("Sheet1").Cells(a, i), Application.Worksheets("Sheet1").Cells(b, j))

d = Application.WorksheetFunction.RandBetween(1, b)

Set sml = Application.Range(Application.Worksheets("Sheet1").Cells(4, d), Application.Worksheets("Sheet1").Cells(b, d))

c = Application.WorksheetFunction.RandBetween(1, Application.WorksheetFunction.CountA(sml) - 3)

rn = Application.WorksheetFunction.Index(rng, c, d) & Application.Worksheets("Sheet1").Cells(1, d)

End Function

函數自變數為字型檔區域rng的兩點行列坐標,例如本次的區域為A4:BP31,則令a=4,i=1,b=31,j=68(Cells的坐標是先行後列)。

很明顯就能發現,該生成器正常運行的結算方式為:先確定列數d,再確定行數c。CountA函數用來過濾掉空白單元格,保證隨到的值不重不漏。

原始結果是漢字和音節羅馬字轉寫共存的,為了將「野no等to歌shi洲su千chi宇u」……等結果骨肉分離, 用到了漢字/字母提取函數(這一部分是網上借鑒的):

篩選漢字:

Function chrc(x As String)

Dim regEx As Object

Set regEx = CreateObject("VBScript.RegExp")

With regEx

.Global = True

.Pattern = "[^一-龥]"

chrc = .Replace(x, "")

End With

Set regEx = Nothing

End Function

篩選字母:

Function lttr(x As String)

Dim regEx As Object

Set regEx = CreateObject("VBScript.RegExp")

With regEx

.Global = True

.Pattern = "[^a-zA-Z]"

lttr = .Replace(x, "")

End With

Set regEx = Nothing

End Function

如何改成篩選數字的VBA函數,一目了然吧……

於是,世界上又多了一個有劇毒的.xlsm文件……

只要敢想,用途還是蠻廣的,比如寫篇訃告:魔獸世界7.1軍團再臨


推薦閱讀:

VBA入門教程
【VBA初學者教程】- 第一章 VBA入門知識:引用若干單元格區域
Excel VBA入門(一)數據類型
如何用VBA語言同一EXCEL中不同sheet中的列數據按列順序導入到一個sheet中去?

TAG:MicrosoftExcel | 日语 | VBA |