Char,Unicode,ワイド文字

ASCII文字コード:
ー0x00-0x7fまでの128文字(7ビット)

シングルバイト文字セット(SBCS):
-8ビット(1バイト)、ASCII文字

ダブルバイト文字セット(DBCS):
-16ビット(2バイト)
-C言語ではシングルバイト文字もダブルバイト文字もchar型の配列

マルチバイト文字セット(MBCS):
-MSDNの定義では1or2バイト文字
-上記シングル、ダブルは、ここに含まれる
-Shift-JISはここに属する

ワイド文字セット:
-常に16ビット(2バイト)
ーワイド文字はchar型では無い
ーワイド文字はwchar_t型(Unicode)
______________________________________

リテラル文字

シングルバイト文字セット
const char* str = “TEST”;
ダブルクォーテーションで囲まれた文字列を「リテラル文字」と呼ぶ

マルチバイト文字セット
const char* str = “日本語”;

ワイド文字セット
const wchar_t* str = L”先頭にLが必須”;
______________________________________

マルチバイト文字でもUnicodeでも、コードを変えずに使用する方法:
const _TCHAR* str = _T(“これなら自動”);
ーMicrosoft固有の仕様
ーマルチバイト文字、ワイド文字(Unicode)どちらでもOk
ー仕組み:Unicodeの場合_TCHARをwchar_t型に、Unicode以外はChar型にコンパイル時に置換
______________________________________

文字列変換:

マルチバイト文字 → ワイド文字(Unicode)
MultiByteToWideChar関数(Windows API関数)
mbstowcs関数(Cランタイムライブラリ)

ワイド文字(Unicode) → マルチバイト文字
WideCharToMultiByte関数(Windows API関数)
wctomb関数(Cランタイムライブラリ)

MDBアクセス&グリッドへ

//using System.Data.OleDb;
OleDbConnection myConn;
DataView dbRec;

private void gridtst_Load(object sender, EventArgs e)
{ // my document path
	string MDB = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) + "\\db.mdb";

	try
	{ //OleDbConnection
		myConn = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" + MDB);
		myConn.Open();

		//DB Set
		DataSet dSet = new DataSet("DataBase");
		OleDbDataAdapter dAdapt = new OleDbDataAdapter("select * from TBL", myConn);
		dAdapt.Fill(dSet);
		DataTable dTab = dSet.Tables[0];
		//Data Source
		dbRec = new DataView(dTab);
		//grid
		GD.DataSource = dbRec;
		GD.Columns[0].Width = 40;
		GD.Columns[1].HeaderText = "BB";
		//close
		myConn.Close();
	}
	catch (Exception ex)
	{ //Error Message
		MessageBox.Show(ex.ToString());
	}
}

MDB接続

using System.Data.OleDb;

//利用範囲が広い場合、グローバル変数で定義する
OleDbConnection myConn;
DataView dbRec;

// 1) SQL生成 strSQL(実行SQL)
// 2) MDB接続 myConn(接続情報)
// 3) SQL実行 dbRecへ格納
// 4) 取得結果利用
// 5) MDB終了

// —————————————– main
public void GetData(String KEY)
{
	//1) SQL生成 strSQL(実行SQL)
	//SQL Query
	String strSQL = “SELECT * FROM table WHERE index=’” + KEY + “‘”;

	//2) MDB接続 myConn(接続情報)
	//DB OPen
	this.dbConn();

	//3) SQL実行 dbRecへ格納
	//Data Source
	this.dbSet(strSQL);

	//4) 取得結果利用
	lblxxx.Text = dbRec[0].Row["field1"].ToString();
	txtxxx.Text = dbRec[0].Row[2].ToString();
	//フィールド番号指定時は最初を0として数える

	//eof
	if ( dbRec.Count == 0)
	{
	}

	//ex:Loop処理
	int intCNT= 0;
	while (intCNT < dbRec.Count) {
		lblxxx.Text = dbRec[ intCNT ].Row["field1"].ToString();
		txtxxx.Text = dbRec[ intCNT ].Row["field2"].ToString();
		intCNT++;
	}

	//5) MDB終了
	//DB Close
	this.dbClose();
}
// UPDATE,INSERT,DELETE実行
// —————————————– DB execute
public void dbExec(String strSQL)
{
	//Execute SQL
	OleDbCommand EXEC = new OleDbCommand(strSQL, myConn);

	try {
		EXEC.ExecuteNonQuery();
	}
	catch(OleDbException Ex) {
		Console.Write(Ex.ToString());
	}
	catch(Exception Ea) {
		throw Ea;
	}
}
// —————————————– DB connect
public void dbConn()
{
	try {
		String sConnectionString = “Provider=Microsoft.Jet.OLEDB.4.0; Data Source=xvax.mdb”;
		//OleDbConnection
		myConn = new OleDbConnection(sConnectionString);
		//Connection Open
		myConn.Open();
	}
	catch (Exception ex) {
		//Error Message
		MessageBox.Show(ex.ToString());
	}
}
// —————————————– Get data from MDB
public void dbSet(String strSQL)
{
	//DB Set
	DataSet dSet = new DataSet(“DataBase”);
	DataTable dTab = null;

	OleDbDataAdapter dAdapt = new OleDbDataAdapter(strSQL, myConn);
	dAdapt.Fill(dSet);

	dTab = dSet.Tables[0];

	//Data Source
	dbRec = new DataView(dTab);
}
// —————————————– DB Close
public void dbClose()
{
	myConn.Close();
}

指定ファイルを該当アプリで開く

//引数のパスを該当アプリで開く(xls,docなど)
private void OpenDirectFile(String FullPath) {
    //ファイル存在チェック
    if (File.Exists(FullPath) != true) {
        MessageBox.Show(FullPath + ” ファイルが見つかりません”);
    } else {
        try {
            //拡張子に関連付いたアプリで開く
            System.Diagnostics.Process.Start(FullPath);
        }
        catch (Exception eX) {
            MessageBox.Show(FullPath + “\n” + eX.ToString());
        }
    }
}

カテゴリー: C#

ファイル操作

//必須
using System.IO;

//exeファイルをネットワークからMyDocument内へコピーする
string copyFrom = @“\\server\\work\\file.exe";
string copyTO = “c:\\file.exe";
File.Copy(copyFrom, copyTO);

//ファイル削除
File.Delete(copyTO);

//ディレクトリ削除
Directory.Delete(dirMyDoc);

//ファイル存在チェック
String FNAME = “xvax.ini";
if (File.Exists(FNAME) != true) {
	MessageBox.Show(“File not Found “, “File not Found");
	return;
}

//ファイル読み込み
String line;
StreamReader sr = new StreamReader(FNAME);
//1行だけ読み込む
line = sr.ReadLine();

//ファイル書き込み
using (StreamWriter sw = File.CreateText(“書き込み対象ファイル+パス")) {
	sw.WriteLine(“test,test");
	//File Close
	sw.Close();
}
カテゴリー: C#

メッセージボックス

//ノーマル
MessageBox.Show(“メッセージ", “タイトル(省略可)");

//Yes,No判定
if (MessageBox.Show(“よろしいですか?", “判定", MessageBoxButtons.YesNo) != DialogResult.No) {
	textBox1.Text = “Yes";
else
	textBox1.Text = “No!";
}
カテゴリー: C#

環境情報取得

//MyDocument内のパス取得
string dirMyDoc = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) + “\\xvax";

//パス上にディレクトリ存在しない場合
if ( Directory.Exists(dirMyDoc) == false ) {
	//ディレクトリ作成
	Directory.CreateDirectory( Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) + “\\xvax" );
}

//NT LOGIN Name
using System.Runtime.InteropServices;

[DllImport("Advapi32.dll", EntryPoint = "GetUserName", ExactSpelling = false, SetLastError = true)]
static extern bool GetUserName([MarshalAs(UnmanagedType.LPArray)] byte[] lpBuffer, [MarshalAs(UnmanagedType.LPArray)] Int32[] nSize);

byte[] str = new byte[256];
Int32[] len = new Int32[1];
len[0] = 256;
GetUserName(str, len);
//ex
lblLogName.Text = System.Text.Encoding.ASCII.GetString(str);
カテゴリー: C#

指定セル内の指定文字列を赤色に変更

Sub SEARCH_WORD()

	Dim chkVAL As String, FX As Integer
	
	chkVAL = InputBox(“Keyword(該当文字列を赤色にします)", “SEARCH")
	If chkVAL = “" Then Exit Sub

	For Each c In Selection
		
		FX = InStr(1, c.Value, chkVAL)
		If FX > 0 Then c.Characters(Start:=FX, Length:=Len(chkVAL)).Font.ColorIndex = 3
	Next

End Sub

隠しシートの表示

通常はメニューの「書式」-「シート」-「再表示」で非表示シートを表示可能。

しかし、マクロで「VeryHidden」をセットされると「再表示」でも見ることができない。
例)Sheets(“aaa”).Visible = xlVeryHidden

VeryHiddenのシートが存在するかを確認する方法:
1)VBAエディター上のイミディエイトボックスを表示
2)存在するシート数を確認する
 ?sheets.Count
 4
3)表示されているシート数が4未満の場合は、VeryHiddenがあり得る
4)下記のコマンドで強制表示させる(イミディエイトボックス内)
 for i=1 to 4:Sheets(i).Visible=true:next

ピボット並び替え&上位フィルター

Sub run()
	'引数:並べ替えのフィールド名、対象のシート名、Pivot実データの開始Y番号,TOP幾つまでを表示するか
	pivot_SORT_TOP “TITLE", “Sheet4", 5, 10
End Sub

'X軸は日付など、並び替え可能な項目であること
Sub pivot_SORT_TOP(CMname As String, pivot_sheet As String, Y As Long, TOP As Integer)

	Dim X As Long, CH As String

	Sheets(pivot_sheet).Select

	On Error Resume Next
	'縦の項目を一度、全部表示にする
	For i = 1 To ActiveSheet.PivotTables(1).PivotFields(CMname).PivotItems.Count
		ActiveSheet.PivotTables(1).PivotFields(CMname).PivotItems(i).Visible = True
	Next
	
	'Pivotの末列の座標を探す
	X = 2
	Do While Cells(Y – 1, X) <> “": X = X + 1: Loop
	X = X – 1
	
	'横列の昇順並び替え
	Cells(Y – 1, 2).Select
	Selection.Sort Order1:=xlAscending, Type:=xlSortLabels, OrderCustom:=1, _
		Orientation:=xlLeftToRight, SortMethod:=xlPinYin
	
	'並び替えたい列を選択
	Cells(Y, X).Select
	'Range(Chr(64 + X) & Y).Select
	
	'X,Y座標をR1C1形式に変換
	CH = “R" & Y & “C" & X
	'末列を降順でSORT
	Selection.Sort Key1:=CH, Order1:=xlDescending, Type:=xlSortValues, _
		OrderCustom:=1, Orientation:=xlTopToBottom, SortMethod:=xlPinYin
	
	'表示項目がTOP指定より多い場合は、フィルター処理
	If ActiveSheet.PivotTables(1).PivotFields(CMname).PivotItems.Count > TOP Then
	
		On Error Resume Next
		'TOP以降は非表示する
		For i = TOP + 1 To ActiveSheet.PivotTables(1).PivotFields(CMname).PivotItems.Count
			ActiveSheet.PivotTables(1).PivotFields(CMname).PivotItems(i).Visible = False
		Next
	End If
	On Error GoTo 0
	
End Sub