Sub HashFirstColumn()
' エクスプローラーからファイルを選択
Dim fileName As Variant
fileName = Application.GetOpenFilename("CSVファイル(*.csv),*.csv", , "ファイルを選択してください")
If VarType(fileName) = vbBoolean And Not fileName Then
' ファイルが選択されなかった場合は何もしない
Exit Sub
End If
' ファイルを開く
Dim csvFile As Object
Set csvFile = CreateObject("Scripting.FileSystemObject").OpenTextFile(fileName, 1, False, -1)
' ファイル名を作成
Dim fileDateTime As String
fileDateTime = Format(Now(), "YYYYMMDD_HHMMSS")
Dim newFileName As String
newFileName = Replace(csvFile.Name, ".csv", "_" & fileDateTime & ".csv")
' ファイルを出力
Dim newCsvFile As Object
Set newCsvFile = CreateObject("Scripting.FileSystemObject").CreateTextFile(newFileName, True, False)
' ファイルの最初の列をMD5でハッシュ化して出力
Do While Not csvFile.AtEndOfStream
Dim line As String
line = csvFile.ReadLine
Dim columns() As String
columns = Split(line, ",")
Dim hashValue As String
hashValue = HashString(columns(0))
newCsvFile.WriteLine hashValue & "," & Join(columns, ",", 1)
Loop
' ファイルを閉じる
csvFile.Close
newCsvFile.Close
End Sub
Function HashString(str As String) As String
' 文字列をMD5でハッシュ化する関数
Dim md5 As Object
Set md5 = CreateObject("System.Security.Cryptography.MD5CryptoServiceProvider")
Dim bytes() As Byte
bytes = StrConv(str, vbFromUnicode)
bytes = md5.ComputeHash_2((bytes))
Dim hash As String
Dim i As Integer
For i = 0 To UBound(bytes)
hash = hash & LCase(Right("0" & Hex(bytes(i)), 2))
Next i
HashString = hash
End Function
More than 1 year has passed since last update.
VBAでエクスプローラーからファイルを選択したファイルをInputとし、最初の列をMD5でハッシュ化した上で今の日時をファイル名にして出力する
Posted at
Register as a new user and use Qiita more conveniently
- You get articles that match your needs
- You can efficiently read back useful information
- You can use dark theme
List of users who liked
00