topimg.jpg


MS Office Word2007で宛名印刷

●目的
エクセルに書き込んだ住所録一覧を取り込み、1ページに複数枚のラベルを作成し、印刷する

●簡易手順
1.複数ラベルの作成
   差し込み印刷>差し込み印刷の開始>ラベル
2.エクセル住所録をインポート
   宛先の選択>既存リストを使用
3.レイアウト作成
   差し込みフィールドの挿入
     ※«Next Record»を使用して、複数ラベルに各レコードを挿入する
4.印刷
   完了と差し込み>文書の印刷


●参考
http://www.eurus.dti.ne.jp/~yoneyama/Word2007/word2007-label.html
http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1150873376



スポンサーサイト
  1. 2013/10/14(月) 16:53:42|
  2. MSOffice
  3. | トラックバック:0
  4. | コメント:0

ピボットテーブルで、行ラベルに複数アイテム登録したとき、階層表示にせず、横並びにする方法

EXCEL2007の場合

右クリック⇒ピポッドテーブルオプション⇒表示タブ⇒従来のピボットテーブルレイアウトを使用する
にチェックを入れる


  1. 2012/09/22(土) 03:21:33|
  2. MSOffice
  3. | トラックバック:0
  4. | コメント:1

EXCEL小ネタ①

●文字列結合で改行を入れる
A1,B1に結合したい文字列がある場合、
C1セルに
「=CONCATENATE(A1,CHAR(10),B1)」
という計算式を入力する

●数値をテキストとして表示させる
セルに0.100という数値が入っている場合、グラフのタイトル等に表示させようとすると、0.1と表示されてしまう。
これを0.100と表示させたいときは、TEXT関数を使用し、数値を文字列に変換すればよい。
(例)A1に0.100という数値型の値が入っている場合、A1以外の任意のセルに以下の式を入力すると0.100という文字列で認識される
 =TEXT(A1,"0.000")

●グラフタイトルをセル参照する
仮のグラフタイトルを一旦表示
 ↓
グラフタイトルを選択
 ↓
数式バーに「=」を入力
 ↓
グラフタイトルと連動させたいセルをクリック
 ↓
[Enter]キーを押す

引用元
http://www.relief.jp/itnote/archives/003184.php

●EXCEL2007の保存形式
xlsm・・・マクロが保存される
xlsx・・・マクロが保存されない
これの違いよく理解せずにマクロ作成してて、4時間かけて作ったマクロデータが吹っ飛んだ。

●EXCELのハイパーリンクされたセルを一括無効化
ハイパーリンクされていないセルをコピー
 →形式を選択して貼り付け
  →演算の乗算を選択
  1. 2012/01/09(月) 06:29:32|
  2. MSOffice
  3. | トラックバック:0
  4. | コメント:0

データが存在する数だけ同じフォーマットでグラフ作成するマクロ

指定した位置にあるデータを抽出し、データが存在する数だけ同じフォーマットでグラフ作成するマクロを作成した。
グラフ化1



●マクロ設計方針
1.グラフのデータソースを参照
2.グラフのテンプレートを適用
 →デザインやグラフ種類等、テンプレートに記憶させることができるグラフ情報はテンプレートに持たせ、事前にテンプレートを用意しておく
3.グラフのサイズと配置場所を指定
 →上記情報はテンプレートで保持できないのでマクロで指定する
4.タイトルや軸ラベルをセル参照により挿入
 →上記情報もテンプレートで保持できないのでマクロで指定する
5.標準誤差(エラーバー)を挿入
6.データが存在する場合は1~5をループ

●ノウハウ
①X軸とY軸のセル参照箇所が離れているシートからSetSourceDataメソッドで代入する
Dim XvarCell As Range
Dim YvarCell As Range
Set XvarCell = Range("A1:A3")
Set YvarCell = Range("C1:C3")
Set GraphArea = Union(XvarCell, YvarCell)
ActiveSheet.ChartObjects(1).Chart.SetSourceData Source:=GraphArea

②グラフのサイズと位置を指定する
With ActiveSheet.ChartObjects(1)
.Width = 50
.Height = 100
.Top = Range("A1").Top
.Left = Range("A1").Left
End With

③グラフのタイトルや軸ラベルを挿入する
ActiveChart.ChartTitle.Characters.Text = "Title"
ActiveChart.Axes(xlCategory, xlPrimary).AxisTitle.Characters.Text = "X軸ラベル"
ActiveChart.Axes(xlValue, xlPrimary).AxisTitle.Characters.Text = "Y軸ラベル"

④指定した文字列を含むセルの数をカウントする
Dim cnt As Long
cnt = WorksheetFunction.CountIf(ActiveSheet.Range("G1:G1000"), "*.xls*")

⑤標準誤差(エラーバー)をセル参照により棒グラフへ挿入する
こいつはネットで参考情報探しても全くヒットしなかったので、少し解説。
ErrorBarメソッドの引数Amountは、Variant型(何でもOK型)である。
EXCELのヘルプからの引用
Amount
バリアント型 (Variant) 誤差の量を指定します。引数 Type に xlErrorBarTypeCustom が指定されているときは、正の誤差量だけを指定できます。


ただ、系列ごとに複数の値を別々に指定する方法がわからない。そこで、「Variant型だから、そこらへん柔軟に作られているだろう」という推測のもと、試行錯誤してみた。結果的に、Double型の配列作って代入してみたら、なんかうまくいった。ご参考までに。
Dim SEvar(2) As Double
SEvar(0) = 0.1
SEvar(1) = 0.2
SEvar(2) = 0.4
ActiveChart.SeriesCollection(1).ErrorBar Direction:=xlY, Include:=xlPlusValues, Type:=xlCustom, Amount:=SEvar


●参考(上記ノウハウ番号と対応)
①グラフの参照範囲を変更する
http://officetanaka.net/excel/vba/tips/tips150.htm
②グラフの位置を設定する
http://officetanaka.net/excel/vba/graph/03.htm
③グラフを作成する(1)
http://www.serpress.co.jp/excel/vba026.html
④データをカウントする
http://officetanaka.net/excel/vba/db/db02.htm

●サンプルコード
'変数の宣言
Dim BaseCell As String
Dim GraphArea As Range
Dim XvarCell As Range
Dim YvarCell As Range
Dim Title As String
Dim X_Axis As String
Dim Y_Axis As String
Dim SEvar(2) As Double
Dim TemplateName As String
Dim GraphWidth As Integer
Dim GraphHeight As Integer

Sub MakeGraph()

'適用テンプレートの読み込み
Dim tmpl As Integer
tmpl = Range("B67").Value
TemplateName = Range("B56").Offset(tmpl, 0).Value

'グラフサイズ設定の読み込み
GraphWidth = Range("B70").Value
GraphHeight = Range("B71").Value

'データ抽出で検出した件数をカウント※ノウハウ④
Dim cnt As Long
cnt = WorksheetFunction.CountIf(ActiveSheet.Range("G1:G1000"), "*.xls*")
For i = 0 To cnt - 1

'変数の代入
BaseCell = "G2"
BaseCell = Range(BaseCell).Offset(16 * i, 0).address

'グラフの作成
ActiveSheet.Shapes.AddChart.Select
'X軸の範囲を代入
Set XvarCell = Range(Range(BaseCell).Offset(1, 0), Range(BaseCell).Offset(3, 0))
'Y軸の範囲を代入
Set YvarCell = Range(Range(BaseCell).Offset(1, 2), Range(BaseCell).Offset(3, 2))
'2つのRANGEオブジェクトを結合※ノウハウ①
Set GraphArea = Union(XvarCell, YvarCell)
'データソースに上行のRANGEオブジェクトを格納※ノウハウ①
ActiveSheet.ChartObjects(i + 1).Chart.SetSourceData Source:=GraphArea
'ActiveSheet.ActiveChart.SetSourceData Source:=GraphArea ←EXCELのマクロ記録機能では左記のように記録されるが、これでは動かない
'テンプレートの適用(同マクロファイルと同じディレクトリ配下にテンプレートファイルを置いておく)
ActiveChart.ApplyChartTemplate (ThisWorkbook.Path + "\" + TemplateName)

'グラフの整形※ノウハウ②
With ActiveSheet.ChartObjects(i + 1)
.Width = GraphWidth
.Height = GraphHeight
.Top = Range(BaseCell).Offset(0.6).Top
.Left = Range(BaseCell).Offset(0, 6).Left
End With

'グラフタイトルの挿入、グラフX軸、Y軸ラベルの挿入※ノウハウ③
Title = Range(BaseCell).Offset(1, -1).Value
X_Axis = Range(BaseCell).Offset(2, -1).Value
Y_Axis = Range(BaseCell).Offset(3, -1).Value
ActiveChart.ChartTitle.Characters.Text = Title
ActiveChart.Axes(xlCategory, xlPrimary).AxisTitle.Characters.Text = X_Axis
ActiveChart.Axes(xlValue, xlPrimary).AxisTitle.Characters.Text = Y_Axis

'標準誤差バーの挿入※ノウハウ⑤
SEvar(0) = Range(BaseCell).Offset(1, 5).Value
SEvar(1) = Range(BaseCell).Offset(2, 5).Value
SEvar(2) = Range(BaseCell).Offset(3, 5).Value
ActiveChart.SeriesCollection(1).ErrorBar Direction:=xlY, Include:=xlPlusValues, Type:=xlCustom, Amount:=SEvar

Next i
End Sub


●サンプルコードおまけ(グラフオブジェクトとデータ入力エリアの一括クリア)
Sub GraphDelete()
Dim ChartObject1
For Each ChartObject1 In ActiveSheet.ChartObjects
ChartObject1.Delete
Next
End Sub

Sub DataDelete()
Dim IntMsg As Integer
IntMsg = MsgBox("本当に抽出データを削除してもよろしいですか?", vbYesNo, "確認")
Select Case IntMsg
Case vbYes
IntMsg = MsgBox("本当に本当によろしいですか?", vbYesNo, "再確認")
Select Case IntMsg
Case vbYes
For k = 0 To 24
Range(Cells(3 + 16 * k, 8), Cells(5 + 16 * k, 12)).ClearContents
Range(Cells(7 + 16 * k, 7), Cells(7 + 16 * k, 12)).ClearContents
Range(Cells(9 + 16 * k, 7), Cells(9 + 16 * k, 12)).ClearContents
Range(Cells(11 + 16 * k, 7), Cells(11 + 16 * k, 12)).ClearContents
Next k
Case vbNo
End Select
Case vbNo
End Select
End Sub


●マクロサンプル
グラフ化ツール
※ダウンロード後、拡張子を.txtから.xlsmに直す必要あり
  1. 2012/01/09(月) 06:18:45|
  2. MSOffice
  3. | トラックバック:0
  4. | コメント:0

間に空白セルがあるときに自動で埋めてくれるマクロ

下図のようなことをしたいときに便利なマクロを作ってみた。

macro1.png


コピペしたい行を選択して、右下角をダブルクリックでも同様のことができるが、数が多いと結構大変である。同マクロを使用すれば、空白セルを直上のセル内容でコピペし、自動で埋めてくれる。なお、最後の行だけは空白のまま処理が終了してしまうので手作業が必要。その点だけは注意。


●サンプルソース(上図のような場合の対応バージョン)

Sub AutoCopyPaste()

Dim SelectionArea As Range
Dim MaxRow As Long

Do
'コピペしたい列の一番左上のセルを指定(下記例ではA1)
Range("A1").Select
'上行で指定したセルから、空白があるセルまでダウンして、そのセルを選択
'※SlectionはRangeオブジェクトを操作するプロパティ。詳細はhttp://www.big.or.jp/~seto/vbaref/vbaref2.htmを参照
Selection.End(xlDown).Select
'上行で指定したセルから、同行かつ右3セルまでを選択(下記例ではA,B,C列の3セルが選択される)
Range(Selection, Selection.Offset(0, 2)).Select
'上行で指定したセルをコピー
Selection.Copy
'上行で指定したセルから、空白があるセルの1つの上の行までを選択
Range(Selection, Selection.End(xlDown).Offset(-1, 0)).Select
'選択している範囲の最大行目の数を変数に代入
'詳細は、http://www.k1simplify.com/vba/tipsleaf/leaf240.htmlを参照
Set SelectionArea = Selection
MaxRow = SelectionArea.Cells(SelectionArea.Count).Row
'65536行目(Excel2003の上限)まで達したらLoopを止める
If MaxRow > 65535 Then Exit Do
'上行で指定したセルにペースト
ActiveSheet.Paste
Loop
End Sub


●参考
2. セル範囲の選択と把握
http://www.big.or.jp/~seto/vbaref/vbaref2.htm
選択されているセルのアドレス・行・列番号 を調べる / 順番にアクセスする
http://www.k1simplify.com/vba/tipsleaf/leaf240.html
  1. 2011/12/26(月) 00:52:55|
  2. MSOffice
  3. | トラックバック:0
  4. | コメント:0
次のページ