(`・ω・´)
2009年7月26日日曜日
2009年7月19日日曜日
セルの中身をコピペ@Excel VBA
エクセルのクリップボードの挙動はちょっと独特で、「値だけ」とか「書式だけ」をコピペする事が出来、大変便利なのですが、純粋なテキストデータのみをコピーしたり貼り付けたりしたい時もあります。
僕の場合は、F2,Ctrl+Shift+Home,Ctrl+c,Escと一気に操作していたのですが、手数が多くて面倒くさいので、AutoHotKeyを使用して、上記操作をCtrl+Shift+cに割り振って作業していました。
しかし、AutoHotKeyのようなユーティリティを自由に導入できる現場ばかりではないので、同等機能をVBAで作り直す事にします。
以下のコードをPERSONAL.XLSの標準モジュールへ記述。
Private Sub Auto_Close()
With Application
.OnKey "^+c"
.OnKey "^+v"
End With
End Sub
Private Sub Auto_Open()
With Application
.OnKey "^+c", "CopyActiveCellValue"
.OnKey "^+v", "PasteSameValue"
End With
End Sub
Private Sub CopyActiveCellValue()
With Application
.SendKeys "{F2}"
.SendKeys "^{End}"
.SendKeys "^+{Home}"
.SendKeys "^c"
.SendKeys "{Esc}"
.StatusBar = "★アクティブセルの値をコピーしました。"
End With
End Sub
Private Sub PasteSameValue()
With Application
.SendKeys "{BS}"
.SendKeys "^v"
.SendKeys "^{Enter}"
.StatusBar = "★選択セル全てに対し、同じ値を貼り付けました。"
End With
End Sub
マクロでも、Sendkeysを使用した操作については、アンドゥが利くのがミソ。
2009年7月11日土曜日
データの個数と合計を同時に表示@Excel VBA
Excel 2007では、ステータス・バーにオートカルクを複数同時に表示できますが、Excel 2003以前では、一つしか表示できません。
なので、同時に表示するマクロを作ってみました。
PERSONAL.XLSのThisWorkbookに以下のコードを書きます。
Private WithEvents xlApp As Application
Private Sub Workbook_Open()
Set xlApp = Application
End Sub
Private Sub xlApp_SheetSelectionChange( _
ByVal Sh As Object, _
ByVal Target As Range _
)
On Error GoTo ErrProc:
Set wf = WorksheetFunction
xlApp.StatusBar = _
" ■合計=" & wf.Subtotal(9, Target) & _
" ■データの個数=" & wf.Subtotal(3, Target)
Exit Sub
ErrProc:
Set e = Err
xlApp.StatusBar = _
" ■" & e.Description & _
" ■エラー番号:" & e.Number
End Sub
上記は、データの個数と合計を同時に表示するコードですが、WorksheetFunction.Subtotal()の引数を変えてやれば、平均等も表示できます。
でも、平均を表示させたらちょっと重かったです。