月別アーカイブ: 2012年6月

[SQLServer] 数値を0埋めの文字列で表す

SQLServerにはOracleのLPADやRPADのような、文字を埋め込む関数がないらしい。
そこで、指定した文字数を右、もしくは左から抜き出す関数があるのでそれを活用する。
例えば数値型項目numを0001の用に長さ4で左を0埋めした文字列で表すときには

RIGHT('0000' + convert(varchar,num), 4)

とする。

また、文字列型項目strの右を空白で埋め、長さ10となるようにするときには

LEFT(str + '          ', 10)

とする。

[Excel][VBA]VBAで特殊文字を扱う

VBAで特殊文字を扱おうとしたところうまく行かなかった。
例えば©という文字、VBAのエディタ画面で入力すると「?」と表示されてしまう。

Dim str as String
str = "? 株式会社〇〇" ' 変換してもコピペしても入力できない。

調べた結果、ChrWというメソッドを使う必要があるらしい。

ChrW(/* 文字コード */)

引数に文字コードを渡して文字を表す。

ちなみにコピーライト「©」を表す文字コード(Unicode)は16進数でA9。
「© 〇〇株式会社」を表す文字列を入力するなら

Dim str as String
str = ChrW(&HA9) + " 株式会社〇〇" ' &Hは16進数を表す

とすればOK。

参考:Unicode一覧 0000-0FFF | Wikipedia

[Excel][VBA]複数のファイル、シートのヘッダー、フッターを一括で変更するマクロ

VBAからヘッダー、フッターを操作するには、シートオブジェクトのPageSetupオブジェクトを操作する。

Public Sub Main()
 ' 中央ヘッダーに「〇〇仕様書」という文字列を挿入
 WorkSheets("Sheets1").PageSetup.CenterHeader = "〇〇仕様書"
 ' 右下フッターに「株式会社〇〇」という文字列を挿入
 WorkSheets("Sheets1").PageSetup.RightFooter = "株式会社〇〇"
End Sub

指定したファイルの全シートに対して、フッターを差し替えなければ行けないということになったので、以下のようなマクロを作った。
前提条件として、対象ファイルのフルパスを取得し、A列に入力してあるものとする。

Sub changefoot()

    Dim book As Workbook
    Dim ws As Worksheet
    
    Dim file As String     ' ファイル名(フルパス)
    Dim filename As String ' ファイル名
    Dim tmp As Variant
    
    Dim Row As Long
	' リストの先頭から最後まで繰り返す
    For Row = 1 To Cells(Rows.Count, 1).End(xlUp).Row
        ' ファイル名を取得
        file = Cells(Row, 1).Value
		
		' フルパスからファイル名を抽出
        tmp = Split(file, "¥")
        filename = tmp(UBound(tmp))
		
		' ファイルをオープンする
        Workbooks.Open (file)
		
		' オープンしたブックをアクティブにする
        Set book = Workbooks(filename)
		
		' 保存時の警告を非表示にする
        book.CheckCompatibility = False
		
		'すべてのシートに対して操作を行う。
        For Each ws In book.Worksheets
		   ' フッターの設定
            ws.PageSetup.LeftFooter = ""
            ws.PageSetup.CenterFooter = ""
            ws.PageSetup.RightFooter = "株式会社〇〇"
        Next
        
		'保存して閉じる
        Workbooks(filename).Close SaveChanges:=True
        
    Next
    
End Sub

実行結果は、A列に入力されたファイルのフッターがすべて、右下「株式会社〇〇」となる。