偽裝成萬葉假名的亂碼生成器v0.9
01-29
萬葉假名的字型檔是我從https://zh.wikipedia.org/zh-cn/%E8%90%AC%E8%91%89%E5%81%87%E5%90%8D用笨辦法弄下來的。
推薦閱讀:
順便一提,第二行和第三行分別是平假名和片假名的漢字原型:
喏。
每個音節對應的漢字數量各有不同,一般的函數不足以實現這種新型生成器——我要藉助VBA做一點微小的工作。
基本要求是,在字型檔區域內,隨機選取到某行某列的非空白單元格的值(即庫中的某個漢字)。
Function rn(a, i, b, j As Integer)
Dim rng, sml As RangeSet 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 ObjectSet regEx = CreateObject("VBScript.RegExp")With regEx .Global = True.Pattern = "[^一-龥]"chrc = .Replace(x, "")
End WithSet regEx = NothingEnd Function
篩選字母:
Function lttr(x As String)
Dim regEx As ObjectSet regEx = CreateObject("VBScript.RegExp")With regEx.Global = True.Pattern = "[^a-zA-Z]"lttr = .Replace(x, "")
End WithSet regEx = NothingEnd Function
如何改成篩選數字的VBA函數,一目了然吧……
於是,世界上又多了一個有劇毒的.xlsm文件……
只要敢想,用途還是蠻廣的,比如寫篇訃告:魔獸世界7.1軍團再臨推薦閱讀:
※VBA入門教程
※【VBA初學者教程】- 第一章 VBA入門知識:引用若干單元格區域
※Excel VBA入門(一)數據類型
※如何用VBA語言同一EXCEL中不同sheet中的列數據按列順序導入到一個sheet中去?
TAG:MicrosoftExcel | 日语 | VBA |