Excel VBAでSqlite操作

・必要なものがExcelForSQLite3としてまとまってるのでありがたくダウンロード。
github.com

・zipDLして解凍した中にあるDLLをSqliteを利用するxlsmファイルと同じ場所におく。
32bitExcelならsqlite3.dll/SQLite3_StdCall.dllを
64bitExcelならx64フォルダにあるsqlite3.dllを使いましょう。

・SQLite3VBAModulesフォルダの中に標準モジュールがあるのでVBAのファイルのインポートで取り込む。
32bitExcelならSqlite3.bas / Sqlite3Demo.bas
64bitExcelならSqlite3_64.bas / Sqlite3Demo_64.bas

・Sqlite3Demoの中のAllTests()を呼び出して問題なく動いたらOK

ネタ元

pandanote.info

vb.netでJSONを分解 Json.NET Newtonsoft.Json

サンプルjson

{
    "14": [
        {
            "328": "1301",
            "332": "名前"
        },
        {
            "328": "1305",
            "332": "名前"
        }
    ],
    "173": "",
    "174": "0",
    "175": "2",
    "176": "2021.08.16-20:50:28.087",
    "177": "2021.08.16-20:50:28.217",
    "192": "hogeData"
}

分解サンプル

nugetから"Newtonsoft.Json"追加しとく

Imports Newtonsoft.Json.Linq

Dim jsonObject = JObject.Parse(jsonstr)

' ループでjson分解
Dim futureCodeArray As New ArrayList
Dim jsonObjectC1
For Each jsonObjectC1 In jsonObject("hogekey")
    Dim jsonObjectC2
    For Each jsonObjectC2 In jsonObjectC1.First
        Debug.WriteLine(jsonObjectC2.Value)
        futureCodeArray.Add(jsonObjectC2.Value)
    Next
Next

VB.NET Byte配列を文字列に変換する

UNICODE

Private Function UnicodeBytesToString( 
    ByVal bytes() As Byte) As String

    Return System.Text.Encoding.Unicode.GetString(bytes)
End Function

シフトJIS(SJIS)

    Private Function SJISBytesToString(ByVal bytes() As Byte) As String
        System.Text.Encoding.RegisterProvider(System.Text.CodePagesEncodingProvider.Instance)
        Return System.Text.Encoding.GetEncoding("Shift_JIS").GetString(bytes)
    End Function

ネタ元

docs.microsoft.com

.NETでシフトJISのEncoding取ろうとしてエラーになるのは Coreだから

ASCIIとUnicode以外のエンコーディングがサポートされなくなった。


シフトJISのEncodingを取得するには、「Encoding.GetEncoding("Shift_JIS")」を呼び出す前に、次の1行を追加すればOK

C#

System.Text.Encoding.RegisterProvider(System.Text.CodePagesEncodingProvider.Instance);

VB.net

System.Text.Encoding.RegisterProvider(System.Text.CodePagesEncodingProvider.Instance)

C#でIsNumericの代用

dobon.net


doubleに変換できるかで判断

string str = "-12.34";

//doubleに変換できるか確かめる
double d;
if (double.TryParse(str, out d))
{
    //変換出来たら、dにその数値が入る
    Console.WriteLine("{0} は数値 {1} に変換できます。", str, d);
}
else
{
    Console.WriteLine("{0} は数字ではありません。", str);
}

//.NET Framework 1.1以前では、以下のようにする
//if (double.TryParse(str,
//    System.Globalization.NumberStyles.Float |
//        System.Globalization.NumberStyles.AllowThousands,
//    System.Globalization.NumberFormatInfo.CurrentInfo,
//    out d))

C#でMid、Left、Right関数

dobon.net

/// <summary>
/// 文字列の指定した位置から指定した長さを取得する
/// </summary>
/// <param name="str">文字列</param>
/// <param name="start">開始位置</param>
/// <param name="len">長さ</param>
/// <returns>取得した文字列</returns>
public static string Mid(string str, int start, int len)
{
    if (start <= 0)
    {
        throw new ArgumentException("引数'start'は1以上でなければなりません。");
    }
    if (len < 0)
    {
        throw new ArgumentException("引数'len'は0以上でなければなりません。");
    }
    if (str == null || str.Length < start)
    {
        return "";
    }
    if (str.Length < (start + len))
    {
        return str.Substring(start - 1);
    }
    return str.Substring(start - 1, len);
}

/// <summary>
/// 文字列の指定した位置から末尾までを取得する
/// </summary>
/// <param name="str">文字列</param>
/// <param name="start">開始位置</param>
/// <returns>取得した文字列</returns>
public static string Mid(string str, int start)
{
    return Mid(str, start, str.Length);
}

/// <summary>
/// 文字列の先頭から指定した長さの文字列を取得する
/// </summary>
/// <param name="str">文字列</param>
/// <param name="len">長さ</param>
/// <returns>取得した文字列</returns>
public static string Left(string str, int len)
{
    if (len < 0)
    {
        throw new ArgumentException("引数'len'は0以上でなければなりません。");
    }
    if (str == null)
    {
        return "";
    }
    if (str.Length <= len)
    {
        return str;
    }
    return str.Substring(0, len);
}

/// <summary>
/// 文字列の末尾から指定した長さの文字列を取得する
/// </summary>
/// <param name="str">文字列</param>
/// <param name="len">長さ</param>
/// <returns>取得した文字列</returns>
public static string Right(string str, int len)
{
    if (len < 0)
    {
        throw new ArgumentException("引数'len'は0以上でなければなりません。");
    }
    if (str == null)
    {
        return "";
    }
    if (str.Length <= len)
    {
        return str;
    }
    return str.Substring(str.Length - len, len);
}