Hatena::ブログ(Diary)

はけの徒然日記 このページをアンテナに追加 RSSフィード

2005 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2006 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2007 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2008 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2009 | 01 | 02 | 04 | 05 | 08 | 09 | 10 | 12 |
2010 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 10 | 11 |
2011 | 01 | 02 | 03 | 04 | 11 | 12 |
2012 | 02 | 03 | 05 |
2014 | 02 | 03 | 04 | 05 | 12 |
2015 | 05 | 07 | 08 | 09 | 10 | 11 | 12 |
2016 | 01 | 02 | 04 | 05 | 08 | 09 | 11 |

2016-11-17(Thu)

EXCEL VBAメモ - UTF-8バイト列を文字に変換する

昨日と逆の変換。

UTF-8バイト列にBOMがなくても変換される模様。

Sub Sample()
    Dim buf(2) As Byte
    Dim s As String
    Dim i As Long
    
    buf(0) = &HE3 ' BOMなし
    buf(1) = &H81
    buf(2) = &H82
    
    With CreateObject("ADODB.Stream")
        .Mode = 3 'adModeReadWrite
        .Open
        .Type = 1 ' adTypeBinary
        .Write buf
        
        .Position = 0 ' .Typeを変更するため0にする必要がある
        .Type = 2 'adTypeText
        .Charset = "UTF-8"
        s = .ReadText
        .Close
    End With

    MsgBox s ' BOMがなくても変換された
End Sub

2016-11-16(Wed)

EXCEL VBAメモ - 文字をUTF-8バイト列に変換する

ADODB.Streamオブジェクトテキストで書き込んで、Typeプロパティバイナリに変えてByte配列として読み出す。

なお変換されたUTF-8バイト列にはBOMが付加されている。


Sub Sample()
    Dim buf() As Byte
    Dim s As String
    Dim i As Long
    
    With CreateObject("ADODB.Stream")
        .Mode = 3 'adModeReadWrite
        .Open
        .Type = 2 ' adTypeText
        .Charset = "UTF-8"
        .WriteText "あ"
        
        .Position = 0 ' .Typeを変更するため0にする必要がある
        .Type = 1 'adTypeBinary
        buf = .Read
        .Close
    End With

    s = ""
    For i = 0 To UBound(buf)
        s = s & " " & Hex(buf(i))
    Next
    
    MsgBox s ' EF BB BF E3 81 82
             'BOMが付加されている

End Sub

2016-09-18(Sun)

EXCEL VBAメモ - Rangeで指定した範囲のセルの値を配列変数に

範囲が広い場合にはセルを一つずつ操作するよりも、一旦配列コピーして操作したほうが速い(らしい)。

Sub sample()
    Dim r As Range, ra As Range
    Dim a As Variant
    Dim i As Long, col As Long, row As Long

    Set ra = Range("A1:D3")
    ' 初期値書き込み
    i = 1
        For Each r In ra
        r.Value = i
        i = i + 1
    Next

    ' セル範囲の値を配列変数へコピー
    a = ra
    ' 元の値を二乗する
    For row = 1 To UBound(a)
        For col = 1 To UBound(a, 2)
            a(row, col) = a(row, col) ^ 2
        Next
    Next
    ' 配列をセルに書き戻し
    ra = a
End Sub