Excel表をXML出力

Sub make_xml()
	Dim xdoc As New DOMDocument, xtree As IXMLDOMElement
	Dim PI As IXMLDOMProcessingInstruction
	Dim LOB As IXMLDOMElement
	Dim fld As IXMLDOMElement
	'xml header
	Set PI = xdoc.createProcessingInstruction(“xml", “version=’1.0′ encoding=’UTF-8′ standalone=’yes’")
	Call xdoc.appendChild(PI)
	'root tree
	Set xtree = xdoc.createElement(“all")
	xtree.Text = vbNewLine
	Call xdoc.appendChild(xtree)
	'横軸チェック
	x = 1
	Do While Cells(1, x) <> “": x = x + 1: Loop
	x = x – 1

	y = 2
	'縦ループ
	Do While Cells(y, 1) <> “"
		'親
		Set LOB = xdoc.createElement(“data")
		'横ループ
		For i = 1 To x
			'子1
			Set fld = xdoc.createElement(Cells(1, i))
			fld.Text = Cells(y, i)
			Call LOB.appendChild(fld)
			Call LOB.appendChild(xdoc.createTextNode(vbNewLine))
		Next
		'親書き出し
		Call xtree.appendChild(LOB)
		y = y + 1
	Loop
	'xml保存
	xdoc.Save (“c:\temp\swlist.xml")
	MsgBox “done"
End Sub

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

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

タイマーにて自動呼出し処理

'タイマーを止める時に使う為、グローバル定義
Dim Next_timer As Date
Sub Timer_set()
	'次回のタイマー呼び出しは1分後
	Next_timer = Now + TimeValue("00:01:00")
	'1分後に呼び出す処理を登録
	Application.OnTime Next_timer, "Timer_go"

End Sub

Sub Timer_go()
	'1分後に呼ばれる処理を記述

End Sub

Sub Timer_stop()
	'登録済みのタイマーを止める処理(実行済みのタイマーなら意味なし)
	Application.OnTime Next_timer, Procedure:="Timer_go", Schedule:=False
	'注意:実行済みで呼ばれた場合エラーとなるため、on error resume nextなどが推奨

End Sub

Excelセル検索

Sub find_cell()

	Dim Found As Object, strID As String
	
	'sheet1内のA列を検索(完全一致)
	Set Found = Worksheets(“sheet1").Columns(“A:A").Find(strID, LookAt:=xlWhole)

	If Found Is Nothing Then
		MsgBox “「" & strID & “」は見つかりませんでした。"
	Else
		'見つかったセルの右隣(B=2列目)の値をゲット
		MsgBox Worksheets(“sheet1").Cells(Found.Row, 2)
		'その値を現在、セルがある場所にセット
		Cells(ActiveCell.Row, ActiveCell.Column) = Worksheets(“sheet1").Cells(Found.Row, 2)
	End If

End Sub

ビュークラスのメンバ関数

下記の順番で呼ばれる:

Create()
<Createメッセージ>
 親ウィンドウを指定して子ウィンドウ(ビュー)作成

PreCreateWindow()
<PreCreateWindowメッセージ>
 ウィンドウ(ビュー)の大きさなど設定
 この後で、ビューが完成(外側のみ)

OnShowWindow()
<WM_SHOWWINDOWメッセージ>
 ビューが表示(消れる)時
 ビューの中のオブジェクト表示など

OnUpdate()
<OnUpdateメッセージ>
 最初にドキュメントクラスのデータ読み込み
 ※データ変更時含

OnInitialUpdate()
<OnInitialUpdateメッセージ>
 ビューの中の、オブジェクト作成

OnDraw()
<OnDrawメッセージ> SDIかMDI
 ビューを再描画 ※OnPaint()が無い時

OnPaint()
<WM_PAINTメッセージ> ダイアログベース
 ビューを再描画(最初の描画含)

カテゴリー: MFC

ワイド文字列扱い

//ワイド文字列コピー
WCHAR oomoto = L"大元";
WCHAR aite = [20];
wcscpy( aite, oomoto );
//______________________________________

//ワイド文字列 定義後の代入
WCHAR* hensu = new WCHAR[100];
wcsncpy_s( hensu, 100, L"", 0 );
// hensu = ""
//______________________________________

//ワイド文字列 長さ
WCHAR* SrcData;
i = wcslen( SrcData );
//______________________________________

//ワイド文字列への末尾追加(連結)
WCHAR* oomoto = new WCHAR[100];
WCHAR* tsuika = new WCHAR[2];
wcscat( oomoto, tsuika );
// oomoto = oomoto & tsuika
//______________________________________

//ワイド文字列内検索(INSTR)
WCHAR* oomoto = L"あいうえお";
int index;

//先頭から検索
WCHAR ch = L‘う’;
WCHAR* p = wcschr(oomoto, ch);
index = p – oomoto;
//indexには先頭をゼロとして、2が入る
//pには「うえお」が入る

//末尾から検索
WCHAR* p = wcsrchr(oomoto, L‘え’);
index = p – oomoto;
//indexには先頭をゼロとして、3が入る
//pには「えお」が入る
//______________________________________

//マルチバイト文字列からワイド文字列へのコピー
char oomoto[] = "あいうえお";
WCHAR* aite = new WCHAR[20];
//まずは長さ調査
lens = mbstowcs( NULL, oomoto, 0 );
//長さ分をコピー
lens = mbstowcs( aite, oomoto, lens + 1 );

基本

//WinMainでの引数(argc,argv)
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPreInst, LPSTR lpszCmdLine, int nCmdShow) {
for(i=1; i < __argc; i++)
printf(“%s\n", __argv[i]);
}
//______________________________________

//ロケーション設定
setlocale(LC_ALL, “Japanese_Japan.932");